Oracle啟動(dòng)過程簡(jiǎn)介_第1頁
Oracle啟動(dòng)過程簡(jiǎn)介_第2頁
Oracle啟動(dòng)過程簡(jiǎn)介_第3頁
Oracle啟動(dòng)過程簡(jiǎn)介_第4頁
Oracle啟動(dòng)過程簡(jiǎn)介_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、oracle的一個(gè)簡(jiǎn)要的啟動(dòng)過程:我們通常所說的Oracle Server主要由兩個(gè)部分組成:Instance和Database。Instance是指一組后臺(tái)進(jìn)程(在Windows上是一組線程)和一塊共享內(nèi)存區(qū)域;Database是指存儲(chǔ)在磁盤上的一組物理文件。通過Instance與Database協(xié)同,Oracle數(shù)據(jù)庫才能形成一個(gè)動(dòng)態(tài)的可訪問關(guān)系型數(shù)據(jù)庫系統(tǒng)。1.1 數(shù)據(jù)庫的啟動(dòng)從表象來看,數(shù)據(jù)庫的啟動(dòng)極其簡(jiǎn)單,只需要以SYSDBA/SYSOPER身份登陸,敲一條startup命令既可啟動(dòng)數(shù)據(jù)庫。然而在這條命令之后,Oracle需要執(zhí)行一系列復(fù)雜的操作,深入理解這些操作不僅有助于了解Ora

2、cle數(shù)據(jù)庫的運(yùn)行機(jī)制,還可以在故障發(fā)生時(shí)幫助大家快速的定位問題的根源所在,所以接下來讓我們一起分析一下數(shù)據(jù)庫的啟動(dòng)過程。Oracle數(shù)據(jù)庫的啟動(dòng)主要包含三個(gè)步驟:?jiǎn)?dòng)數(shù)據(jù)庫到Nomount狀態(tài)啟動(dòng)數(shù)據(jù)庫到Mount狀態(tài)啟動(dòng)數(shù)據(jù)庫到Open狀態(tài)完成這三個(gè)過程,數(shù)據(jù)庫才能進(jìn)入就緒狀態(tài),準(zhǔn)備提供數(shù)據(jù)訪問。下面逐個(gè)來看看以上各個(gè)步驟的具體過程以及含義。1.1.1 啟動(dòng)數(shù)據(jù)庫到Nomount狀態(tài)在啟動(dòng)的第一步驟,Oracle首先尋找參數(shù)文件(pfile/spfile),然后根據(jù)參數(shù)文件中的設(shè)置(如內(nèi)存分配等設(shè)置),創(chuàng)建實(shí)例(INSTANCE),分配內(nèi)存,啟動(dòng)后臺(tái)進(jìn)程。Nomount的過程也就是啟動(dòng)數(shù)據(jù)

3、庫實(shí)例的過程。這個(gè)過程在后臺(tái)是啟動(dòng)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平臺(tái)的一個(gè)示范輸出,輸出顯示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í)行文件還有另外一個(gè)用途,在Unix/Linux上通過strings命令可以將oracle可執(zhí)行文件中的字符文本轉(zhuǎn)儲(chǔ)出來,在轉(zhuǎn)儲(chǔ)的文本中可以找到很多有意思的信息,比如一些Oracle未公開的Hints信息、數(shù)據(jù)庫字典基表創(chuàng)建信息等,類似如下一條命令可以完成這樣的工作:strings $ORACLE_HOME/bin/oracle > oracle.txt

6、在Nomount初始化的過程中,只要擁有了一個(gè)參數(shù)文件,就可以憑之啟動(dòng)實(shí)例(INSTANCE),這一步驟并不需要任何控制文件或數(shù)據(jù)文件等的參與。1.1.1.1 實(shí)例以及進(jìn)程的創(chuàng)建以下是正常情況下啟動(dò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ū)域,啟動(dòng)了相應(yīng)的后臺(tái)進(jìn)程。SGA的分配信息從以上輸出中可以看到。

