體系結(jié)構(gòu)和備份恢復(fù)原理
1 Oracle database 最重要的是online redo log
類比法
controlfile :公司高管
datafile :生產(chǎn)車間
online redo log:財務(wù)處
-
注釋:
system表空間是第一生產(chǎn)車間;
當(dāng)公司高管換了,財務(wù)處也需要換;
2 shared pool主要包括:
library cache:放代碼(sql,pl/sql,java)
data dictionary cache:放數(shù)據(jù)字典
注釋:
在空間分配上,數(shù)據(jù)字典是男孩,代碼是女孩,Oracle server有重男輕女思想,若cache命中率低,要看的是女孩,而非男孩。因?yàn)闀冉o男孩喂奶水。
最近最少使用到代碼會被銷隱掉,否則,不斷的代碼進(jìn)來,shared pool會內(nèi)存不足。
3 large pool
下列場景需要用到large pool:
用rman備份與恢復(fù);
并行sql;
異步I/O;
共享服務(wù)器模式;
注釋:
large pool是shared pool的助理,若沒有l(wèi)arge pool,則會池遷移到shared pool。
4 java pool
是個跑馬場,不是放java代碼的地方
5 database buffer cache和redo log buffer
1)二者關(guān)系:
redo log buffer 畫家(描述者)
database buffer cache 模特(被描述者)
2)LGWR只能有一個;DBWR可以有多個
3)Oracle愛寫日志,不愛寫數(shù)據(jù)塊。因?yàn)槿罩镜膯挝皇琼?xiàng)(200個字節(jié)左右),而數(shù)據(jù)塊的單位是塊。
4)redo log buffer要么全寫,要么全不寫;而database buffer cache則悠著點(diǎn),一次寫一點(diǎn)
5)什么時候?qū)懭罩荆?br />
每3秒寫
1/3滿寫
commit的時候?qū)?br />
n M臟數(shù)據(jù)的時候?qū)?br />
DBWR寫之前寫
6)什么時候?qū)憯?shù)據(jù)塊?
完全檢查點(diǎn)事件發(fā)生
超時發(fā)生(增量檢查點(diǎn))
臟塊達(dá)到域值(增量檢查點(diǎn))
沒有free buffer的時候(對上面一條到補(bǔ)充)
6 Oracle是個交易系統(tǒng),其交易發(fā)生在database buffer cache里。
具體交易:
“讀”:server process去data dictionary cache查詢,將需要的讀到database buffer cache,然后,在PGA構(gòu)造游標(biāo)(結(jié)果集的指針),每一根指針都指向一個rowid,如果需要排序,連接,一致性讀,則只需要對指針進(jìn)行操作。所以,PGA是用戶最直接的使用體驗(yàn)。
“改”: 申請TADDR
記日志
動兩邊事務(wù)槽,加行頭鎖
“寫”:檢查點(diǎn)進(jìn)程計算工作負(fù)載,來定檢查點(diǎn),在檢查點(diǎn)時,發(fā)生檢查點(diǎn)事件,當(dāng)檢查點(diǎn)事件發(fā)生時逼著DBWRn按塊第一次變臟的順序?qū)懗鲆徊糠,由于這一部分臟塊的寫出,會在日志文件產(chǎn)生檢查點(diǎn)位置。
7 RBA指針后有日志項(xiàng),原因有二:
1)整個表空間級下線
2)按塊第一次變臟的順序?qū)?/p>
8 用戶不直接和Oracle server打交道,而是和server process扛上了。
類比:
server process 導(dǎo)購小姐
user process 客人
9 “一根骨頭掛點(diǎn)肉”
這俗語可以形容server process 和PGA的關(guān)系
骨頭:server process
肉 :PGA
“一條繩上的兩個螞蚱”
螞蚱:SADDR,TADDR
這話是說,新值在寫的時候,舊值會跟著被寫,同呼吸,共命運(yùn)。所以,讀上來8k,寫下去便是16k,總共I/O為24k。
10 透過現(xiàn)象看本質(zhì)
提交的本質(zhì):釋放鎖,寫日志,事務(wù)槽進(jìn)入倒計時
正常關(guān)機(jī)的本質(zhì):
1)關(guān)閉JAVA進(jìn)程(Oracle大戰(zhàn)java)
2)寫檢查點(diǎn)
a)將current_scn凍結(jié)
b)把data block寫下
c)讓checkpoint_change#等于current_scn
注釋:
select resetlogs_change# a,checkpoint_change# b,current_scn c
from v$database
其中,a<b<c
a:建庫的時間原點(diǎn)
b:寫數(shù)據(jù)塊的界,寫后,內(nèi)存中的所有數(shù)據(jù)塊多比b來得大。所以,增量檢查點(diǎn)這個會被延遲標(biāo)識,因?yàn),還沒有全部下來。
11 system表空間
1)存放數(shù)據(jù)字典表
2)包,過程,函數(shù)和觸發(fā)器等pl/sql對象
12 sysaux表空間
1)90%用來收集工作負(fù)載
2)10%存放sysman到東西
類比:
生活中,水表,電表,煤氣表,這些表上面的度數(shù),都是“逝者如斯夫”,為了比較,合理開支,需要抄表。
13 buffer的四種狀態(tài)
free:寫下去的時候
clean:剛讀上來
pinned:特殊的clean,被加了latch,正要用
dirty:被改了
14 RBA指針的碎碎念
方向:總是無縫下移
出生地:控制文件
指向地:日志文件
過帳:對應(yīng)的數(shù)據(jù)塊已寫到數(shù)據(jù)文件中
active :被RBA覆蓋的日志(RBA只有一根)
完全檢查點(diǎn)會直接把RBA干到重做日志組的最后一條
15 斷電本質(zhì):SGA突然沒有了,實(shí)力崩潰
與斷電本質(zhì)一致的是:
干掉SMON進(jìn)程(kill -9 PID)
shutdown abort
16 在mount階段,由SMON去讀控制文件,并比較:
1)上次關(guān)機(jī)的SCN A
上次關(guān)機(jī)的checkpoint B
2)日志組最后一條的記錄 C
RBA指針的位置 D
若正常關(guān)機(jī),則 A=B C=D
若不正常關(guān)機(jī),則 A>B D>C
這時,就需要派SMON去前滾,按重做日志的記錄在內(nèi)存中重做一遍,直到C=D。
本文出自:億恩科技【www.allwellnessguide.com】
服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|