Oracle的結構體系的抽象
一個狂熱攝影愛好者—老王的幸福家庭
每一本介紹ORACLE的書籍第一章節一般都會介紹ORACLE的結構體系,當開啟該章節時候,讀者會一下子陷入一個充滿了大量晦澀難懂的、陌生的概念之深淵。讀下去的興趣一下子沒有了,產生了ORACLE是一個深奧難懂的一個資料庫的想法。但是如果不知道oracle的結構體系,即使使用oracle多年了,仍然處於低檔次應用水平。為了協助大家理解結構體系的內容,我寫了一個《一個狂熱攝影愛好者—老王的幸福家庭》的介紹,通過對比與聯想,希望有助於您對ORACLE資料庫的結構體系有所理解。
家庭成員與角色(注意這家人的別名,它們會出現在附件文檔中)
成員 |
關係 |
別名 |
角色功能 |
老王 |
一家 之主 |
SID |
用特殊的相機(不用換菲林的一次產生一張照片和一張底片的)照相,並將照片放在DB_BUFFER_CACHE,將底片交給大兒子, 並作標記SCN; |
王妻 |
妻子 |
DBWR |
王妻是一個傳統的中國女性,她的一項工作是不斷地看看DB_BUFFER_CACHE上是否有新的照片,如有,她就放在照片空間(照片空間有照片剪貼簿、掛在牆壁上,照相簿幾部分組成)上。牆上的照片架構一樣大小,有時候一個架構放一張照片,有時候,一個架構放多張照片,有時候一張照片佔用多個架構(照片鏈),每個架構上用SCN(system change number)作記錄,每一張照片有唯一的ID(rowid),這個ID包含牆壁與架構的資訊, 有時候,老王在看牆上照片,覺得不滿意,拿下來進行修改,他就將包含這張照片的架構進行拷貝(也叫快照),並將拷貝放在一個叫回退的儲藏室, 如果對修改滿意並得到確認,王妻則將修改後的照片放回牆壁的原處,並把新的SCN放在架構上。如果不滿意,則從回退的儲藏室取回架構放在牆上,牆壁上的照片回到原來的樣子。 |
王伯當 |
大兒子 |
LDWR |
老王照一張照片的同時,產生了一張底片,他將底片放在家裡的廚房裡的一個架子上,在架子上,老王貼了一個標籤,標籤上標記底片,這個標籤叫“LOG-BUFFER”,當大兒子王伯當發現架子上有底片,他立即將底片放在一個筆記本裡,這個筆記本叫做“重做筆記本”,使用這個名字,是因為可以用裡面的底片恢複一張照片。大兒子王伯當將底片按照順序將底片放入到“重做筆記本”,一旦當前的筆記本滿了,他就換另一個筆記本,並在“警示日記本上”作一次記錄。 注意:不是所有照片都有底片的儲存,老王可以指定那些照片不必做日誌。 |
王仲和 |
二兒子 |
ARCH |
儘管已經這樣做了,老王還是不放心,他擔心如果來了一場大火,或者其他什麼意外,他的照片底片還是有可能被損壞,他賦予他的二兒子仲和一項任務,一旦大兒子更換“重做筆記本”時候,他就拿出那些“重做筆記本”中的底片,將他放在房子外面的一個安全的地方—後院的地下室,作了一份“重做筆記本”的拷貝,這個拷貝被稱為“歸檔的重做筆記本”,同時他更新“控制筆記本”,並在並在“警示日記本上”作一次記錄。 |
王小三 |
小兒子 |
CKPT |
小兒子王小三是一個動作迅速的小傢伙,他的任務將每一個牆壁,照相簿,剪貼冊的照片與控制筆記本中的數字協調起來,當他得到指令,他就飛奔起來,在每一個牆面上寫下數字,並將同樣的數字記錄在“控制筆記本”中,使得每一件事情協調起來。 |
王管家 |
管家 |
SMON |
有時候,全家早晨起來,房子顯得淩亂,這是因為昨晚大家休息前,沒有來得及清理各自的事情,SMON負責在開門前處理一下沒有完成的照片與回退(從回退儲藏室中取出照片架構,把舊的版本放回原來的牆上) |
王管家妻 |
女傭 |
PMON |
老王家幹完一天的工作,準備休息,他要求全家休息前,把東西放好,關掉或者停下手裡的工作。讓房間裡參觀的客人離開,一般有4種情況: 1:老王很有耐心,等待所有客人自行離開,再休息; 2:老王沒有耐心,他親自監督每一個客人,但客人看完照片後,他給客人指出出門的方向; 3:老王非常沒有耐心,他揪著客人的衣領,送出門,不讓他們幹完自己的事情; 4:老王,拉下電閘,說,時間到。屋子裡一片狼藉,第二天早上,由王管家來收拾。 當一個客人走後,老王叫來女傭,她監控每一個客人的活動,在這些客人走後,這位女傭不厭其煩地將客人留下的垃圾掃盡垃圾桶裡,並妥善處理。 如果老王沒有拉閘,每個人開著燈,進行清理:王妻會從DB_BUFFER_CACHE架子上取走所有照片,放在合適的牆壁上,大兒子王伯當確定LOG_BUFFER的架子上是空的,所有的底片都在“重做筆記本”中,小兒子王小三在整個房間裡兜了一圈,用最高與最低的目錄編號SCN來更新牆壁與筆記本;老二王仲和把最後的一張底片放在“重做筆記本”,並放到後院的地下室,然後更新控制與警示筆記本。每一件事情做完後,老王關燈,全家休息。 |
下面是一些角色活動中涉及到的一些名詞,在這裡單獨說明:
控制筆記本:老王家的主要成員,要想將照片與底片處理的井井有條,需要製作很詳細的筆記(如我們的工作周報),每個人都將自己的事情寫入這個筆記本,這個筆記本叫做“控制筆記本”。“控制筆記本”記錄了每一面牆,剪貼簿等家庭財產的清單條目,當老王覺得要增加一個房間,來放置更多的照片,他必須在“控制筆記本”增加相應的記錄。當老大更換“重做筆記本”時候,他需要在“控制筆記本”增加相應的記錄。當老二作了一份“重做筆記本”的拷貝的時候,他需要在“控制筆記本”增加相應的記錄。當王小三在房間裡跑了一圈,他需要在“控制筆記本”增加相應的記錄。這個特殊的筆記本動態地儲存了所有地方的資產情況,和房子裡以數字表示的背景工作處理序。
警示筆記本:每個家庭成員將遇到的問題寫在這個日誌裡。如果需要某個情形下的額外資訊,需要“跟蹤筆記本”,它與警示筆記本配合使用,使得警示筆記本不會那麼淩亂。
老王家的其他問題:
如果發生以下問題,老王無法開展一天的工作:
1:找不到新的一日工作的工作計劃(初始設定檔案)
2:後院的地下室滿了,老二沒有空間放置新的底片,全家人只有等著;
3:老王的妻子患了感冒,老王很傷心,他會傷心地關上門,全家停工。
4:有時候老王需要用後院地下室的底片恢複一張(些)照片。如果他丟失一張底片,或者在恢複過程中損壞了一張底片,那他無法恢複那張損壞了底片以後拍的所有照片。
5:老王在工作中有時候不小心,在工作的時候,相機裡的菲林曝光,他會要求相機廠家提供有兩個菲林倉的照相機,萬一一個菲林倉的菲林曝光,他還能指望另一個菲林倉,這第二個菲林倉叫“鏡像”。
ORACLE記憶體的體繫結構SGA
資料庫啟動的時候,能夠看到以下主要參數資訊
名稱 |
角色功能 |
共用池 (shared pool) |
庫緩衝、字典等 large pool:RMAN 平行處理 多線程伺服器分時記憶 java pool:java代碼資料使用 |
緩衝儲存區 (buffer cache) |
新的資料或者更新的資料工作先在緩衝中進行,然後寫回磁碟 |
重做日誌緩衝區 (redo log buffer) |
當資料被更新後,對於他們所作的修改被儲存在重做日誌緩衝區,當這個區滿了1/3或者有了1M的重做日誌記錄時,這個區的資料寫道聯機重做日誌裡。 |
資料庫的體繫結構---老王家與ORACLE的基本內容的對照
ORACLE概念 |
老王家的對比物 |
ORACLE資料庫 |
老王家儲存照片與相關的筆記本、牆壁、儲藏室。 |
行 |
一張照片。老王通過察看、修改、刪除來處理照片,資料庫的行儲存了資料,可以查看,修改、刪除、添加。 |
行標示(ROWID) |
照片的ID |
資料區塊 |
儲存照片的架構。 |
資料表空間 |
儲存照片的房間 |
系統更改號SCN |
小三來回兜圈子協調牆壁與各個筆記本中內容的依據 |
資料檔案 |
儲存照片的房間的每一個牆壁 |
聯機重做記錄檔 |
|
控制檔案 |
控制筆記本內容 |
參數檔案 |
老王在一家開工前必須閱讀的老王家一天工作的活動指南。 |
資料寫入器 |
王妻從DB_BUFFER_CACHE架子上取照片,並放在牆壁上 |
日誌寫入器 |
大兒子王伯當將底片放入重做筆記本。 |
歸檔器 |
二兒子仲和拿出“重做筆記本”中的底片,放入“歸檔的重做筆記本”(在後院的地下室) |
系統監視器 |
王管家 |
進程監視器 |
保姆王管家妻子 |
開啟\關閉\啟動資料庫 |
王家的房子對客人開放\全家休息\早上常規程式 |
事務 |
處理一張或者多張照片 |
檢查點 |
王小三同步牆上照片與控制筆記本的內容 |
活動流程:
1、寫入一條資料
INSERTINTO DEPTVALUES(........) 2、產生重做 儲存在重做緩衝區
3、產生UNDO 儲存在復原段中
無論是否提交,都要產生重做
COMMIT; 1、讀取一致性(原理SCN)
2、將重做日誌緩衝寫入聯機重做日誌
繼續其他工作,如果一個聯機重做日誌寫滿,LGWR關閉這個日誌,開啟寫下一個日誌,LGWR還會通知ARCH,將剛剛完成的重做日誌寫入到歸檔重作日誌中。