8、觀察告警日志文件(alert_.log),可以看到這一階段的啟動(dòng)過程:讀取參數(shù)文件,應(yīng)用參數(shù)啟動(dòng)實(shí)例。所有在參數(shù)文件中定義的非缺省參數(shù)都會(huì)記錄在告警日志文件中,以下是這一過程的日志摘要示例: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í)例之后,后臺(tái)進(jìn)程依次啟動(dòng),注意以下輸出中包含了PID信息以及OS ID兩個(gè)信息,PID代表該進(jìn)程在數(shù)據(jù)庫內(nèi)部的標(biāo)識(shí)符編號(hào),而OS ID則代表該進(jìn)程在操作系統(tǒng)上的進(jìn)程編號(hào):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早期版本中,后臺(tái)進(jìn)程啟動(dòng)的日志信息里并不包含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,而且每個(gè)后臺(tái)進(jìn)程的啟動(dòng)都有單獨(dú)的時(shí)間標(biāo)記(時(shí)間標(biāo)記可以幫助我們判斷每個(gè)后臺(tái)進(jìn)程啟動(dòng)時(shí)所消耗的時(shí)間,從而輔助進(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不同版本中的變化來體會(huì)Oracle的技術(shù)進(jìn)步、甚至借鑒這些變化是學(xué)習(xí)Oracle的方法之一。任何細(xì)微的變化都值得注意,認(rèn)真、細(xì)致、嚴(yán)謹(jǐn)是對(duì)DBA的基本素質(zhì)要求。細(xì)心的讀者朋友或許可以注意到,在前面日志里的進(jìn)程啟動(dòng)信息里,并沒有pid=1的進(jìn)程,那么這個(gè)進(jìn)程是否存在呢?1.1.1.2 V$PROCESS視圖通過數(shù)據(jù)庫中的v$process視圖,可以找到對(duì)應(yīng)于操作系統(tǒng)的每個(gè)進(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、個(gè)PSEUDO進(jìn)程,這個(gè)進(jìn)程被認(rèn)為是初始化數(shù)據(jù)庫的進(jìn)程,啟動(dòng)其他進(jìn)程之前即被占用,并在數(shù)據(jù)庫中一直存在。v$process的查詢輸出中,SPID列代表的就是操作系統(tǒng)上的進(jìn)程號(hào),通過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)某個(gè)進(jìn)程表現(xiàn)異常(如占用很高的CPU資源),那么通過操作系統(tǒng)上的PID和V$PROCESS視圖中的SPID關(guān)聯(lián),就可以找到這個(gè)OS上的進(jìn)程在數(shù)據(jù)庫內(nèi)部的化身,從而可以進(jìn)行進(jìn)一步的跟蹤診斷。V$PROCESS視圖包含當(dāng)前數(shù)據(jù)庫中活動(dòng)進(jìn)程的相關(guān)信息,這些進(jìn)程在操作系統(tǒng)上都存在與之對(duì)應(yīng)的OS進(jìn)程。其中LATCHWAIT列代

19、表進(jìn)程當(dāng)前正在等待的LATCH信息,LATCHSPIN則記錄進(jìn)程正在通過SPIN進(jìn)行LATCH的競(jìng)爭(zhēng)。Latch通常被稱為閂,是數(shù)據(jù)庫內(nèi)部的串行鎖機(jī)制,主要用來控制內(nèi)存上的并發(fā),在多處理器系統(tǒng)上,Oracle進(jìn)程通過自旋(spin)來進(jìn)行Latch爭(zhēng)奪。這個(gè)視圖結(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)存中記錄,這個(gè)ADDR記錄的正是這樣的內(nèi)存地址信息。ADDR在數(shù)據(jù)庫中(甚至是所有軟件中)是非常重要的,雖然通常并不會(huì)用到,但是深入理解這些知識(shí)有助于大家更好的了解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)識(shí)符(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)的幾個(gè)字段則記錄了進(jìn)程的PGA使用情況。1.1.1.3 參數(shù)文件的選擇接下來關(guān)注一下啟動(dòng)過程中Oracle選擇參數(shù)

22、文件的順序。從Oracle9i開始,spfile被引入Oracle數(shù)據(jù)庫,Oracle首選spfile<ORACLE_SID>.ora文件作為啟動(dòng)參數(shù)文件;如果該文件不存在,Oracle選擇spfile.ora文件;如果前兩者都不存在,Oracle將會(huì)選擇init<ORACLE_SID>.ora文件;如果以上三個(gè)文件都不存在,Oracle將無法創(chuàng)建和啟動(dòng)instance。Oracle在啟動(dòng)過程中,會(huì)在特定的路徑中尋找參數(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。現(xiàn)在如果更名spfile<ORACLE_SID>.ora文件,此后Oracle將選擇spfile.ora文件啟動(dòng)數(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文件啟動(dòng)數(shù)據(jù)庫:oraclejumper dbs$ mv spfile.ora spfile.ora.bakSQL> startup nomountSQL> show parameter spfileNAME TYPE VALUE- - -s

25、pfile string如果這三個(gè)文件都不存在,Oracle將無法啟動(dòng):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)的錯(cuò)誤提示,報(bào)告無法找到參數(shù)文件init<ORACLE_SID>.ora,這

26、正是Oracle在啟動(dòng)過程中最后一個(gè)查找的參數(shù)文件。在Oracle整個(gè)啟動(dòng)過程中,參數(shù)文件是寫在應(yīng)用程序中的硬代碼,按照前面描述的順序進(jìn)行查找,以下是來自源碼中關(guān)于參數(shù)文件及其查找順序的定義:?/dbs/spfile.ora?/dbs/spfile.ora?/dbs/init.ora雖然不能改變Oracle對(duì)于參數(shù)文件的搜索路徑及行為,但是如果參數(shù)文件不在相應(yīng)的位置,在Linux/Unix系統(tǒng)上,可以通過符號(hào)鏈接來進(jìn)行重定位,以滿足一些特殊需要。1.1.1.4 實(shí)例啟動(dòng)最小參數(shù)需求在參數(shù)文件中,通常需要最少的參數(shù)是db_name ,設(shè)置了這個(gè)參數(shù)之后,數(shù)據(jù)庫實(shí)例就可以啟動(dòng),來看一個(gè)簡(jiǎn)單的測(cè)試。

27、可以隨意命名一個(gè)ORACLE_SID(測(cè)試來自于Linux下,適用于Linux/Unix,對(duì)于Windows平臺(tái),需要通過oradim.exe工具創(chuàng)建服務(wù)),然后嘗試啟動(dòng)到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ù)文件查找失敗會(huì)給出提示信息,此時(shí)創(chuàng)建一個(gè)最簡(jiǎn)單的參數(shù)文件(僅包含DB_NAME初始化參數(shù)),然后就可以啟動(dòng)實(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論