新聞中心
導(dǎo)言:

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站建設(shè)、網(wǎng)站制作與策劃設(shè)計(jì),蘆淞網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:蘆淞等地區(qū)。蘆淞做網(wǎng)站價(jià)格咨詢:18980820575
Oracle數(shù)據(jù)庫(kù)是企業(yè)級(jí)的數(shù)據(jù)庫(kù)軟件,應(yīng)用范圍非常廣泛,并且具有高可靠性、高安全性等特點(diǎn)。但是,對(duì)于Oracle數(shù)據(jù)庫(kù)啟動(dòng)的原理和機(jī)制,需要深入研究和分析才能全面了解。
一、Oracle數(shù)據(jù)庫(kù)啟動(dòng)前的準(zhǔn)備工作
在Oracle數(shù)據(jù)庫(kù)啟動(dòng)前,需要對(duì)操作系統(tǒng)和Oracle環(huán)境進(jìn)行一些配置工作。操作系統(tǒng)需要安裝Oracle軟件和設(shè)置環(huán)境變量,Oracle環(huán)境需要進(jìn)行數(shù)據(jù)庫(kù)實(shí)例的創(chuàng)建和參數(shù)的配置。
二、Oracle數(shù)據(jù)庫(kù)啟動(dòng)的步驟
1. 初始化參數(shù)文件
在Oracle數(shù)據(jù)庫(kù)啟動(dòng)時(shí),需要讀取初始化參數(shù)文件來獲取數(shù)據(jù)庫(kù)的基本信息和配置參數(shù)。如果系統(tǒng)沒有指定參數(shù)文件,則會(huì)使用默認(rèn)的參數(shù)文件進(jìn)行啟動(dòng)。參數(shù)文件主要包括數(shù)據(jù)庫(kù)的名稱、端口號(hào)、內(nèi)存大小、存儲(chǔ)路徑等。
2. 創(chuàng)建進(jìn)程和線程
Oracle數(shù)據(jù)庫(kù)啟動(dòng)時(shí),會(huì)創(chuàng)建多個(gè)進(jìn)程和線程,包括后臺(tái)進(jìn)程、用戶進(jìn)程、監(jiān)聽進(jìn)程等。后臺(tái)進(jìn)程主要負(fù)責(zé)數(shù)據(jù)庫(kù)的管理和維護(hù),用戶進(jìn)程則是客戶端連接到數(shù)據(jù)庫(kù)時(shí)創(chuàng)建的線程,監(jiān)聽進(jìn)程則負(fù)責(zé)接受客戶端連接請(qǐng)求、傳遞請(qǐng)求到相應(yīng)的進(jìn)程中處理。
3. 初始化SGA
SGA(System Global Area)是Oracle數(shù)據(jù)庫(kù)中的共享內(nèi)存區(qū)域,其中存儲(chǔ)了大量數(shù)據(jù)庫(kù)緩存信息和系統(tǒng)狀態(tài)信息。在Oracle數(shù)據(jù)庫(kù)啟動(dòng)時(shí),需要初始化SGA,包括分配內(nèi)存、初始化緩存結(jié)構(gòu)等操作。
4. 啟動(dòng)后臺(tái)進(jìn)程
在Oracle數(shù)據(jù)庫(kù)啟動(dòng)時(shí),需要啟動(dòng)多個(gè)后臺(tái)進(jìn)程,包括CKPT、DBWn、LGWR等進(jìn)程。這些后臺(tái)進(jìn)程主要負(fù)責(zé)數(shù)據(jù)庫(kù)的日志、檢查點(diǎn)、緩存管理等操作。
5. 恢復(fù)數(shù)據(jù)庫(kù)
如果Oracle數(shù)據(jù)庫(kù)在前一次關(guān)閉時(shí)出現(xiàn)異常,需要進(jìn)行恢復(fù)操作。數(shù)據(jù)恢復(fù)的過程主要包括日志重做、回滾數(shù)據(jù)等操作。
6. 執(zhí)行用戶腳本
在Oracle數(shù)據(jù)庫(kù)啟動(dòng)完成之后,需要執(zhí)行用戶腳本,包括初始化腳本、配置腳本等。這些腳本可以用來初始化數(shù)據(jù)庫(kù)對(duì)象、配置存儲(chǔ)路徑等。
三、Oracle數(shù)據(jù)庫(kù)啟動(dòng)的原理和機(jī)制
1. Oracle數(shù)據(jù)庫(kù)啟動(dòng)的原理
Oracle數(shù)據(jù)庫(kù)啟動(dòng)的原理主要是基于共享內(nèi)存和進(jìn)程通信的機(jī)制。SGA是Oracle數(shù)據(jù)庫(kù)中的共享內(nèi)存區(qū)域,其中存儲(chǔ)了大量的數(shù)據(jù)庫(kù)緩存和系統(tǒng)狀態(tài)信息。在啟動(dòng)數(shù)據(jù)庫(kù)時(shí),需要初始化SGA,并且所有的進(jìn)程都可以訪問這個(gè)共享內(nèi)存區(qū)域。進(jìn)程之間通信的方式主要是基于共享內(nèi)存和信號(hào)量的機(jī)制。
2. Oracle數(shù)據(jù)庫(kù)啟動(dòng)的機(jī)制
在Oracle數(shù)據(jù)庫(kù)啟動(dòng)時(shí),會(huì)創(chuàng)建多個(gè)進(jìn)程和線程,包括監(jiān)聽進(jìn)程、后臺(tái)進(jìn)程、用戶進(jìn)程等。監(jiān)聽進(jìn)程負(fù)責(zé)接受客戶端連接請(qǐng)求并將請(qǐng)求傳遞給相應(yīng)的進(jìn)程處理。后臺(tái)進(jìn)程主要負(fù)責(zé)數(shù)據(jù)庫(kù)的管理和維護(hù),包括緩存管理、日志管理、檢查點(diǎn)等。用戶進(jìn)程則是客戶端連接到數(shù)據(jù)庫(kù)時(shí)創(chuàng)建的線程,用于處理客戶端提交的SQL語句。
Oracle數(shù)據(jù)庫(kù)啟動(dòng)的機(jī)制主要是基于多進(jìn)程和多線程的機(jī)制,通過這種方式可以充分發(fā)揮多核CPU的性能,提高系統(tǒng)的吞吐量和響應(yīng)速度。
四、
Oracle數(shù)據(jù)庫(kù)啟動(dòng)是一個(gè)比較復(fù)雜的過程,在啟動(dòng)前需要進(jìn)行多項(xiàng)準(zhǔn)備工作,包括環(huán)境變量的設(shè)置、數(shù)據(jù)庫(kù)參數(shù)的配置等。在啟動(dòng)過程中,需要?jiǎng)?chuàng)建多個(gè)進(jìn)程和線程,并對(duì)SGA進(jìn)行初始化和管理。通過對(duì)Oracle數(shù)據(jù)庫(kù)啟動(dòng)的原理和機(jī)制的深入分析,可以更好地理解Oracle數(shù)據(jù)庫(kù)的工作方式和機(jī)制,為數(shù)據(jù)庫(kù)的運(yùn)維和優(yōu)化提供有益的參考。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220誰能介紹下oracle數(shù)據(jù)庫(kù)的前滾rolling forward原理嗎?
在一個(gè)事務(wù)沒有提交之前,它的臟塊有可能已經(jīng)被寫入到數(shù)據(jù)文件中。在實(shí)例恢復(fù)時(shí),roll forward之后會(huì)進(jìn)行roll back,這時(shí)已經(jīng)被寫入數(shù)據(jù)文件的未提交的事務(wù)會(huì)被回退。
事務(wù)具有acdi四大特性:
a(atomicity):原子性表示事務(wù)執(zhí)行過程中的任何失敗都將導(dǎo)致事務(wù)所做的任何修改失效。
c(consistency):一致性表示當(dāng)事務(wù)執(zhí)行失敗時(shí),所有被該事務(wù)影響的數(shù)據(jù)都應(yīng)該恢復(fù)到事務(wù)執(zhí)行前的狀態(tài)。
i(isolation):隔離性表示在事務(wù)執(zhí)行過程森猜慎中對(duì)數(shù)據(jù)的修改,在事務(wù)提交之前對(duì)其他事務(wù)不可見兆伍(再此敬沒又提交只是對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行的操作)。
d(durability):永久性表示如果事務(wù)提交成功之后,對(duì)數(shù)據(jù)的修改將是永久的。是指一旦做了rollback就不能在提交了。反之一旦提交了就不可以回滾了。
原子性是手段,一致性是目的。
偶然的一次,網(wǎng)友在t.askmaclean.com ASK Maclean Home提問了培芹吵關(guān)于11.2 上一個(gè)ORA-600問題的解決途徑,我們這里不討論該ORA-600錯(cuò)誤, 比這個(gè)錯(cuò)誤本身更有趣的是 該600 trace中記錄了一段對(duì)于前滾恢復(fù)rolling upgrade描述十分詳細(xì)的KST trace。
很多網(wǎng)友肯定要問什么是KST? KST是9i以后引入的內(nèi)部診斷機(jī)制Tracing Facility,每一個(gè)Oracle 進(jìn)程都維護(hù)SGA中的一小塊Trace buffer,并將自身的默認(rèn)啟用的一些event事件信息寫入到Trace Buffer中(這些事件默認(rèn)包括10280, 10401, 10441, 10442, 10425, 10427, 10429, 10434, 10666),可以使用內(nèi)部視圖x$trace觀察這些信息,默認(rèn)Trace Buffer不寫到磁盤上,而只在SGA中維護(hù),當(dāng)Trace Buffer用完時(shí)將被重用。
了解了 KST的知識(shí)后,我們可以從容地閱讀下面這段TRACE了:
Trace Bucket Dump Begin: default bucket for process 19 (osid: 29785)
TIME(*=approx):SEQ:COMPONENT:FILE@LINE:FUNCTION:SECT/DUMP: DATA
以上是KST Trace的 頭部
COMPONENT 組件名 例如首山 db_trace 、CACHE_RCV,這里的CACHE_RCV意為 cache recovery,實(shí)際上是我們所說的前滾rolling forward。
FILE@LINE 指oracle內(nèi)核代碼的文件名和行數(shù) 例如:kst.c、kcv.c,這些都是oracle的核心C代碼名
FUNCTION 指oracle內(nèi)核函數(shù)名 例如kcvcrv()、kctrec()
即 EVENT ID:PID:SID
DATA 實(shí)際的操作配侍內(nèi)容
我們選擇性地閱讀KST TRACE的內(nèi)容:
:40:52.:800005B3:CACHE_RCV:kcv.c@15475:kcvcrv(): kcvcrv: Entering kcvcrv():40:52.:800005B4:KFNU:kfn.c@2200:kfnPrepareA(): kfnPrepareA force=0 state_kfnsg=0x7
:40:52.772999*:800005B5:CACHE_RCV:kcv.c@16100:kcvcrv(): kcvcrv: file 1 – cpscn 0x0000.018b76b2, rs 0
:40:52.826001*:800005B6:CACHE_RCV:kcv.c@16100:kcvcrv(): kcvcrv: file 2 – cpscn 0x0000.018b76b2, rs 0
:40:52.862023*:800005B7:CACHE_RCV:kcv.c@16100:kcvcrv(): kcvcrv: file 3 – cpscn 0x0000.018b76b2, rs 0
:40:52.909981*:800005B8:CACHE_RCV:kcv.c@16100:kcvcrv(): kcvcrv: file 4 – cpscn 0x0000.018b76b2, rs 0
:40:52.945933*:800005B9:CACHE_RCV:kcv.c@16100:kcvcrv(): kcvcrv: file 5 – cpscn 0x0000.018b76b2, rs 0
:40:52.993824*:800005BA:CACHE_RCV:kcv.c@16100:kcvcrv(): kcvcrv: file 6 – cpscn 0x0000.018b76b2, rs 0
:40:53.005829*:800005BB:CACHE_RCV:kcv.c@16100:kcvcrv(): kcvcrv: file 7 – cpscn 0x0000.018b76b2, rs 0
:40:53.041893*:800005BC:CACHE_RCV:kcv.c@16100:kcvcrv(): kcvcrv: file 8 – cpscn 0x0000.018b76b2, rs 0
:40:53.065779*:800005BD:CACHE_RCV:kcv.c@16100:kcvcrv(): kcvcrv: file 9 – cpscn 0x0000.018b76b2, rs 0
:40:53.089760*:800005BE:CACHE_RCV:kcv.c@16100:kcvcrv(): kcvcrv: file 10 – cpscn 0x0000.018b76b2, rs 0
kcvcrv的全稱是 ernel ache ecovery rash ecovery erify , kcvcrv內(nèi)核函數(shù)在crash recovery的過程中顯得極為重要,它總是發(fā)生在當(dāng)一個(gè)前臺(tái)進(jìn)程試圖啟動(dòng)臟關(guān)閉(dirty shutdown)的數(shù)據(jù)庫(kù)的時(shí)候。kcvcrv 的工作包括檢驗(yàn)所有的數(shù)據(jù)文件頭并驗(yàn)證控制文件中的數(shù)據(jù)文件記錄以確認(rèn)是否需要介質(zhì)恢復(fù)。這個(gè)步驟必要地驗(yàn)證僅僅crash recovery是否足以讓數(shù)據(jù)庫(kù)恢復(fù)到一致狀態(tài)(consistent),相信大家已經(jīng)耳熟能詳 crash recovery 、 instance recovery 、 media recovery 三者的區(qū)別。 若kcvcrv發(fā)現(xiàn) data files數(shù)據(jù)文件、control files控制文件亦或者redo log file在線日志文件存在corrupted 或者 丟失,或者實(shí)際上是從之前的備份中還原過來的,那么kcvcrv會(huì)強(qiáng)制用戶必須使用media recovery才能將數(shù)據(jù)庫(kù)恢復(fù)到一致,無法通過crash recovery實(shí)現(xiàn)恢復(fù)。注意 kcvcrv的檢測(cè)并不是完全的,它主要是檢測(cè) 數(shù)據(jù)文件頭的checkpoint scn 和 控制文件中data files的checkpoint scn是否一致,以確保 這些數(shù)據(jù)文件完成了shutdown instance時(shí)的最后一次FULL Checkpoint。 kcvcrv并不能檢測(cè)出除數(shù)據(jù)文件頭部外的datafile body是否存在介質(zhì)訛誤。
kcvcrv需要對(duì)control file讀寫才能完成其必要的任務(wù),所以它會(huì)啟動(dòng)一個(gè)控制文件讀寫事務(wù) read-write control file transaction。通過檢驗(yàn)控制文件中每個(gè)數(shù)據(jù)文件的記錄以確認(rèn)數(shù)據(jù)文件是否有被重新同步的必要。 當(dāng)然kcvcrv會(huì)跳過哪些OFFLINE和read-only的數(shù)據(jù)文件,因?yàn)檫@些文件不存在recovery的必要。
在確認(rèn)crash recovery的必要性后,kcvcrv還會(huì)主導(dǎo)啟動(dòng)并行的恢復(fù)工作(parallel recovery),注意parallel recovery只在多CPU且參數(shù)recovery_paralleli不為零的環(huán)境下有效, kcvcrv會(huì)創(chuàng)建并初始化Oracle中的PQ Slave 并行子進(jìn)程以便恢復(fù)實(shí)例。 默認(rèn)的子進(jìn)程數(shù)Slave Processes等于(CPU的總數(shù)-1),這是因?yàn)樾枰獮閞ecovery coordinator process恢復(fù)協(xié)調(diào)進(jìn)程保留一個(gè)CPU。并且需要kcvcrv分配一個(gè)recovery state object給并行恢復(fù) 協(xié)調(diào)進(jìn)程與其Slave子進(jìn)程。
最后kcvcrv還會(huì)調(diào)用另一個(gè)關(guān)鍵內(nèi)核函數(shù) kctrec ( Kernel Cache Threads ), kctrec會(huì)在所有打開的redo thread上實(shí)施進(jìn)一步的thread recovery。
:40:53.::KFNU:kfn.c@2200:kfnPrepareA(): kfnPrepareA force=0 state_kfnsg=0x7
:40:53.366569*::CACHE_RCV:kcv.c@16365:kcvcrv(): kcvcrv: Calling kctrec()
:40:53.366569*::CACHE_RCV:kct.c@4163:kctrec(): kctrec: Entering kctrec()
:40:53.413557*:A:CACHE_RCV:kct.c@4271:kctrec(): kctrec: thread 1 cf thread ckpt: logseq 1468, block 2,scn
常見的 kcvcrv 調(diào)用堆棧 stack call如下:
kcratr_odr_check
kcliarq
kfgrpIterInit()
關(guān)于oracle數(shù)據(jù)庫(kù)啟動(dòng)原理的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開發(fā)和營(yíng)銷公司。廣泛應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)、設(shè)計(jì)、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!
網(wǎng)站標(biāo)題:探析Oracle數(shù)據(jù)庫(kù)啟動(dòng)的原理與機(jī)制(oracle數(shù)據(jù)庫(kù)啟動(dòng)原理)
文章網(wǎng)址:http://m.fisionsoft.com.cn/article/dpssoeg.html


咨詢
建站咨詢
