Oracle相關(guān)記錄(by 陶世磊)2018-03-21 參考網(wǎng)絡(luò)資源整理
簡(jiǎn)介
Oracle Server 是由實(shí)例(instance)和數(shù)據(jù)庫(kù)(database)組成。實(shí)例(instance)是由共享內(nèi)存(SGA)和后臺(tái)進(jìn)程組成。數(shù)據(jù)庫(kù)(dababase)是存儲(chǔ)在磁盤的一系列文件。

詳述
SGA主要由Share Pool(共享池,又分Library Cache和Data Dictionary Cache,前者臨時(shí)存儲(chǔ)最近執(zhí)行過(guò)的語(yǔ)句代碼等,后者臨時(shí)存儲(chǔ)數(shù)據(jù)位置、表定義及用戶權(quán)限等)、
Database Buffer Cache(數(shù)據(jù)緩沖區(qū),臨時(shí)存儲(chǔ)讀過(guò)的數(shù)據(jù)塊)、Redo Log Buffer(重做日志緩沖區(qū),臨時(shí)存儲(chǔ)數(shù)據(jù)庫(kù)修改操作)、Large Pool(大池,分擔(dān)Share Pool部
分工作供共享服務(wù)器進(jìn)程使用,如備份恢復(fù)、大型I/O操作、并行查詢等)和Java Pool(Java池,分析Java語(yǔ)句)。
后臺(tái)進(jìn)程是數(shù)據(jù)庫(kù)和操作系統(tǒng)進(jìn)行交互的通道,后臺(tái)進(jìn)程的命名由ORACLE_SID決定,ORACLE根據(jù)ORACLE_SID來(lái)尋找參數(shù)文件啟動(dòng)實(shí)
例。是Oracle數(shù)據(jù)庫(kù)為保持最佳性能和協(xié)調(diào)多用戶請(qǐng)求而設(shè)置的,主要有DBWR(將Database Buffer Cache數(shù)據(jù)寫入Data Files)、LGWR(將Redo Log Buffer數(shù)據(jù)寫入Redo Log Files)、
CKPT(協(xié)調(diào)數(shù)據(jù)文件、控制文件和重做日志,將System Change Number即SCN寫入到控制文件和數(shù)據(jù)文件頭部,促使DBWR、LGWR執(zhí)行)、SMON(System Monitor,3方面作用:instance recovery實(shí)
例故障數(shù)據(jù)恢復(fù)、合并空閑碎片空間、回收臨時(shí)段)、PMON(用戶例程意外終止時(shí)處理事務(wù),如回退事務(wù)、釋放鎖及其他資源等)、ARCH(將Redo Log Files寫入Archive Log Files)、CJQ0(job queue coordinator)、RVWR(recover writer,為flashback database提供日志記錄)等進(jìn)程。
數(shù)據(jù)庫(kù)(database)是指存儲(chǔ)在磁盤上的一組物理文件,如數(shù)據(jù)文件(Data files,用于存儲(chǔ)數(shù)據(jù))、控制文件(Control files,存儲(chǔ)數(shù)據(jù)文件、重做日志文件、歸檔日志文件位置及維護(hù)數(shù)據(jù)庫(kù)完整性所需信息)
和重做日志文件(Redo Log files,存儲(chǔ)修改數(shù)據(jù)的所有操作記錄以備故障后恢復(fù)),這三個(gè)是啟動(dòng)數(shù)據(jù)庫(kù)必須的文件;
另外還有參數(shù)文件(Parameter file,設(shè)置內(nèi)存后臺(tái)進(jìn)程的啟動(dòng)等)、歸檔日志文件(Archived Log files,歸檔記錄寫滿的重做日志文件的內(nèi)容)和口令文件(Password file,驗(yàn)證用戶名密碼),這三個(gè)是非必須的文件。
數(shù)據(jù)庫(kù)啟動(dòng)三種狀態(tài)
數(shù)據(jù)庫(kù)啟動(dòng)的三種方式(三個(gè)階段):
- nomount : 需要參數(shù)文件
- mount : 需要控制文件
- open:需要全部的數(shù)據(jù)文件和日志文件,并且保證所有的數(shù)據(jù)文件和日志文件與控制文件里面記錄的位置保持一致。
一般的啟動(dòng)順序是:nomount-->mount-->open

