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