




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、oracle的一個簡要的啟動過程:我們通常所說的Oracle Server主要由兩個部分組成:Instance和Database。Instance是指一組后臺進(jìn)程(在Windows上是一組線程)和一塊共享內(nèi)存區(qū)域;Database是指存儲在磁盤上的一組物理文件。通過Instance與Database協(xié)同,Oracle數(shù)據(jù)庫才能形成一個動態(tài)的可訪問關(guān)系型數(shù)據(jù)庫系統(tǒng)。1.1 數(shù)據(jù)庫的啟動從表象來看,數(shù)據(jù)庫的啟動極其簡單,只需要以SYSDBA/SYSOPER身份登陸,敲一條startup命令既可啟動數(shù)據(jù)庫。然而在這條命令之后,Oracle需要執(zhí)行一系列復(fù)雜的操作,深入理解這些操作不僅有助于了解Ora
2、cle數(shù)據(jù)庫的運(yùn)行機(jī)制,還可以在故障發(fā)生時幫助大家快速的定位問題的根源所在,所以接下來讓我們一起分析一下數(shù)據(jù)庫的啟動過程。Oracle數(shù)據(jù)庫的啟動主要包含三個步驟:啟動數(shù)據(jù)庫到Nomount狀態(tài)啟動數(shù)據(jù)庫到Mount狀態(tài)啟動數(shù)據(jù)庫到Open狀態(tài)完成這三個過程,數(shù)據(jù)庫才能進(jìn)入就緒狀態(tài),準(zhǔn)備提供數(shù)據(jù)訪問。下面逐個來看看以上各個步驟的具體過程以及含義。1.1.1 啟動數(shù)據(jù)庫到Nomount狀態(tài)在啟動的第一步驟,Oracle首先尋找參數(shù)文件(pfile/spfile),然后根據(jù)參數(shù)文件中的設(shè)置(如內(nèi)存分配等設(shè)置),創(chuàng)建實(shí)例(INSTANCE),分配內(nèi)存,啟動后臺進(jìn)程。Nomount的過程也就是啟動數(shù)據(jù)
3、庫實(shí)例的過程。這個過程在后臺是啟動Oracle可執(zhí)行程序的過程,Windows上是oracle.exe文件的初始化,在Unix/Linux上是oracle可執(zhí)行文件的初始化。Windows上Oracle11g的執(zhí)行文件大小約為86M,而Linux下Oracle11g的執(zhí)行文件達(dá)到145M左右:D:oracleproduct11.1.0BIN>dir oracle.exe2007-10-03 17:42 89,702,400 oracle.exeoraclelocalhost bin$ ls -al $ORACLE_HOME/bin/oracle-rwsr-s-x 1 oracle dba
4、 151901909 Jul 4 15:13 /opt/oracle/product/11.1.0/bin/oracle在Unix/Linux上可以通過file命令查看oracle執(zhí)行文件來判斷Oracle是64位或是32位的,以下是Linux平臺的一個示范輸出,輸出顯示Oracle為32位:oraclelocalhost bin$ file $ORACLE_HOME/bin/oracle/opt/oracle/product/11.1.0/bin/oracle: setuid setgid ELF 32-bit LSB executable, Intel 80386, version 1 (
5、SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped在Windows上,也有可選的命令增強(qiáng)工具可以提供類似的功能。了解Oracle可執(zhí)行文件還有另外一個用途,在Unix/Linux上通過strings命令可以將oracle可執(zhí)行文件中的字符文本轉(zhuǎn)儲出來,在轉(zhuǎn)儲的文本中可以找到很多有意思的信息,比如一些Oracle未公開的Hints信息、數(shù)據(jù)庫字典基表創(chuàng)建信息等,類似如下一條命令可以完成這樣的工作:strings $ORACLE_HOME/bin/oracle > oracle.txt
6、在Nomount初始化的過程中,只要擁有了一個參數(shù)文件,就可以憑之啟動實(shí)例(INSTANCE),這一步驟并不需要任何控制文件或數(shù)據(jù)文件等的參與。1.1.1.1 實(shí)例以及進(jìn)程的創(chuàng)建以下是正常情況下啟動到nomount狀態(tài)的過程:oracleeygle bdump$ sqlplus /nologSQL*Plus: Release 10.2.0.1.0 - Production on Wed Jun 28 12:42:30 2006Copyright (c) 1982, 2005, Oracle. All rights reserved.SQL> connect / as sysdbaConn
7、ected to an idle instance.SQL> startup nomount;ORACLE instance started.Total System Global Area 1073741824 bytesFixed Size 1223488 bytesVariable Size 264242368 bytesDatabase Buffers 801112064 bytesRedo Buffers 7163904 bytes注意這里,Oracle根據(jù)參數(shù)文件的內(nèi)容,創(chuàng)建了instance,分配了相應(yīng)的內(nèi)存區(qū)域,啟動了相應(yīng)的后臺進(jìn)程。SGA的分配信息從以上輸出中可以看到。
8、觀察告警日志文件(alert_.log),可以看到這一階段的啟動過程:讀取參數(shù)文件,應(yīng)用參數(shù)啟動實(shí)例。所有在參數(shù)文件中定義的非缺省參數(shù)都會記錄在告警日志文件中,以下是這一過程的日志摘要示例:Wed Jun 28 12:42:40 2006Starting ORACLE instance (normal)LICENSE_MAX_SESSION = 0LICENSE_SESSIONS_WARNING = 0Picked latch-free SCN scheme 2Autotune of undo retention is turned on. IMODE=BRILAT =18LICENSE_MA
9、X_USERS = 0SYS auditing is disabledksdpec: called for event 13740 prior to event group initializationStarting up ORACLE RDBMS Version: 10.2.0.1.0.System parameters with non-default values:processes = 150_shared_pool_size = 255852544_large_pool_size = 0_java_pool_size = 4194304_streams_pool_size = 0s
10、ga_target = 1073741824control_files = /opt/oracle/oradata/eygle/control01.ctl, /opt/oracle/oradata/eygle/control02.ctl, /opt/oracle/oradata/eygle/control03.ctldb_block_size = 8192_db_cache_size = 805306368.background_dump_dest = /opt/oracle/admin/eygle/bdumpuser_dump_dest = /opt/oracle/admin/eygle/u
11、dumpdb_name = eygle 應(yīng)用參數(shù)創(chuàng)建實(shí)例之后,后臺進(jìn)程依次啟動,注意以下輸出中包含了PID信息以及OS ID兩個信息,PID代表該進(jìn)程在數(shù)據(jù)庫內(nèi)部的標(biāo)識符編號,而OS ID則代表該進(jìn)程在操作系統(tǒng)上的進(jìn)程編號:PMON started with pid=2, OS id=6290PSP0 started with pid=3, OS id=6292MMAN started with pid=4, OS id=6294DBW0 started with pid=5, OS id=6296LGWR started with pid=6, OS id=6298CKPT started
12、with pid=7, OS id=6300SMON started with pid=8, OS id=6302RECO started with pid=9, OS id=6304CJQ0 started with pid=10, OS id=6306MMON started with pid=11, OS id=6308MMNL started with pid=12, OS id=6310在這里提醒大家注意一下Oracle不同版本告警日志信息的變化,在Oracle9i早期版本中,后臺進(jìn)程啟動的日志信息里并不包含OS ID,以下是Oracle 9.2.0.4的日志信息(在Oracle 9
13、.2.0.8中已經(jīng)包含了OS ID信息):PMON started with pid=2DBW0 started with pid=3LGWR started with pid=4CKPT started with pid=5SMON started with pid=6RECO started with pid=7在Oracle 11g中,這部分信息有了進(jìn)一步的增強(qiáng),輸出中不僅包含了OS ID,而且每個后臺進(jìn)程的啟動都有單獨(dú)的時間標(biāo)記(時間標(biāo)記可以幫助我們判斷每個后臺進(jìn)程啟動時所消耗的時間,從而輔助進(jìn)行問題診斷):Sat Jul 05 09:53:55 2008PMON started wi
14、th pid=2, OS id=13898 Sat Jul 05 09:53:55 2008VKTM started with pid=3, OS id=13900 at elevated priorityVKTM running at (20)ms precisionSat Jul 05 09:53:55 2008DIAG started with pid=4, OS id=13904 Sat Jul 05 09:53:55 2008DBRM started with pid=5, OS id=13906 Sat Jul 05 09:53:55 2008PSP0 started with p
15、id=6, OS id=13908 提示:從Oracle不同版本中的變化來體會Oracle的技術(shù)進(jìn)步、甚至借鑒這些變化是學(xué)習(xí)Oracle的方法之一。任何細(xì)微的變化都值得注意,認(rèn)真、細(xì)致、嚴(yán)謹(jǐn)是對DBA的基本素質(zhì)要求。細(xì)心的讀者朋友或許可以注意到,在前面日志里的進(jìn)程啟動信息里,并沒有pid=1的進(jìn)程,那么這個進(jìn)程是否存在呢?1.1.1.2 V$PROCESS視圖通過數(shù)據(jù)庫中的v$process視圖,可以找到對應(yīng)于操作系統(tǒng)的每個進(jìn)程信息:SQL> select addr,pid,spid,username,program from v$process;ADDR PID SPID USERNA
16、ME PROGRAM- - - - -5FE162AC 1 PSEUDO5FE16860 2 6290 oracle oracleeygle (PMON)5FE16E14 3 6292 oracle oracleeygle (PSP0)5FE173C8 4 6294 oracle oracleeygle (MMAN)5FE1797C 5 6296 oracle oracleeygle (DBW0)5FE17F30 6 6298 oracle oracleeygle (LGWR)5FE184E4 7 6300 oracle oracleeygle (CKPT)。注意以上輸出,pid=1的進(jìn)程是一
17、個PSEUDO進(jìn)程,這個進(jìn)程被認(rèn)為是初始化數(shù)據(jù)庫的進(jìn)程,啟動其他進(jìn)程之前即被占用,并在數(shù)據(jù)庫中一直存在。v$process的查詢輸出中,SPID列代表的就是操作系統(tǒng)上的進(jìn)程號,通過SPID可以將進(jìn)程從操作系統(tǒng)到數(shù)據(jù)庫關(guān)聯(lián)起來:oracleeygle bdump$ ps -ef|grep ora_oracle 6290 1 0 12:42 ? 00:00:00 ora_pmon_eygleoracle 6292 1 0 12:42 ? 00:00:00 ora_psp0_eygleoracle 6294 1 0 12:42 ? 00:00:00 ora_mman_eygleoracle 6296
18、 1 0 12:42 ? 00:00:00 ora_dbw0_eygleoracle 6298 1 0 12:42 ? 00:00:00 ora_lgwr_eygleoracle 6300 1 0 12:42 ? 00:00:00 ora_ckpt_eygle。如果在操作系統(tǒng)上發(fā)現(xiàn)某個進(jìn)程表現(xiàn)異常(如占用很高的CPU資源),那么通過操作系統(tǒng)上的PID和V$PROCESS視圖中的SPID關(guān)聯(lián),就可以找到這個OS上的進(jìn)程在數(shù)據(jù)庫內(nèi)部的化身,從而可以進(jìn)行進(jìn)一步的跟蹤診斷。V$PROCESS視圖包含當(dāng)前數(shù)據(jù)庫中活動進(jìn)程的相關(guān)信息,這些進(jìn)程在操作系統(tǒng)上都存在與之對應(yīng)的OS進(jìn)程。其中LATCHWAIT列代
19、表進(jìn)程當(dāng)前正在等待的LATCH信息,LATCHSPIN則記錄進(jìn)程正在通過SPIN進(jìn)行LATCH的競爭。Latch通常被稱為閂,是數(shù)據(jù)庫內(nèi)部的串行鎖機(jī)制,主要用來控制內(nèi)存上的并發(fā),在多處理器系統(tǒng)上,Oracle進(jìn)程通過自旋(spin)來進(jìn)行Latch爭奪。這個視圖結(jié)構(gòu)如下所示(Oracle10gR2信息):SQL> desc v$processName Null? Type- - -ADDR RAW(4)PID NUMBERSPID VARCHAR2(12)USERNAME VARCHAR2(15)SERIAL# NUMBERTERMINAL VARCHAR2(30)PROGRAM VAR
20、CHAR2(48)TRACEID VARCHAR2(255)BACKGROUND VARCHAR2(1)LATCHWAIT VARCHAR2(8)LATCHSPIN VARCHAR2(8)PGA_USED_MEM NUMBERPGA_ALLOC_MEM NUMBERPGA_FREEABLE_MEM NUMBERPGA_MAX_MEM NUMBER注意這里的ADDR字段代表的是進(jìn)程的地址,進(jìn)程的狀態(tài)等信息在內(nèi)存中記錄,這個ADDR記錄的正是這樣的內(nèi)存地址信息。ADDR在數(shù)據(jù)庫中(甚至是所有軟件中)是非常重要的,雖然通常并不會用到,但是深入理解這些知識有助于大家更好的了解Oracle數(shù)據(jù)庫。進(jìn)程的
21、地址(Address of process)進(jìn)一步的被縮寫為PADDR,在V$SESSION視圖中記錄的PADDR就是V$PROCESS.ADDR的進(jìn)一步延伸,通過兩者關(guān)聯(lián),可以向數(shù)據(jù)庫進(jìn)一步深入。如果向操作系統(tǒng)端延伸,則SPID代表的正是操作系統(tǒng)進(jìn)程標(biāo)識符(Operating system process identifier),通過SPID和OS中看到的進(jìn)程PID關(guān)聯(lián),就可以建立從操作系統(tǒng)到數(shù)據(jù)庫的關(guān)聯(lián)。所以V$PROCESS被認(rèn)為是從操作系統(tǒng)到數(shù)據(jù)庫的入口。此外,和PGA相關(guān)的幾個字段則記錄了進(jìn)程的PGA使用情況。1.1.1.3 參數(shù)文件的選擇接下來關(guān)注一下啟動過程中Oracle選擇參數(shù)
22、文件的順序。從Oracle9i開始,spfile被引入Oracle數(shù)據(jù)庫,Oracle首選spfile<ORACLE_SID>.ora文件作為啟動參數(shù)文件;如果該文件不存在,Oracle選擇spfile.ora文件;如果前兩者都不存在,Oracle將會選擇init<ORACLE_SID>.ora文件;如果以上三個文件都不存在,Oracle將無法創(chuàng)建和啟動instance。Oracle在啟動過程中,會在特定的路徑中尋找參數(shù)文件,在Unix/Linux下的路徑為$ORACLE_HOME/dbs目錄,在WINDOWS上的路徑為$ORACLE_HOMEdatabase目錄??梢?/p>
23、在SQL*PLUS中通過show parameter spfile命令來檢查數(shù)據(jù)庫是否使用了spfile文件,如果value不為Null,則數(shù)據(jù)庫使用了spfile文件:SQL> show parameter spfileNAME TYPE VALUE- - -spfile string ?/dbs/spfile.ora注意這里的"?"代表ORACLE_HOME,代表數(shù)據(jù)庫的sid?,F(xiàn)在如果更名spfile<ORACLE_SID>.ora文件,此后Oracle將選擇spfile.ora文件啟動數(shù)據(jù)庫:oraclejumper dbs$ mv spfilec
24、onner.ora spfileconner.ora.bakSQL> startup nomountSQL> show parameter spfileNAME TYPE VALUE- - -spfile string ?/dbs/spfile.ora進(jìn)一步的如果再更名spfile.ora文件,此后Oracle將選擇init.ora文件啟動數(shù)據(jù)庫:oraclejumper dbs$ mv spfile.ora spfile.ora.bakSQL> startup nomountSQL> show parameter spfileNAME TYPE VALUE- - -s
25、pfile string如果這三個文件都不存在,Oracle將無法啟動:oraclejumper dbs$ mv initconner.ora initconner.ora.bakSQL> startupORA-01078: failure in processing system parametersLRM-00109: could not open parameter file '/opt/oracle/product/9.2.0/dbs/initconner.ora'注意這里出現(xiàn)的錯誤提示,報告無法找到參數(shù)文件init<ORACLE_SID>.ora,這
26、正是Oracle在啟動過程中最后一個查找的參數(shù)文件。在Oracle整個啟動過程中,參數(shù)文件是寫在應(yīng)用程序中的硬代碼,按照前面描述的順序進(jìn)行查找,以下是來自源碼中關(guān)于參數(shù)文件及其查找順序的定義:?/dbs/spfile.ora?/dbs/spfile.ora?/dbs/init.ora雖然不能改變Oracle對于參數(shù)文件的搜索路徑及行為,但是如果參數(shù)文件不在相應(yīng)的位置,在Linux/Unix系統(tǒng)上,可以通過符號鏈接來進(jìn)行重定位,以滿足一些特殊需要。1.1.1.4 實(shí)例啟動最小參數(shù)需求在參數(shù)文件中,通常需要最少的參數(shù)是db_name ,設(shè)置了這個參數(shù)之后,數(shù)據(jù)庫實(shí)例就可以啟動,來看一個簡單的測試。
27、可以隨意命名一個ORACLE_SID(測試來自于Linux下,適用于Linux/Unix,對于Windows平臺,需要通過oradim.exe工具創(chuàng)建服務(wù)),然后嘗試啟動到nomount狀態(tài):oraclejumper dbs$ export ORACLE_SID=juliaoraclejumper dbs$ sqlplus "/ as sysdba"SQL*Plus: Release 9.2.0.4.0 - Production on Mon May 8 11:08:36 2006Copyright (c) 1982, 2002, Oracle Corporation. A
28、ll rights reserved.Connected to an idle instance.SQL> startup nomount;ORA-01078: failure in processing system parametersLRM-00109: could not open parameter file '/opt/oracle/product/9.2.0/dbs/initjulia.ora'參數(shù)文件查找失敗會給出提示信息,此時創(chuàng)建一個最簡單的參數(shù)文件(僅包含DB_NAME初始化參數(shù)),然后就可以啟動實(shí)例:SQL> ! echo "db_n
29、ame=julia" > /opt/oracle/product/9.2.0/dbs/initjulia.oraSQL> startup nomount;ORACLE instance started.Total System Global Area 97588504 bytesFixed Size 451864 bytesVariable Size 46137344 bytesDatabase Buffers 50331648 bytesRedo Buffers 667648 bytes缺省的,如果不設(shè)置,background_dump_dest目錄(告警日志文件alert_<ORACLE_SID>.lo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村蓋房簽合同范本
- 鄉(xiāng)鎮(zhèn)庫房建造合同范本
- 創(chuàng)業(yè)老板合同范本
- 1997施工合同范本
- 公司購買材料合同范本
- 保險勞務(wù)合同范本
- mpp管采購合同范本
- app廣告合同范本
- 加盟痘痘合同范本
- 住房公證合同范本
- 德州環(huán)鋰新能源科技有限公司2萬噸年廢舊鋰電池回收項目環(huán)境影響報告書
- 2025年江蘇省中職《英語》學(xué)業(yè)水平考試核心考點(diǎn)試題庫500題(重點(diǎn))
- GB/T 1346-2024水泥標(biāo)準(zhǔn)稠度用水量、凝結(jié)時間與安定性檢驗方法
- 易制毒化學(xué)品理論考試試題及答案
- 【MOOC】跨文化交際-蘇州大學(xué) 中國大學(xué)慕課MOOC答案
- 小學(xué)全體教師安全工作培訓(xùn)
- 北師大版數(shù)學(xué)八年級下冊全冊教案及反思
- 2024年五級咖啡師職業(yè)技能鑒定考試題庫(含答案)
- 湖南版(湘教版)三年級美術(shù)下冊全冊全套課件(247張)
- 《教育心理學(xué)(第3版)》全套教學(xué)課件
- 九宮數(shù)獨(dú)200題(附答案全)
評論
0/150
提交評論