啟動(dòng)詳解
nomount狀態(tài):?jiǎn)?dòng)實(shí)例。
Reading the initialization file from $ORACLE_HOME/dbs in the following order:
從環(huán)境變量下dbs目錄按如下順序讀取初始化文件:
-first spfileSID.ora
首先,讀取spfile+實(shí)例名.ora
-if not found then, spfile.ora
若未發(fā)現(xiàn)文件則讀取spfile.ora
-if not found then, initSID.ora
若未發(fā)現(xiàn)文件則讀取init+實(shí)例名.ora
Specifying the PFILE parameter with STARTUP overrides the default behavior.
指定pfile參數(shù)文件啟動(dòng)以替代默認(rèn)啟動(dòng)方式
- Allocating the SGA
分配SGA
- Starting the background processes
啟動(dòng)后臺(tái)進(jìn)程
- Opening the alertSID.log file and the trace files
啟動(dòng)預(yù)警日志文件(記錄實(shí)例生命周期內(nèi)事件,如系統(tǒng)內(nèi)部錯(cuò)誤、數(shù)據(jù)塊損壞、系統(tǒng)參數(shù)修改等)和追蹤文件(記錄SQL操作及時(shí)間消耗等)
The database must be named with the DB_NAME parameter either in the initialization Parameter file or in the STARTUP command.
數(shù)據(jù)庫(kù)必須用初始參數(shù)文件或啟動(dòng)命令中的DB_NAME參數(shù)命名。
mount狀態(tài):關(guān)聯(lián)實(shí)例與數(shù)據(jù)庫(kù),讀取控制文件并獲取數(shù)據(jù)文件和重做日志文件名稱狀態(tài)。
Mounting a database includes the following tasks:
裝載數(shù)據(jù)庫(kù)包括以下任務(wù):
- Associating a database with a previously started instance
將先前啟動(dòng)的實(shí)例與數(shù)據(jù)庫(kù)相關(guān)聯(lián)
- Locating and opening the control files specified in the parameter file
從參數(shù)文件中找到控制文件位置并打開
- Reading the control files to obtain the names and status of the data files and online redo log files.However,no checks are performed to verify the existence of the data files and online redo log files at this time.
從控制文件中讀取數(shù)據(jù)文件及重做日志文件名稱與狀態(tài),但是,此時(shí)并不檢查數(shù)據(jù)文件與重做日志文件的存在性。
open狀態(tài):
opening the database includes the following tasks:
打開數(shù)據(jù)庫(kù)包含以下任務(wù):
opening the online data log files
打開數(shù)據(jù)文件
opening the onling redo log files
打開重做日志文件
If any of the datafiles or noline redo log files are not present when you attempt to open the database ,the oracle server returns an error.
若在打開數(shù)據(jù)庫(kù)時(shí)數(shù)據(jù)文件或重做日志文件任何一個(gè)不存在,則Oracle服務(wù)器返回一個(gè)錯(cuò)誤。
During this final stage,the oracle server verfies that all the data files and online redo log files can be opened and checks the consistency of the database. If necessary,the SMON background process initiates instance recovery.
在最后階段,Oracle數(shù)據(jù)庫(kù)驗(yàn)證數(shù)據(jù)文件和重做日志文件可否打開并檢驗(yàn)數(shù)據(jù)庫(kù)的一致性,若不一致,SMON后臺(tái)進(jìn)程將啟動(dòng)實(shí)例恢復(fù)。
shutdown或startup狀態(tài)可執(zhí)行的操作:
shutdown有四個(gè)參數(shù):normal、transactional、immediate、abort,不帶參數(shù)默認(rèn)為normal。
shutdown normal:不斷開現(xiàn)在連接用戶,阻止任何用戶建立新的連接,包括管理員在內(nèi)。已經(jīng)連接的用戶能夠繼續(xù)他們當(dāng)前的工作,如遞交新的更新事務(wù),直到此用戶自行斷開連接。這樣需要等待的時(shí)間長(zhǎng),可以查出現(xiàn)連用戶,再通知其自行斷開。所有的用戶都斷開連接,數(shù)據(jù)庫(kù)才進(jìn)行關(guān)閉操作,即關(guān)閉數(shù)據(jù)庫(kù)、卸載數(shù)據(jù)庫(kù)、終止例程。在這種情況下關(guān)閉的數(shù)據(jù)庫(kù)在重新啟動(dòng)后,不會(huì)出現(xiàn)問(wèn)題。啟動(dòng)時(shí)不需要實(shí)例恢復(fù)。
shutdown transactional:阻止任何用戶建立新連接,等待所有當(dāng)前連接用戶的未遞交的活動(dòng)事務(wù)提交完畢,然后立即斷開用戶的連接。所有的用戶都斷開連接則立即關(guān)閉數(shù)據(jù)庫(kù),進(jìn)行關(guān)閉數(shù)據(jù)庫(kù)、卸載數(shù)據(jù)庫(kù)、終止進(jìn)程等操作。這種方式,用戶有可能正在算賬,做復(fù)雜報(bào)表!一次數(shù)據(jù)庫(kù)操作做不完的,在剛做了一次數(shù)據(jù)庫(kù)操作后,將被斷開,這樣對(duì)用戶有一定影響,啟動(dòng)時(shí)不需要實(shí)例恢復(fù)。
shutdown immediate:阻止任何用戶新的連接,同時(shí)限制當(dāng)前連接用戶開始新的事務(wù)。如果已連接用戶有未完成的事務(wù),則數(shù)據(jù)庫(kù)系統(tǒng)不會(huì)等待他們完成,而是直接把當(dāng)前未遞交的事務(wù)回退。數(shù)據(jù)庫(kù)系統(tǒng)不再等待用戶主動(dòng)斷開連接,當(dāng)未遞交的事務(wù)回退成功后,系統(tǒng)會(huì)直接關(guān)閉、卸載數(shù)據(jù)庫(kù),并終止數(shù)據(jù)庫(kù)進(jìn)程,啟動(dòng)時(shí)不需要實(shí)例恢復(fù)。
shutdown abort:當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)故障時(shí),可能以上三種方式都無(wú)法正常關(guān)閉數(shù)據(jù)庫(kù),則使用這種方法。強(qiáng)制結(jié)束當(dāng)前正在執(zhí)行的SQL語(yǔ)句,任何未遞交的事務(wù)都不被回退!這種方法基本上不會(huì)對(duì)控制文件或者參數(shù)文件造成破壞,這比強(qiáng)制關(guān)機(jī)要好一點(diǎn)(在無(wú)法正常關(guān)閉數(shù)據(jù)庫(kù)的時(shí)候),啟動(dòng)時(shí)自動(dòng)進(jìn)行實(shí)例恢復(fù)。
startup有7個(gè)參數(shù):nomount、mount、open、pfile、force、restrict和
startup nomount:通過(guò)參數(shù)文件,分配sga,啟動(dòng)數(shù)據(jù)庫(kù)后臺(tái)進(jìn)程,不打開控制文件和數(shù)據(jù)文件,不能訪問(wèn)數(shù)據(jù)庫(kù)。
startup mount:僅給dba進(jìn)行管理操作,不允許數(shù)據(jù)庫(kù)用戶訪問(wèn)。僅當(dāng)前實(shí)例的控制文件被打開,數(shù)據(jù)文件未打開,在這個(gè)模式下可以進(jìn)行如下操作:重命名數(shù)據(jù)文件、添加取消或重命名重做日志文件、設(shè)置歸檔模式、設(shè)置閃回、執(zhí)行完整的數(shù)據(jù)庫(kù)恢復(fù)操作等。
startup open:startup的默認(rèn)參數(shù)就是open,打開數(shù)據(jù)庫(kù),允許數(shù)據(jù)庫(kù)的訪問(wèn),當(dāng)前實(shí)例控制文件中所描述的所有文件都已經(jīng)打開。
startup pfile=FILENAME:以FILENAME為初始化文件啟動(dòng)數(shù)據(jù)庫(kù),不是采用默認(rèn)初始化文件。
startup force:中止當(dāng)前數(shù)據(jù)庫(kù)的運(yùn)行,并開始重新正常的啟動(dòng)數(shù)據(jù)庫(kù)。
startup restrict:只允許具有restricted session權(quán)限的用戶訪問(wèn)數(shù)據(jù)庫(kù),該模式下登陸者可做如下操作:執(zhí)行數(shù)據(jù)庫(kù)數(shù)據(jù)的導(dǎo)出或?qū)?、?zhí)行數(shù)據(jù)裝載操作用SQL*Loader、暫時(shí)阻止一般的用戶使用數(shù)據(jù)、在某個(gè)移植過(guò)程和升級(jí)操作過(guò)程中restricted session登陸后可使用ALTER SYSTEM 語(yǔ)句來(lái)禁止RESTRICTED SESSION特性ALTER SYSTEM DISABLE RESTRICTED SESSION;如果是在非受限模式下打開的數(shù)據(jù)庫(kù),后來(lái)發(fā)現(xiàn)需要限制訪問(wèn),此時(shí)可以使用帶ENABLE RESTRICTED SESSION 子句的ALTER SYSTEM 語(yǔ)句來(lái)完成。
查看相關(guān)信息
下面介紹一下如何查看數(shù)據(jù)庫(kù)相關(guān)的配置,狀態(tài)等
- 看當(dāng)前數(shù)據(jù)庫(kù)的狀態(tài):select status from V$instance;
- 查看參數(shù)文件的位置:show parameter spfile;
- 查看控制文件的位置:show parameter control;
- 查看數(shù)據(jù)文件的位置:select file_name from dba_data_files;
- 啟動(dòng)數(shù)據(jù)庫(kù)到nomount狀態(tài):SQL>startup nomount;
- 啟動(dòng)數(shù)據(jù)庫(kù)到mount狀態(tài):SQL>startup mount;
- 啟動(dòng)數(shù)據(jù)庫(kù)到opent狀態(tài):SQL>startup;