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