第一章數(shù)據(jù)庫(kù)的啟動(dòng)和關(guān)閉_第1頁(yè)
第一章數(shù)據(jù)庫(kù)的啟動(dòng)和關(guān)閉_第2頁(yè)
第一章數(shù)據(jù)庫(kù)的啟動(dòng)和關(guān)閉_第3頁(yè)
第一章數(shù)據(jù)庫(kù)的啟動(dòng)和關(guān)閉_第4頁(yè)
第一章數(shù)據(jù)庫(kù)的啟動(dòng)和關(guān)閉_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

通常所說(shuō)的OracleServer主要由兩個(gè)部分組成:Instance和Database。Instance是指一組進(jìn)程(在Windows上是一組線程)和一塊共享內(nèi)存區(qū)域;Database是指在磁盤(pán)上的一組物理文件。通過(guò)Instance與Database協(xié)同,Oracle數(shù)據(jù)庫(kù)才能形成一個(gè)動(dòng)態(tài)的可關(guān)系本章將由數(shù)據(jù)庫(kù)如何啟動(dòng)與關(guān)閉入手,開(kāi)始和大家一起進(jìn)入Oracle從表象來(lái)看,數(shù)據(jù)庫(kù)的啟動(dòng)極其簡(jiǎn)單,只需要以SYSDBA/SYSOPER登陸,敲一條startup命令既可啟動(dòng)數(shù)據(jù)庫(kù)。然而在這條命令之后,Oracle需要執(zhí)行一系列復(fù)雜的操作,深入理解這些操作不僅有助于了解Oracle數(shù)據(jù)庫(kù)的運(yùn)行機(jī)制,還可以在故障發(fā)生時(shí)幫助大家快速OracleNomount啟動(dòng)數(shù)據(jù)庫(kù)到Open完成這三個(gè)過(guò)程,數(shù)據(jù)庫(kù)才能進(jìn)入就緒狀態(tài),準(zhǔn)備提供數(shù)據(jù)。圖1-1描述了一個(gè)數(shù)據(jù)庫(kù)從關(guān)閉狀態(tài)(shutdown)到OPEN狀態(tài)經(jīng)歷的這些步驟(關(guān)閉步驟與此相反,是一個(gè)逆向圖0-1-1數(shù)據(jù)庫(kù)的起停步驟啟動(dòng)數(shù)Nomount狀在啟動(dòng)的第一步驟,Oracle首先尋找參數(shù)文件(pfile/spfile)(如內(nèi)存分配等設(shè)置,創(chuàng)建實(shí)例(INSTANCE,分配內(nèi)存,啟動(dòng)進(jìn)程。Nomount的過(guò)程也就是啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例的過(guò)程。這個(gè)過(guò)程在是啟動(dòng)Oracle可執(zhí)行程序的過(guò)程,Windows上是執(zhí)行oracle.exe文件進(jìn)行初始化,在Unix/Linux上是執(zhí)行oracle可執(zhí)行文件進(jìn)行初始化。OracleWindowsOracle11g86MLinuxOracle11g的執(zhí)行文件達(dá)到145MOracle12c版本中,Oracle280M,由此可見(jiàn)不同D:\oracle\product\11.1.0\BIN>dir2007-10-03 89,702,400oracle.exe[oracle@localhostbin]$ls-al-rwsr-s--x1oracle Jul415:13/oracle/product/11.1.0/bin/oracleeygle-/home/oracle$ls-l-rwsr-s--x.1oracle Mar1623:40Unix/LinuxfileoracleOracle6432位的,以下是Linux平臺(tái)的一個(gè)示范輸出,輸出顯示Oracle為32位:[oracle@localhostbin]$file/opt/oracle/product/11.1.0/bin/oracle:setuidsetgidELF32-bitLSBexecutable,In80386,version1(SYSV),forGNU/Linux2.2.5,dynamicallylinked(usessharedlibs),not在Windows上,也有可選令增強(qiáng)工具可以提供類(lèi)似的功能。由于32位的Oracle數(shù)據(jù)庫(kù),最多只能使用約1.7G的內(nèi)存,會(huì)極大約束Oracle的性能,在生產(chǎn)環(huán)境中,應(yīng)當(dāng)使用64位系統(tǒng),部署64位的Oracle數(shù)據(jù)庫(kù)。了解OracleUnix/Linux上通過(guò)strings命令可以將oracle可執(zhí)行文件中的字符文本轉(zhuǎn)儲(chǔ)出來(lái),在轉(zhuǎn)儲(chǔ)的文本中可以找到很多有意思的信息,比如一些Oracle未公開(kāi)的Hints信息、數(shù)據(jù)庫(kù)字典基表創(chuàng)建信息等,類(lèi)似如下一條命令可以完成這樣的strings$ORACLE_HOME/bin/oracle>OracleDatabase12cPluggableeygle-/home/oracle$grep-ipluggableoracle.txt|morePluggableDatabaseOpen/ClosePluggableEnqueueheldbyforegroundorDBWRtosynchronizedatabasemount/openorpluggabledatabaseopenwithotheroperationsSynchronizepluggabledatabase_enable_pluggable_databaseEnablePluggable EnablecheckingofpluggabledatabaseIDinredoDebugflagforpluggabledatabaserelatedoperationspluggabledatabaseopenpluggabledatabaseclosePluggabledatabaseresetlogsCoordinatepluggabledatabaseoperationsPluggableDatabaseFileCopyPluggableUnsupportedRollbackSegment/UndoTablespaceoperationissued(andignored)inaPluggableDatabasenOracle10gRadioheadCreep這首歌[eygle@hpserver2~]$strings$ORACLE_HOME/bin/oracle|grepI'macreep,I'mawinner,what am nghere.Idon'tbelonghere-radiohead在Nomount初始化的過(guò),只要擁有了一個(gè)參數(shù)文件,就可以憑之啟動(dòng)實(shí)例(INSTANCE),這一步驟并不需要任何控制文件或數(shù)據(jù)文件等的參與。以下是在Linux平臺(tái)上正常啟動(dòng)實(shí)例到nomount狀態(tài)的過(guò)程:eygle-/home/oracle$exporteygle-/home/oracle$echo"db_name=eygle">$ORACLE_HOME/dbs/initeygle.oraeygle-/home/oracle$sqlplus"/assysdba"SQL*Plus:Release.1BetaonThuJun1416:59:392012Copyright(c)1982,2012,Oracle.Allrights.ConnectedtoanidleSQL>startupnomount;ORACLEinstancestarted.TotalSystemGlobal Fixed Variable Database Redo 注意觀察,Oracle根據(jù)參數(shù)文件的內(nèi)容,創(chuàng)建了instance,分配了相應(yīng)的內(nèi)存區(qū)域,啟動(dòng)了相應(yīng)的進(jìn)程。SGA的分配信息從以上輸出中可以看到。觀察告警日志文件(alert_<ORACLE_SID>.log,可以看到這一階段的啟動(dòng)過(guò)程:參數(shù)文件,應(yīng)用參數(shù)啟動(dòng)實(shí)例。所有在參數(shù)文件中定義的非缺省參數(shù)都會(huì)記錄在告警日志文件中以是這一過(guò)的日志 示例:ThuJun1416:55:14WARNING:unknownstateforDBspfilelocationresourceStartingORACLEinstance(normal)CLInotifiernumLatches:3******************LargePagesInformation*****************TotalSystemGlobalAreainlargepages=0KB(0%)Largepagesusedbythisinstance:0(0Largepagesunusedsystemwide=0(0KB)(allocincr4096KB)Largepagesconfiguredsystemwide=0(0KB)Largepagesize=2048TotalSystemGlobalAreasizeis230MB.Foroptimalperformance,priortothenextinstancerestartincreasethenumberofunusedlargepagesbyatleast115(pagesize2048KB,totalsize230MB)systemwidetoget100%oftheSystemGlobalAreaallocatedwithlargeLICENSE_MAX_SESSION=0LICENSE_SESSIONS_WARNING=Pickedlatch-SCNschemeUsingLOG_ARCHIVE_DEST_1parameterdefaultvalueas/u01/oracle/product/12.1.0/dbs/archAutotuneofundoretentionisturnedon.ILATLICENSE_MAX_USERS=SYSauditingiskfvLoadLibcannotbecalledinthisinstancetypeStartingup:OracleDatabase12cEnterpriseEditionRelease.1-64bitWiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions.ORACLE_HOME=/u01/oracle/product/12.1.0Systemname: Node 2.6.32-100.28.5.el6.x86_64#1SMPWedFeb218:40:23ESTMachine:VMname:VMWareVersion:Usingparametersettingsinserver-sideSystemparameterswithnon-defaultvalues:db_name ="eygle"PIDOSID兩個(gè)信息,PID代表該進(jìn)程在數(shù)據(jù)庫(kù)內(nèi)部的標(biāo)識(shí)符編號(hào),而OSID則代表該進(jìn)程在操作系統(tǒng)上的進(jìn)程編號(hào):ThuJun1416:59:43PMONstartedwithpid=2,OSid=2609ThuJun1416:59:43PSP0startedwithpid=3,OSid=2611ThuJun1416:59:442012VKTMstartedwithpid=4,OSid=2613VKTMrunningat(100ms)precisionThuJun1416:59:442012GEN0startedwithpid=5,OSid=2617ThuJun1416:59:442012DIAGstartedwithpid=6,OSid=2619ThuJun1416:59:442012OFSDstartedwithpid=7,OSid=2621ThuJun1416:59:442012DBRMstartedwithpid=8,OSid=2623ThuJun1416:59:442012DIA0startedwithpid=9,OSid=2625ThuJun1416:59:442012MMANstartedwithpid=10,OSid=2627ThuJun1416:59:442012DBW0startedwithpid=11,OSid=2629ThuJun1416:59:442012LGWRstartedwithpid=12,OSid=2631ThuJun1416:59:442012CKPTstartedwithpid=13,OSid=2633ThuJun1416:59:442012SMONstartedwithpid=14,OSid=2635ThuJun1416:59:442012RECOstartedwithpid=15,OSid=2637ThuJun1416:59:442012LREGstartedwithpid=16,OSid=2639ThuJun1416:59:442012MMONstartedwithpid=17,OSid=2641ThuJun1416:59:442012MMNLstartedwithpid=18,OSid=2643ORACLE_BASEfromenvironment=/u01/oracleUsingdefaultpga_aggregate_limitof1024MB在這里提醒大家注意一下OracleOracle9i早期版本中,OSIDOracle(Oracle中已經(jīng)包含了OSID信息:PMONstartedwithpid=2DBW0startedwithpid=3LGWRstartedwithpid=4CKPTstartedwithpid=5SMONstartedwithpid=6RECOstartedwithpid=7自racleatabae11g開(kāi)始,這部分信息有了進(jìn)一步的增強(qiáng),輸出中不僅包含了OSID,而且每個(gè)進(jìn)程的啟動(dòng)都有單獨(dú)的時(shí)間標(biāo)記(時(shí)間標(biāo)記可以幫助判斷每個(gè)進(jìn)程啟動(dòng)時(shí)所消耗的時(shí)間,從而輔助進(jìn)行問(wèn)題診斷:SatJul0509:53:55PMONstartedwithpid=2,OSid=13898SatJul0509:53:55VKTMstartedwithpid=3,OSid=13900atelevatedpriorityVKTMrunningat(20)msprecisionSatJul0509:53:55DIAGstartedwithpid=4,OSid=13904SatJul0509:53:552008DBRMstartedwithpid=5,OSSatJul0509:53:55PSP0startedwithpid=6,OS提示:從Oracle不同版本中的變化來(lái)體會(huì)Oracle的技術(shù)進(jìn)步、甚至借鑒這些變化是學(xué)習(xí)Oracle的方法之一。任何細(xì)微的變化都值得注意,認(rèn)真、細(xì)致、嚴(yán)謹(jǐn)是對(duì)DBA的基本素質(zhì)要求。Oracle的進(jìn)在本章開(kāi)篇已經(jīng)提到:Oracle的實(shí)例(Instance)是指一組進(jìn)程(在Windows上是一組線程)和一塊共享內(nèi)存區(qū)域。圖1-2即為Oracle數(shù)據(jù)庫(kù)的實(shí)例概要圖,可以看到實(shí)例的內(nèi)存區(qū)域SGA和一系列的進(jìn)程示意(詳細(xì)介紹將在后面章節(jié)逐步展開(kāi):圖1-0-2Oracle實(shí)例示意通過(guò)上一節(jié)提到的日志信息,可以清晰的看到進(jìn)程啟動(dòng)的過(guò)程,這里對(duì)于數(shù)據(jù)庫(kù)運(yùn)行最為至關(guān)重要的進(jìn)程主要有:PMON、DBWn、LGWR、CKPT、SMON、VKTM等。如果這些進(jìn)程出現(xiàn)異常終止,則數(shù)據(jù)庫(kù)將會(huì)。PMON–其全名為ProcessMonitor–進(jìn)程進(jìn)程,用于其他用戶進(jìn)程,當(dāng)出現(xiàn)用戶進(jìn)程失敗時(shí),執(zhí)行進(jìn)程恢復(fù)工作。PMON的主要恢復(fù)職責(zé)在于釋放失敗進(jìn)程未能正常釋放的內(nèi)存鎖和其他資源,如清理事務(wù)表狀態(tài)等。作為實(shí)例第一個(gè)啟動(dòng)的進(jìn)程,PMON還肩負(fù)其他Oracle進(jìn)程的職責(zé),在必要時(shí)重啟這些進(jìn)程;此外,PMON還負(fù)責(zé)向TNS器實(shí)例。DBWn–其全名為DataBaeWriterProcess–BWR進(jìn)程,n作(DBW0)racle20DBW0~DBW9,DBWa~DBWjDBWR進(jìn)DBWn進(jìn)程在滿足以下條件時(shí)執(zhí)行臟數(shù)據(jù)(DirtyBuffer)寫(xiě)出當(dāng)一個(gè)Server進(jìn)程掃描一定量的Buffer后仍然不能發(fā)現(xiàn)可用的BufferDBWn LGWR進(jìn)程通過(guò)日志寫(xiě)操作,延遲DBWnLGWR–LogWriterProcess–日志寫(xiě)進(jìn)程,LGWRSGARedoLogBuffer,將其中的內(nèi)容連續(xù)寫(xiě)出到的日志文件中。Oracle的Redo中記錄的是可以重演事務(wù)變更的必要信息,在事務(wù)提交時(shí),日志必須寫(xiě)出到日志文件中。通過(guò)LGWR對(duì)于日志文件的連續(xù)寫(xiě)出,就可以推延了DBWR對(duì)于臟數(shù)據(jù)的寫(xiě)出,從而保證DBWR可以實(shí)現(xiàn)批量寫(xiě)出的在以下條件下,LGWR日志發(fā)生切換(Log3RedoLogBuffer1/31MB在DBWn執(zhí)行寫(xiě)出前,需要確保相關(guān)DirtyBuffer的對(duì)應(yīng)日志都已寫(xiě)出,此時(shí)會(huì)通知LGWR寫(xiě)出此前未完成寫(xiě)出的相關(guān)日志。CKPT–其全名為CheckpointProcess–檢查點(diǎn)進(jìn)程,它負(fù)責(zé)更新控制文件和數(shù)據(jù)文件頭的檢查點(diǎn)信息,CKPT進(jìn)程還會(huì)通知DBWnSCN、Redo的恢復(fù)位置等。SMON–其全名為SystemMonitorProcess–系統(tǒng)進(jìn)程,負(fù)責(zé)執(zhí)行一系列的系統(tǒng)級(jí)別在數(shù)據(jù)庫(kù)啟動(dòng)時(shí),執(zhí)行必要的實(shí)例恢復(fù)。在RAC數(shù)據(jù)庫(kù)中,SMON執(zhí)行在實(shí)例恢復(fù)時(shí)跳過(guò)的中斷事務(wù),如由于讀文件或表空間離線等錯(cuò)誤,在實(shí)例恢復(fù)時(shí)無(wú)法執(zhí)行,SMON則可以在表空間或文件時(shí)執(zhí)行事務(wù)恢復(fù)。SMON進(jìn)_TIME系統(tǒng)表。 _TIME表記錄了SCN與時(shí)間的對(duì)應(yīng)關(guān)系,由SMON定期進(jìn)行定新,并將一些較老的數(shù)據(jù)定期刪除。col_usage$數(shù)據(jù)字典表、mod_mods$系統(tǒng)表。OFFLINE清理obj$數(shù)據(jù)字典表中的數(shù)據(jù)VKTM–其全名為VirtualKeeperofTiMe–虛擬時(shí)鐘進(jìn)程,這個(gè)進(jìn)程是在OracleDatabaseVKTM或者作為參考時(shí)間計(jì)數(shù)器,這種方式每20毫秒更新一次,僅在高優(yōu)先級(jí)時(shí)可用。對(duì)于不同的版本,VKTM的設(shè)定模式可能不同,具體可以從告警日志文件中查知。在Oracle11g啟動(dòng)的過(guò),信息提示:VKTMrunningat(100ms)Oracle12cVKTMstartedwithpid=3,OSid=13900atelevatedpriorityVKTMrunningat(20)msprecisionV$PROCESS 通過(guò)數(shù)據(jù)庫(kù)中的v$processSQL>selectaddr,pid,spid,username,programfromv$process; PIDSPID USERNAMEPROGRAM12oracle@eygle3oracle@eygle4oracle@eygle5oracle@eygle6oracle@eygle 7 oracle@eygle注意以上輸出,pid=1PSEUDO進(jìn)程,這個(gè)進(jìn)程被認(rèn)為是初始化數(shù)據(jù)庫(kù)的進(jìn)程,啟動(dòng)其他進(jìn)程之前即被占用,并在數(shù)據(jù)庫(kù)中一直存在。通過(guò)Oracle的oradebug工具可SYSTEMSTATE:SQL>connect/assysdbaSQL>oradebugsetmypidStatementprocessed.SQL>oradebugdumpsystemstateStatementSQL>showparameter TYPE 在 中可以找到進(jìn)程轉(zhuǎn)儲(chǔ)文件,其中進(jìn)程1的信息如下,供讀者參考PROCESS1SO:0x91485a00,type:2,owner:(nil),flag:INIT/-/-/0x00if:0x3c:0x3proc=0x91485a00,name=process,file=ksu.hLINE:12616,pg=0(process)Oraclepid:1,ser:0,callscur/top:flags:(0x20)flags2: flags3:intrerror:0,callerror:0,sesserror:0,txnerror0intrqueue:emptyksudlpFALSEatlocation:(postinfo)lastpostreceived:00lastpostreceived-location:Nopostlastprocesstopostme:nonelastpostsent:00lastpostsent-location:Nopostlastprocesspostedbyme:(latchinfo)wait_event=0O/Sinfo:user:,term:,ospid:OSDpidinfo:Unixprocesspid:0,image:SO:0x6000c838,type:5,owner:0x91485a00,flag:INIT/-/-/0x00if:0x3c:proc=(nil),name=kssparent,file=kss2.hLINE:138,pg=0PSOchildstateobjectchanges:Dumpofmemoryfrom0x0000000091471AA8to0x0000000091471CB0 Repeat31在v$process的查詢輸出中,SPID列代表的就是操作系統(tǒng)上的進(jìn)程號(hào),通過(guò)SPID可以將[oracle@eyglebdump]$ps-ef|grep1012:4200:00:001012:4200:00:001012:4200:00:001012:4200:00:001012:4200:00:001012:4200:00:00如果在操作系統(tǒng)上發(fā)現(xiàn)某個(gè)進(jìn)程表現(xiàn)異常(如占用很高的CPU資源)通過(guò)操作系統(tǒng)上的PID和V$PROCESS視圖中的SPID關(guān)聯(lián),就可以找OS上的進(jìn)程在數(shù)據(jù)庫(kù)V$PROCESS視圖包含當(dāng)前數(shù)據(jù)庫(kù)中活動(dòng)進(jìn)程的相關(guān)信息,這些進(jìn)程在操作系統(tǒng)上都存在與之對(duì)應(yīng)的OS進(jìn)程。其中LATCHWAIT列代表進(jìn)程當(dāng)前正在等待的LATCH信息,LATCHSPINSPINLATCH的競(jìng)爭(zhēng)。Latch通常被稱(chēng)為閂,是數(shù)據(jù)庫(kù)內(nèi)Latch爭(zhēng)奪。這個(gè)視圖結(jié)構(gòu)如下所示(Oracle10gR2版本SQL>desc PGA_ 注意這里的ADDR字段代表的是進(jìn)程的地址,進(jìn)程的狀態(tài)等信息在內(nèi)存中記錄,這個(gè)ADDR記錄的正是這樣的內(nèi)存地址信息。ADDR在數(shù)據(jù)庫(kù)中(甚至是所有軟件中)是非常重要的,雖然通常并不會(huì)用到,但是深入理解這些知識(shí)有助于大家更好的了解Oracle數(shù)據(jù)庫(kù)。進(jìn)程的地址(Addressofprocess)進(jìn)一步的被縮寫(xiě)為PADDR,在V$SESSION視圖中記錄的PADDR就是V$PROCESS.ADDR的進(jìn)一步延伸,通過(guò)兩者關(guān)聯(lián),可以向數(shù)據(jù)庫(kù)進(jìn)一步深入。如果向操作系統(tǒng)端延伸,則SPID代表的正是操作系統(tǒng)進(jìn)程標(biāo)識(shí)符(OperatingsystemprocessidentifierSPIDOSPID關(guān)聯(lián),就可以建立從操作系統(tǒng)到數(shù)據(jù)庫(kù)所以V$PROCESS被認(rèn)為是從操作系統(tǒng)到數(shù)據(jù)庫(kù)的。此外,和PGA相關(guān)的幾個(gè)字段則記錄了進(jìn)程的PGA使用情況。在上一節(jié)我們提到,V$PROCESS被認(rèn)為是從操作系統(tǒng)到數(shù)據(jù)庫(kù)的,而進(jìn)入數(shù)據(jù)庫(kù)內(nèi)部,進(jìn)程需要?jiǎng)?chuàng)建會(huì)話(esion)執(zhí)行數(shù)據(jù)庫(kù)操作和,通常一個(gè)進(jìn)程創(chuàng)建一個(gè)會(huì)話,特殊情況下,一個(gè)進(jìn)程也可以創(chuàng)建多個(gè)數(shù)據(jù)庫(kù)會(huì)話。會(huì)話信息通過(guò)視圖V$SESSION進(jìn)行體現(xiàn)和管理。V$SESSION視圖在不同版本中被不斷增強(qiáng),尤其是自O(shè)racle10g開(kāi)始,整合了V$SESSION_WAIT(會(huì)話正在發(fā)生的等待信息)視圖。我們來(lái)看一下,如何完成從系統(tǒng)到數(shù)據(jù)庫(kù)內(nèi)部的導(dǎo)引。以下是一個(gè)簡(jiǎn)單的診斷分析案TOP工具觀察到,有兩個(gè)操作系統(tǒng)進(jìn)程占用了極高的CPU資源:$load 172processes:160slee,1running,3zombie,6stopped,2onCPUstates: %idle, %user, %kernel, %iowait, Memory:4.0Greal,1.4G,1.9Gswapinuse,8.9GswapPIDUSERNAMETHRPRNCE RES TIME CPU20521 1 01.8G1.7G 047.77%20845 1 01.8G1.7G 040.98%20847101.7G00.84%20780101.7G00.83%15828101.7G00.53%這兩個(gè)進(jìn)程分別是20521和20845.通過(guò)PS$ps-ef|greporacle20909 010:50:53 0:00greporacle 14710:43:59 6:45oraclejshs$ps-ef|greporacle 14410:50:00 0:55oraclejshsoracle20918 010:50:59 0:00grep這兩個(gè)LOCAL=NO的進(jìn)程顯然是來(lái)自應(yīng)用的連接,通過(guò)如下,關(guān)聯(lián)V$PROCESS視圖和V$SESSION視圖、V$SQLTEXT視圖,可以找出這個(gè)進(jìn)程正在執(zhí)行的SQL語(yǔ)句,這里只需要一個(gè)“發(fā)動(dòng)”條件,就是進(jìn)程號(hào)(PID /*+ORDEREDFROMv$sqltextaWHERE(a.hash_value,a.address)(SELECTDECODE0,prev_hash_value,DECODE(sql_hash_value,0,prev_sql_addr,sql_address)FROMv$sessionbWHEREb.paddr=(SELECTFROMv$processcWHEREc.spid='&pid'))ORDERBYpiece/注意這里我們涉及了3個(gè)視圖,并應(yīng)用其關(guān)聯(lián)進(jìn)行數(shù)據(jù)獲取,邏輯分解如下pid,pidProcessid,ToppsPIDpidv$process.spidProcessv$process.addr和v$session.paddr相關(guān)聯(lián),可以獲得和session再結(jié)合v$sqltext,即可獲得當(dāng)前session正在執(zhí)行的SQL語(yǔ)句??梢?jiàn)通過(guò)v$process視圖,我們得以把操作系統(tǒng)和數(shù)據(jù)庫(kù)關(guān)聯(lián)了起來(lái)。以SYSDBA連接到數(shù)據(jù)庫(kù),執(zhí)行這個(gè)SQL,提供PID號(hào),就找到了該進(jìn)程正在執(zhí)行的SQL代碼:SQL>Entervalueforspid:old10:wherec.spid='&pid'new10:wherec.spid='20521'select*from(selectVC2URL,VC2PVDID,VC2,VC2ENCRYPTFLAG,SERVICEID,VC2SUB_TYPE,CISORDER,NUMGUID,VC2KEY1,C2PACKFLAG,datopertimefromhsv_2cpsyncwheredatopertime<=sysdateandnumguid>70000000000308orderbyNUMGUid)whererownum<=20那么這段代碼就可能是當(dāng)前正在瘋狂消耗CPU的罪魁禍?zhǔn)?。接下?lái)需要進(jìn)行的工作就是dbms_system包該進(jìn)程,或者通過(guò)AWR獲得該SQL的執(zhí)行計(jì)劃等。接下來(lái)關(guān)注一下啟動(dòng)過(guò)Oracle選擇參數(shù)文件的順序Oracle9i開(kāi)始,spfileOracle數(shù)據(jù)庫(kù),Oraclespfile<ORACLE_SID>.ora文件作為啟動(dòng)參數(shù)文件;如果該文件不存在,Oracle選擇spfile.ora文件;如果前兩者都不存在,Oracle將會(huì)選擇init<ORACLE_SID>.ora文件;如果以上三個(gè)文件都不存在,Oracle將無(wú)法創(chuàng)建和啟動(dòng)instance。Oracle在啟動(dòng)過(guò),會(huì)在特定的路徑中尋找參數(shù)文件,在Unix/Linux下的路徑為$ORACLE_HOME/dbs,在WINDOWS上的路徑為??梢栽赟QL*PLUS中通過(guò)showparameterspfile命令來(lái)檢查數(shù)據(jù)庫(kù)是否使用了spfile文件,如果value不為Null,則數(shù)據(jù)庫(kù)使用了spfile文件:SQL>showparameterspfile 代表ORACLE_HOME@代表數(shù)據(jù)庫(kù)的sidspfile<ORACLE_SID>.oraOraclespfile.ora[oracle@jumperdbs]$mvspfileconner.oraspfileconner.ora.bakSQL>startupnomountSQL>showparameter?/dbs/spfile.ora進(jìn)一步的如果再更名spfile.ora文件,此后Oracle將選擇init<ORACLE_SID>.ora[oracle@jumperdbs]$mvspfile.oraspfile.ora.bakSQL>startupnomountSQL>showparameter 如果這三個(gè)文件都不存在,Oracle將無(wú)法啟動(dòng):[oracle@jumperdbs]$mvinitconner.orainitconner.ora.bakSQL>startupORA-01078:failureinprocessingsystem 'opt/oracle/product/9.2.0/dbs/initconner.ora'init<ORACLE_SID>.ora,這正是在Oracle整個(gè)啟動(dòng)過(guò),參數(shù)文件是寫(xiě)在應(yīng)用程序中的硬代碼,按照前面描述的順序雖然不能改變Oracle對(duì)于參數(shù)文件的搜索路徑及行為,但是如果參數(shù)文件不在相應(yīng)的位置,在Linux/Unix系統(tǒng)上,可以通過(guò)符號(hào)來(lái)進(jìn)行重定位,以滿足一些特殊需要(具體請(qǐng)?jiān)趨?shù)文件中,通常需要最少的參數(shù)是db_name,設(shè)置了這個(gè)參數(shù)之后,數(shù)據(jù)庫(kù)實(shí)例就可以隨意命名一個(gè)ORACLE_SI(LinuxLinux/Unixoradim.exe工具創(chuàng)建服務(wù))nomount[oracle@jumperdbs]$exportORACLE_SID=julia[oracle@jumperdbs]$sqlplus"/asSQL*Plus:Release.0-ProductiononMonMay811:08:362006Copyright(c)1982,2002,OracleCorporation.Allrights.Connectedtoanidleinstance.SQL>startupORA-01078:failureinprocessingsystemLRM-00109:couldnotopenparameterfile'/opt/oracle/product/9.2.0/dbs/initjulia.ora' SQL>!echo"db_name=julia">/opt/oracle/product/9.2.0/dbs/initjulia.oraSQL>startupnomount;ORACLEinstanceTotalSystemGlobalArea bytesFixedSize 451864bytesVariable Database Redo 667648background_dump_dest (告警日志文件 SQL>showparameter ?/rdbms/logSQL>showparameter SQL>showparametercontrol_files

這樣,通過(guò)以上步驟就以最少的參數(shù)需求啟動(dòng)了OracleORACLE_SID回顧一下前面的內(nèi)容可以注意到,SIDORACLE_SIDSID是什么?SIDSystemIDentifierORACLE_SIDOracleSystemIDentifier在Oracle系統(tǒng)中,ORACLE_SID以環(huán)境變量的形式出現(xiàn),當(dāng)Oracle實(shí)例啟動(dòng)時(shí),在操作系統(tǒng)上fork的進(jìn)程就依據(jù)ORACLE_SID這個(gè)環(huán)境變量來(lái)創(chuàng)建,這就是SID的作用。Oracle的實(shí)例(intance)是由一塊共享內(nèi)存區(qū)域(SGA)和一組后臺(tái)進(jìn)程(backgroundproceses)共同組成,而進(jìn)程正是數(shù)據(jù)庫(kù)和操作系統(tǒng)進(jìn)行交互的通道,這些進(jìn)程的名稱(chēng)就是通過(guò)ORACLE_SID決定的。通過(guò)前面的討論可以知道,實(shí)例的啟動(dòng)需要一個(gè)參數(shù)文件,參數(shù)文件的名稱(chēng)就是由ORACLE_SID決定的,對(duì)于init文件,缺省的文件名稱(chēng)是init<ORACLE_SID>.ora,對(duì)于spfile文件,缺省的文件名為spfile<ORACLE_SID>.ora,Oracle依據(jù)ORACLE_SID來(lái)決定和尋找參在同一個(gè)$ORACLE_HOME下,通過(guò)參數(shù)文件,Oracle能夠根據(jù)ORACLE_SID將實(shí)例區(qū)分開(kāi)來(lái);但是注意如果在不同的$ORACLE_HOME下,即使在同一臺(tái)主機(jī)上,Oracle也是能夠創(chuàng)建相同ORACLE_SID的實(shí)例的。Oracle8iORACLE_SIDeygle$exportORACLE_SID=eygle$sqlplus"/asSQL*Plus:Release.0-ProductiononFriFeb1610:23:58(c)Copyright2000OracleCorporation.Allrights.Connectedtoanidleinstance.SQL>startupnomountORACLEinstanceSQL>!ps-ef|greporacle81112311076010:24:15 0:00greporacle8 1010:24:02 0:00接下來(lái)又可以啟動(dòng)另外$ORACLE_HOME下ORACLE_SIDeygle$export$sqlplus"/asSQL*Plus:Release.0-ProductiononFriFeb1610:24:432007Copyright(c)1982,2002,OracleCorporation.Allrights.ConnectedtoanidleSQL>startupnomount;ORACLEinstancestarted.SQL>!ps-ef|greporacle91121411172010:24:58 0:00greporacle8 1010:24:02 0:00oracle9 1010:24:48 0:00 能夠通過(guò)$ipcs-IPCstatusfo<runningsystem>asofFriFeb1610:30:02CST2007 Message --rw-r--r- GROUPShared 0xabdc9b64--rw-r --rw-r s0x79978bac--ra- 0xa0e9f594--ra- OraclesysresvORACLE_SID,操作系統(tǒng)上創(chuàng)建的共享內(nèi)存段ID(SharedMemory)和信號(hào)量ID(Semaphores)等信息:$sysresv-leyglejuliaIPCResourcesforORACLE_SID"eygle"Shared OracleInstancealiveforsid"eygle"IPCResourcesforORACLE_SID"julia":Shared OracleInstancealiveforsidINSTANCE_NAME在數(shù)據(jù)庫(kù)內(nèi)部和ORACLE_SID相關(guān)聯(lián)的概念就是INSTANCE_NAMEOracle數(shù)據(jù)庫(kù)內(nèi)部存在一個(gè)初始化參數(shù)INSTANCE_NAME,用于標(biāo)示數(shù)據(jù)庫(kù)實(shí)例的名稱(chēng),其缺省值通常就是ORACLE_SID;但是初始化參數(shù)INSTANCE_NAME和ORACLE_SID可以不同,不同實(shí)例可以擁有相同的INSTANCE_NAME在同一個(gè)ORACLE_HOME下,只要ORACLE_SIDINSTANCE_NAME參數(shù);通過(guò)簡(jiǎn)單的參數(shù)文件,我們就可以在同一臺(tái)服務(wù)器上創(chuàng)建多個(gè)具有相同instance_name的實(shí)例(注意以下測(cè)試來(lái)自O(shè)racle9i數(shù)據(jù)庫(kù):bash-2.03$cdbash-2.03$cpiniteygle.orainitjulia.orabash-2.03$exportORACLE_SID=juliabash-2.03$sqlplus"/assysdba"SQL>startupnomount;ORACLEinstance此時(shí)同一主機(jī)上就可以啟動(dòng)多個(gè)實(shí)例, 不同,但是擁有了相同SQL>showparameter但是注意,在數(shù)據(jù)庫(kù)內(nèi)部視圖V$INSTANCE中也記錄著一個(gè)INSTANCE_NAME,這個(gè)INSTANCE_NAME來(lái)自數(shù)據(jù)庫(kù)實(shí)例的SID,始終和ORACLE_SID保持一致,這就可能出現(xiàn)數(shù)據(jù)庫(kù)中這兩個(gè)INSTANCE_NAME不一致的情況:SQL>selectinstance_namefromv$instance;SQL>showparameter存在這種歧義是因?yàn)樵贠racle9i中,當(dāng)創(chuàng)建數(shù)據(jù)庫(kù)進(jìn)行相關(guān)配置時(shí),數(shù)據(jù)庫(kù)將INSTANCE_NAMEORACLE_SID時(shí)可能并不修改INSTANCE_NAME參數(shù)的情況;值得注意的是,從Oracle10g開(kāi)始,參數(shù)文件中缺省不再記錄INSTANCE_NAME,此時(shí)INSTANCE_NAME可以動(dòng)態(tài)從系統(tǒng)獲得,從而消D:\oracle\product>grepinstance_nameD:\oracle\product>grepinstance_name10.2.0\database\SPFILEEYGLE.ORAD:\oracle\product>grepinstance_name11.1.0\database\SPFILEEYGLEE.ORAINSTANCE_NAME除了用來(lái)標(biāo)識(shí)實(shí)例名稱(chēng)之外,在器動(dòng)態(tài)時(shí)還會(huì)用于向器。比如在一個(gè)數(shù)據(jù)庫(kù)db_name=julia,instance_name=eygle的數(shù)據(jù)庫(kù)中,器動(dòng)態(tài)會(huì)包含如下信息,這里的Instance內(nèi)容就來(lái)自INSTANCE_NAME參數(shù)設(shè)置:ServicesService"julia"has1Instance"eygle",statusREADY,has1handler(s)forthisV$INSTANCE視圖和數(shù)據(jù)庫(kù)實(shí)例的生命周期相關(guān),用于顯示當(dāng)前實(shí)例的狀態(tài),通過(guò)這個(gè)視圖可以獲得包括實(shí)例的啟動(dòng)時(shí)間、運(yùn)行主機(jī)等重要信息,通過(guò)以下一段SQL可以獲得數(shù)據(jù)庫(kù)的UTIME信息:SQL>COLUMNSTARTED_ATformata25SQL>COLUMNUPTIMEformata50SQL>SELECTTO_CHAR(startup_time,'DD-M-YYYYHH24:MI:SS')TRUNC(SYSDATE-||'day(s),'||TRUNC(24*((SYSDATE-startup_time)TRUNC(SYSDATE-||'hour(s),'||MOD(TRUNC(1440*((SYSDATE-startup_time)TRUNC(SYSDATE-||'minute(s),'||MOD(TRUNC(86400*((SYSDATE-startup_time)TRUNC(SYSDATE-||'seconds'FROM 05-JUL-2005 803day(s),2hour(s),27minute(s),55DB_NAME相較INSTANCE_NAMEOracle數(shù)據(jù)庫(kù)更為重要的一個(gè)參數(shù)是DB_NAME。DB_NAME代表了實(shí)例即將掛接的數(shù)據(jù)庫(kù)名稱(chēng),關(guān)系到具體的物理文件。通常缺省的數(shù)據(jù)庫(kù)instance_name和db_name可以設(shè)置相同(在RAC環(huán)境下,由于多個(gè)實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù),所以instance_name和db_name不同。在創(chuàng)建數(shù)據(jù)庫(kù)的過(guò),圖1- 是用于定義數(shù)據(jù)庫(kù)名稱(chēng)(db_name)和影INSTANCE_NAME圖1-0-3數(shù)據(jù)庫(kù)創(chuàng)建的標(biāo)識(shí)定義頁(yè)面Oracledb_nameDB_NAME用來(lái)定義數(shù)據(jù)庫(kù)名稱(chēng),必須是一個(gè)不超過(guò)8個(gè)字符的文本串,在數(shù)據(jù)庫(kù)創(chuàng)建過(guò),db_name被記錄在數(shù)據(jù)文件,日志文件和控制文件中。如果數(shù)據(jù)庫(kù)實(shí)例啟動(dòng)過(guò)參數(shù)文件中的db_name和控制文件中的數(shù)據(jù)庫(kù)名稱(chēng)不一致,則數(shù)據(jù)庫(kù)不能啟動(dòng)。一個(gè)實(shí)例可以 mount并打開(kāi)(OPS/RAC環(huán)境下,一個(gè)數(shù)據(jù)DB_NAME的另外一個(gè)作用是在器動(dòng)態(tài)時(shí)作為缺省服務(wù)名,以下是Oracle10g的動(dòng)態(tài)示范:ServicesService"julia"has1Instance"eygle",statusREADY,has1handler(s)forthisDB_NAMEiniteygle.ora文件代表了一個(gè)[oracle@jumperoracle]$cd$ORACLE_HOME/dbs[oracle@jumperdbs]$grepnameiniteygle.oraSQL>showparameter SQL>showparameterinstance_name

現(xiàn)在創(chuàng)建另外一個(gè)實(shí)例,通過(guò)創(chuàng)建一個(gè)pfile文件為名為julia這個(gè)新的實(shí)例使用[oracle@jumperoracle]$cd$ORACLE_HOME/dbs[oracle@jumperdbs]$cpiniteygle.orainitjulia.ora[oracle@jumperdbs]$llinit*-rw-r--r- 1 982Jul2514:03-rw-r--r- 1 982Jul2514:04instance_nameinstance_name=julia,修改后的參數(shù)設(shè)置[oracle@jumperdbs]$grepnamejuliainstance:[oracle@jumperdbs]$exportORACLE_SID=julia[oracle@jumperdbs]$sqlplus"/assysdba"SQL>startupmount;ORACLEinstanceTotalSystemGlobalArea Fixed 452064Variable Database Redo 667648OR-01102:cannotmountdatabaseinEXCLUSIVE并行模式(OPS/RAC)下,一個(gè)數(shù)據(jù)庫(kù)同時(shí)只能被一個(gè)實(shí)例加載。[oracle@jumperdbs]$ps-ef|grep10Jul1400:00:001014:0400:00:00018:3800:00:00grepeygle這個(gè)數(shù)據(jù)庫(kù)實(shí)例[oracle@jumperdbs]$exportORACLE_SID=eygle[oracle@jumperdbs]$sqlplus"/assysdba"SQL>shutdownimmediate;然后就可以通過(guò)實(shí)例julia加載并打開(kāi)db_name=eygle的數(shù)據(jù)庫(kù)了,這也就是前面所說(shuō)的,一個(gè)數(shù)據(jù)庫(kù)可以被任何一個(gè)實(shí)例掛接打開(kāi)(當(dāng)然是有條件限制的:[oracle@jumperdbs]$exportORACLE_SID=julia[oracle@jumperdbs]$sqlplus"/assysdba"SQL>alterdatabasemount;alterdatabase*ERRORatlineORA-01990:erroropeningpasswordfile'/opt/oracle/product/9.2.0/dbs/orapw'ORA-27037:unabletoobtainfilestatusLinuxError:2:NosuchfileordirectoryAdditionalinformation:3SQL>alterdatabaseopen;Databasealtered.SQL>selectnamefromv$datafile;SQL>showparameterinstance_name SQL>showparameterdb_name

進(jìn)一步的,再來(lái)研究一下如果參數(shù)文件中的db_name和控制文件中的db_name不一致會(huì)db_name[oracle@jumperdbs]$grepname在nomount環(huán)節(jié)不存在任何問(wèn)題,而在mount階段,數(shù)據(jù)庫(kù)會(huì)對(duì)參數(shù)文件和控制文件進(jìn)行比較,如果兩者記錄的db_name不一致,則數(shù)據(jù)庫(kù)無(wú)法啟動(dòng),錯(cuò)誤提示指定的數(shù)據(jù)庫(kù)名稱(chēng)SQL>startupnomount;SQL>alterdatabasemount;alterdatabasemount*ERRORatlineORA-01103:databasename'EYGLE'incontrolfileisnotRMAN在使用RMAN(RecoveryManager)時(shí)存在更為特殊的情況,Oracle允許在不存在參數(shù)文件的情況下啟動(dòng)一個(gè)實(shí)例,數(shù)據(jù)庫(kù)的db_name會(huì)被缺省名為DUMMY,這是最為的[oracle@jumperdbs]$rmantargetRecoveryManager:Release.0-Copyright(c)1995,2002,Oracle Allrightsconnectedtotargetdatabase(notstarted)RMAN>startupstartupfailed:ORA-01078:failureinprocessingsystemLRM-00109:couldnotopenparameterfiletryingtostarttheOracleinstancewithoutparameterfiles...OracleinstancestartedTotalSystemGlobalArea Fixed 451864Variable Database Redo 667648RMAN>host[oracle@jumperdbs]$sqlplus"/asSQL*Plus:Release.0-ProductiononTueMar1214:17:07Copyright(c)1982,2002,OracleCorporation. Allrights.SQL>showparameterdb_name StartingupORACLERDBMSVersion:.0.Systemparameterswithnon-defaultvalues: db_name =DUMMPMONstartedwithpid=2DBW0startedwithNomount過(guò)程實(shí)質(zhì)上就是在創(chuàng)建實(shí)例,這個(gè)步驟只和參數(shù)文件相關(guān),在完成實(shí)例的創(chuàng)建之后,Oracle就可以逐步導(dǎo)航,完成數(shù)據(jù)庫(kù)的加載,打開(kāi)等工作。Nomount以下是一個(gè)啟動(dòng)到nomount$export$sqlplus"/asSQL*Plus:Release.0-ProductiononWedFeb2809:55:242007Copyright(c)1982,2002,OracleCorporation.Allrights.ConnectedtoanidleSQL>startupORA-00600:internalerrorcode,arguments:[OSDEP_INTERNAL],[],[],[],[],[],[],ORA-27302:failureoccurredat:ORA-27303:additionalinformation:invalidsharedctxORA-27146:post/waitinitializationfailedORA-27300:OSsystemdependentoperation:semgetfailedwithstatus:28ORA-27301:OSfailuremessage:NospaceleftondeviceORA-27302:failureoccurredat:(ORA-00600是OracleR-0060BA00)在Nomount狀態(tài)就出現(xiàn)問(wèn)題,通常是系統(tǒng)問(wèn)題,OS類(lèi)錯(cuò)誤一般說(shuō)明是系統(tǒng)資源不足,這在Linux/Unix(在Solaris上需要修改/etc/system600錯(cuò)誤的第一個(gè)參數(shù)是OSDEP_INTERNAL,我們大致可以猜測(cè)到這是一個(gè)OSDependent/InternalError。很多Oracle的提示可以根據(jù)縮寫(xiě)猜到大致的含義,但是如果是錯(cuò)誤號(hào)那就要依賴(lài)Oracle的文檔來(lái)尋找答案。OS相關(guān)的操作是:semget。這是一個(gè)標(biāo)準(zhǔn)的操作系統(tǒng)調(diào)用,通過(guò)手冊(cè)可bogon:Eygleeygle$man BSDSystemCalls semget--obtainasemaphore#includesemget(key_tkey,intnsems,intsem具體就可以判斷,問(wèn)題和操作系統(tǒng)的內(nèi)核參數(shù)設(shè)定有關(guān),可能是信號(hào)量設(shè)置不足導(dǎo)致的,根據(jù)不同的操作系統(tǒng)找到相應(yīng)的參數(shù),調(diào)整之后即可解決問(wèn)題。這個(gè)案例給我們的提示是:應(yīng)該認(rèn)真細(xì)致的閱讀每一行錯(cuò)誤提示信息,往往從直接的提示就可以找到真實(shí)的錯(cuò)誤原因。后,數(shù)據(jù)庫(kù)無(wú)法啟動(dòng)(提示:重啟主機(jī)對(duì)于DBA來(lái)說(shuō)應(yīng)當(dāng)極其慎重,很多隱藏的故障可能在重啟時(shí)爆發(fā)出來(lái),在沒(méi)有做好充分之前要貿(mào)然從。數(shù)據(jù)庫(kù)的癥狀是,啟動(dòng)主機(jī)到Nomount狀態(tài)后,進(jìn)程會(huì)立即將實(shí)例中止,也就是說(shuō)MonDec314:24:30Errorsinfile/oraclehx/app/admin/sxlss/bdump/sxlss_pmon_360454.trc:ORA-07445:exceptionencountered:coredump[][][][][][]PSP0startedwithpid=3,OSid=422106MMANstartedwithpid=4,OSid=303332DBW0startedwithpid=5,OSid=299324SMONstartedwithpid=11,OSid=278882RECOstartedwithpid=12,OSid=319898CJQ0startedwithpid=13,OSid=295404MMONstartedwithpid=14,OSid=303428MMNLstartedwithpid=15,OSid=438776MonDec314:24:332007PSP0:terminatinginstanceduetoerror472InstanceterminatedbyPSP0,pid=422106綜合前面介紹的知識(shí),如果實(shí)例都無(wú)法創(chuàng)建,那通常是在OS方面存在問(wèn)題,這些問(wèn)題在系統(tǒng)重新啟動(dòng)后才體現(xiàn)出來(lái),經(jīng)過(guò)檢查,發(fā)現(xiàn)客戶系統(tǒng)是AIX操作系統(tǒng)補(bǔ)丁應(yīng)用不完全,最instfix-i|grepAllfilesetsfor_AIX_MLwerefound.Allfilesetsfor5300-01_AIX_MLwerefound.Allfilesetsfor5300-02_AIX_MLwerefound.Allfilesetsfor5300-03_AIX_MLwerefound.Allfilesetsfor5300-04_AIX_MLwerefound.Allfilesetsfor5300-05_AIX_MLwerefound.Notallfilesetsfor5300-06_AIX_MLwere這個(gè)案例給我們的經(jīng)驗(yàn)是:當(dāng)進(jìn)行OS補(bǔ)丁應(yīng)用時(shí)一定要認(rèn)真確認(rèn),對(duì)關(guān)鍵補(bǔ)丁應(yīng)當(dāng)進(jìn)行服務(wù)器重啟驗(yàn)證,不能掉以輕心。啟動(dòng)數(shù)據(jù)庫(kù)到mount實(shí)例啟動(dòng)到nomount狀態(tài)以后,Oracle就可以從參數(shù)文件中獲得控制文件的位置信息,然Oracle10gOracle3個(gè)控制文件,這三個(gè)控制文件的內(nèi)容完全一致,是Oracle為了安全而采用的鏡像,在生產(chǎn)環(huán)境中,通常我們應(yīng)該將控制文件存Oracle10g開(kāi)始,如果設(shè)置了閃回恢復(fù)區(qū)(FlashbackRecoveryArea據(jù)區(qū)位于不同硬盤(pán)),則Oracle缺省的就會(huì)將控制文件分布到不同的磁盤(pán)組,至此才算完成了控制文件的真正鏡像安全保護(hù),以下是Oracle10gSQL>showparameter,在nomount狀態(tài),可以查詢v$parameter視圖,獲得控制文件信息,這部分信息來(lái)自啟動(dòng)的參數(shù)文件;當(dāng)數(shù)據(jù)庫(kù)mount之后,可以查詢v$controlfile視圖獲得關(guān)于控制文件的信息,此SQL>startuptSQL>select*fromv$controlfile;norowsselectedSQL>showparameter SQL>alterdatabasemoutDatabasealtered.SQL>select*fromv$controlfile;STATUSNAME在mount數(shù)據(jù)庫(kù)的過(guò),Oracle需要找到控制文件,鎖定控制文件。如果控制文件全部ORA-00205:errorinidentifyingcontrolfile,checkalertlogformoreORA-00202:controlfile:'/opt/oracle/oradata/conner/control01.ctl'ORA-27037:unabletoobtainfilestatusLinuxError:2:NosuchfileordirectoryAdditionalinformation:3Oracle的三個(gè)(缺省的)控制文件內(nèi)容完全相同,如果只是損失了其中1~2在啟動(dòng)了實(shí)例之后,實(shí)際上數(shù)據(jù)庫(kù)的進(jìn)程已經(jīng)運(yùn)行,那么當(dāng)進(jìn)一步的Mount數(shù)據(jù)庫(kù)SQL>selectnamefromv$datafile;SQL>shutdownSQL>!mv/opt/oracle/oradata/eygle/eygle01.dbf/opt/oracle/oradata/eygle/eygle01.dbf.bSQL>startupmount;[oracle@jumperbdump]$tail-20alert_eygle.logALTERDATABASE MonSep1521:21:01Successfulmountofredothread1,withmountid MonSep1521:21:012008DatabasemountedinExclusiveMode.Completed:ALTERDATABASEMOUNTMonSep1521:21:312008Errorsinfile/opt/oracle/admin/eygle/bdump/eygle_dbw0_17074.trc:ORA-01157:cannotidentify/lockdatafile3-seeDBWRtraceORA-01110:datafile3:'/opt/oracle/oradata/eygle/eygle01.dbf'ORA-27037:unabletoobtainfilestatusLinuxError:2:NosuchfileordirectoryAdditionalinformation:3MonSep1521:21:41Errorsinfile/opt/oracle/admin/eygle/bdump/eygle_dbw0_17074.trc:ORA-01157:cannotidentify/lockdatafile3-seeDBWRtracefileORA-01110:datafile3:'/opt/oracle/oradata/eygle/eygle01.dbf'ORA-27037:unabletoobtainfilestatusLinuxError:2:NosuchfileordirectoryAdditionalinformation:3此時(shí)查詢數(shù)據(jù)的動(dòng)態(tài)視圖v$recover_file可以發(fā)現(xiàn)數(shù)據(jù)庫(kù)記錄了FILENOTFOUNDSQL>select*fromFILE#ONLINEONLINE_ CHANGE#3ONLINEONLINEFILENOT SQL>selectnamefromv$datafilewherefile#=3;不過(guò)在較新版本(比如Oracle11gR2)中,啟動(dòng)數(shù)據(jù)庫(kù)到Mount狀態(tài)時(shí),在告警日志文在正常Mount數(shù)據(jù)庫(kù)的過(guò),數(shù)據(jù)庫(kù)的警報(bào)日志文件僅記錄如下信息alterdatabaseSatApr29 Successfulmountofredothread1,withmountid SatApr2910:20:422006DatabasemountedinExclusiveCompleted:alterdatabase在這一步驟中,數(shù)據(jù)庫(kù)需要計(jì)算 id并將其記錄在控制文件中,然后開(kāi)始啟動(dòng)心(heartbeat332altersessionsetevents'immediatetracenameCONTROLFlevel8'Linuxdiff2Mount狀態(tài)下發(fā)生改變的只有這個(gè)Heartbeat:[oracle@jumperudump]$diffconner_ora_25542.trc< mount--> mountHeartbeat表明實(shí)例已經(jīng)被特定例程所Mount,這個(gè)屬性主要用于OPS/RACHeartbeat在單實(shí)例環(huán)境中同樣存在。可以從一個(gè)內(nèi)部表(需要以SYS用戶登錄)中查詢到當(dāng)Heartbeat值(X$KC的含義為[K]ernel[C]ache[C]ontrolfilemanagement[C]heckpointSELECTCPHBTfrom 從Oracle9i開(kāi)始,Oracle在數(shù)據(jù)庫(kù)內(nèi)部通過(guò)等待controlfileheartbeat來(lái)記錄這個(gè)的相關(guān)等待;在Oracle10g中,如果使用自動(dòng)管理技術(shù)(ASM-AutomaticStorageManagement,那么還會(huì)增加一個(gè)ASM實(shí)例的心跳;以下輸出來(lái)自O(shè)racle10g:SQL>select2fromv$event_namewherenamelike'%heart%';EVENT#NAME282ASMmount:waitforheartbeat423controlfileheartbeat了解了啟動(dòng)的各個(gè)步驟,我們也就可以在發(fā)生問(wèn)題的時(shí)候,快速定位,準(zhǔn)確判斷,從而快速解決問(wèn)題。Oracle10gMount狀態(tài),數(shù)據(jù)庫(kù)需要具備的另外一個(gè)重要文件是口令文Unix/Linux上,該文件位于$ORACLE_HOME/dbs目錄下,缺省的名稱(chēng)為orapw<ORACLE_SID>Windows上,文件位于%ORACLE_HOME%\database下,缺省的名稱(chēng)為PWD<ORACLE_SID>.ora,注意這二者的區(qū)別,還要注意ORACLE_SID的大小口令文件中存放SYSDBA/SYSOPERUnix/Linuxstrings命令可以將口令文件中的文本串提出出來(lái),以下是一個(gè)口令文件中的字符內(nèi)容(來(lái)自O(shè)racle9iR2環(huán)境:[oracle@jumperdbs]$stringsORACLERemotePasswordfile口令文件可以用于對(duì)具備SYSDBA/SYSOPER的用戶進(jìn)行登錄認(rèn)證,如果不存在該文件,則用戶將無(wú)法使用這兩個(gè)登錄數(shù)據(jù)庫(kù)。在Oracle9i中,口令文件在數(shù)據(jù)庫(kù)的Mount階段被檢測(cè)。如果丟失了口令文件,在mount階段就會(huì)出現(xiàn)錯(cuò)誤,給出提示SQL>alterdatabasemount;alterdatabasemount*ERRORatlineORA-01990:erroropeningpasswordfile'/opt/oracle/product/9.2.0/dbs/orapw'ORA-27037:unable

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論