Objects
1.明確Oracle數(shù)據(jù)庫(kù)中可能發(fā)生微信訪問(wèn)權(quán)限在哪里設(shè)置的錯(cuò)誤類型;
2.描述實(shí)例恢復(fù)的方法;
3.明確checkpoints,redo log files和archive log files的重要性;
4.配置快速閃回區(qū);
5.配置歸檔模式;
Part of Your Job
DBA的職責(zé)就是要保證數(shù)據(jù)庫(kù)是可使用的而且是高效的;
1.避免數(shù)據(jù)庫(kù)發(fā)生常規(guī)錯(cuò)誤:比如用戶無(wú)權(quán)限,表空間不足等等;
2.增加MTBF(Mean Time Between Failures),即兩次發(fā)生故障的時(shí)間間隔;
3.使用冗余方式保護(hù)關(guān)鍵組件,主要是硬件冗余的方式:比如使用RAC,DG等技術(shù);
4.減少M(fèi)TTR(Mean Time To Recover),即發(fā)生錯(cuò)誤時(shí)的恢復(fù)時(shí)間;
5.最小化數(shù)據(jù)丟失,提交的數(shù)據(jù)保留,未提交的數(shù)據(jù)丟失:使用archive log files,flashback technology, dataguard技術(shù);
Categories of Failure
1.語(yǔ)句級(jí)別錯(cuò)誤:比如select,insert,update,delete錯(cuò)誤;
2.用戶進(jìn)程錯(cuò)誤:比如一個(gè)數(shù)據(jù)庫(kù)的會(huì)話失敗了;
3.網(wǎng)絡(luò)錯(cuò)誤:數(shù)據(jù)庫(kù)的連接丟失;
4.用戶錯(cuò)誤:比如刪除了一個(gè)表,刪除了一個(gè)用戶等等;
5.實(shí)例錯(cuò)誤:比如數(shù)據(jù)庫(kù)突然宕機(jī);
6.媒體錯(cuò)誤:比如因?yàn)榇疟P損壞或者OS級(jí)別刪除而丟失了數(shù)據(jù)庫(kù)文件;
Statement Failure
1.試圖往表中插入非法數(shù)據(jù):需要程序前端做驗(yàn)證,或者讓用戶修改數(shù)據(jù);
2.嘗試執(zhí)行某個(gè)操作時(shí)權(quán)限不足:需要dba授權(quán)某個(gè)對(duì)象權(quán)限或者系統(tǒng)權(quán)限;
3.嘗試分配空間失敗:開(kāi)始可重新開(kāi)始的空間分配,增加用戶的磁盤配額,對(duì)表空間添加空間;
4.應(yīng)用程序中的邏輯錯(cuò)誤:需要開(kāi)發(fā)人員去修改程序錯(cuò)誤;
TIPS:這個(gè)過(guò)程大部分是因?yàn)樵O(shè)計(jì)錯(cuò)誤,例如安全機(jī)制和配額規(guī)則;需要DBA參與進(jìn)來(lái)處理錯(cuò)誤,比如為用戶添加權(quán)限,分配空間,同時(shí)也要參與查看邏輯錯(cuò)誤的過(guò)程;
User Process Failure
用戶突然中斷連接,異常結(jié)束或者是程序錯(cuò)誤導(dǎo)致的會(huì)話中斷:不需要DBA去處理,實(shí)例后臺(tái)進(jìn)程會(huì)回滾未提交的改變并釋放相關(guān)的鎖;
PMON后臺(tái)進(jìn)程會(huì)階段性的檢查Server Processes,并檢查微信訪問(wèn)權(quán)限在哪里設(shè)置他們的會(huì)話是否連接;如果PMON發(fā)現(xiàn)某一個(gè)Server Process不再連接了,則會(huì)恢復(fù)增在進(jìn)行的事務(wù)(回滾未提交事務(wù)和釋放相關(guān)的鎖);
如果是少量的錯(cuò)誤則不需要關(guān)心,只需要讓用戶重新做一次相關(guān)操作即可;如果是大量的連接錯(cuò)誤,則需要檢查是不是設(shè)置的processes參數(shù)太小了,或者對(duì)用戶進(jìn)行培訓(xùn);
Network Failure
1.監(jiān)聽(tīng)失敗:配置一個(gè)備用的的監(jiān)聽(tīng)器進(jìn)行連接超時(shí)的故障轉(zhuǎn)移;
2.NIC失敗:配置多個(gè)網(wǎng)卡;
3.網(wǎng)絡(luò)連接失敗:配置備用的網(wǎng)絡(luò)連接;
解決的方式就是通過(guò)做冗余來(lái)提供高可用;
User Error
1.用戶無(wú)意(inadvertently)刪除或者修改了數(shù)據(jù):如果沒(méi)有提交的話,不需要任何處理;否則需要使用閃回或者回退表;
2.用戶誤刪除了一個(gè)表:從回收站恢復(fù);如果使用了purge選項(xiàng)的話,則需要使用基于時(shí)間點(diǎn)的恢復(fù)(PITR, Point-in-time Recovery)來(lái)還原表;
Flashback Technology
1.查看數(shù)據(jù)之前的狀態(tài);
2.使數(shù)據(jù)在一個(gè)時(shí)間段內(nèi)反復(fù)的回放,類似于磁帶一樣可以前后倒帶(back and forth,反復(fù)的,來(lái)回的)
3.幫助用戶做錯(cuò)誤分析和恢復(fù);
4.Error Analysis:
- Flashback Query:閃回查詢,可以查看表中過(guò)去一個(gè)時(shí)間點(diǎn)已提交的數(shù)據(jù);使用AS OF子句;
- Flashback Versions Query:閃回版本查詢,可以查看表中已提交的數(shù)據(jù)各個(gè)版本變化的過(guò)程;
- Flashback Transaction Query:閃回事務(wù)查詢,可以查看事務(wù)級(jí)別數(shù)據(jù)庫(kù)的改變;
5.Error Recovery:
- Flashback Transaction Backout:事務(wù)回退,可以回退指定的事務(wù)和它依賴的事務(wù);
- Flashback Table:刪回表,可以回退一個(gè)或者多個(gè)表的內(nèi)容到之前的一個(gè)時(shí)間點(diǎn),而不影響其它的數(shù)據(jù)庫(kù)對(duì)象;
- Flashback Drop:從回收站中恢復(fù)已刪除的表;
- Flashback Database:使整個(gè)數(shù)據(jù)庫(kù)都回退到過(guò)去的某個(gè)時(shí)間點(diǎn)
Instance Failure
1.典型的錯(cuò)誤有斷電,硬件出錯(cuò),核心的后臺(tái)進(jìn)程出錯(cuò),緊急關(guān)機(jī)等;一般不需要DBA的干預(yù),在實(shí)例啟動(dòng)時(shí)會(huì)自動(dòng)進(jìn)行實(shí)例恢復(fù)的過(guò)程;
2.需要實(shí)例恢復(fù)時(shí)因?yàn)閿?shù)據(jù)庫(kù)實(shí)例在關(guān)閉的之前沒(méi)有把內(nèi)存中的數(shù)據(jù)和數(shù)據(jù)文件進(jìn)行同步;
Understanding Instance Recovery:CKPT Process
1.檢查點(diǎn)事件由CKPT后臺(tái)進(jìn)程觸發(fā),當(dāng)檢查點(diǎn)發(fā)生時(shí),CKPT進(jìn)程會(huì)負(fù)責(zé)通知DBWR進(jìn)程將臟數(shù)據(jù)(Dirty Buffer)寫出到數(shù)據(jù)文件中;CKPT進(jìn)程的另外一個(gè)職責(zé)是負(fù)責(zé)更新數(shù)據(jù)文件頭和控制文件上的檢查點(diǎn)信息;
2.檢查點(diǎn)分為增量檢查點(diǎn)和全量檢查點(diǎn)兩種;
3.日志切換的過(guò)程中,CKPT進(jìn)程也會(huì)把檢查點(diǎn)信息寫入到數(shù)據(jù)文件頭中;
4.檢查點(diǎn)存在的原因:
- 保證內(nèi)存中修改的數(shù)據(jù)塊定期寫入磁盤,以至于在系統(tǒng)失敗或者數(shù)據(jù)庫(kù)失敗的時(shí)候不會(huì)丟失數(shù)據(jù);(數(shù)據(jù)有修改就寫入,影響性能)
- 減少實(shí)例恢復(fù)的時(shí)間;(如果一直不寫入,效率高)
- 保證關(guān)機(jī)的時(shí)候所有已提交的數(shù)據(jù)都寫入到了數(shù)據(jù)文件中
5.檢查點(diǎn)信息包括檢查點(diǎn)的位置,SCN,RBA(Recovery Block Address)和日志的信息等等
Understanding Instance Recovery:Redo Log Fiels and Log Writer
1.什么是事務(wù);
ACID特性:原子性(Atomicity),一致性(Consistency),隔離性(Isolation),持續(xù)性(Durability);
事務(wù)是數(shù)據(jù)庫(kù)內(nèi)的邏輯單元,是有一條或者多條sql語(yǔ)句組成;
在實(shí)例返回給用戶commit complete之前,必須把事務(wù)信息寫入到磁盤上,這樣就強(qiáng)制保證了數(shù)據(jù)在丟失之后可以被恢復(fù)
2.Redo log files:
- 記錄了數(shù)據(jù)庫(kù)中的一切改變,以事務(wù)為單位;
- 可以預(yù)防數(shù)據(jù)丟失,比如突然斷電,磁盤損壞等情況;
- 推薦采用多路復(fù)用放在不同磁盤的方式,每隔在線日志組可以包含多個(gè)在線日志文件,它們互為鏡像;
- LGWR進(jìn)程對(duì)在線日志組中日志文件同時(shí)寫,是循環(huán)使用的存儲(chǔ)空間
3.LGWR進(jìn)程出發(fā)的條件:
- 事務(wù)提交時(shí);
- 每隔三秒鐘;
- 在DBWn寫之前;
- 在clean shutdown之前,即除了shutdown abort
Understanding Instance Recovery
1.數(shù)據(jù)庫(kù)的實(shí)例恢復(fù)是自動(dòng)完成的;
2.主要是因?yàn)闆](méi)有正常的關(guān)閉數(shù)據(jù)庫(kù),在數(shù)據(jù)庫(kù)啟動(dòng)時(shí)檢查數(shù)據(jù)文件與控制文件中記錄的信息不一致,數(shù)據(jù)庫(kù)判斷需要做實(shí)例恢復(fù);
3.需要做的工作是使用在線日志組的內(nèi)容來(lái)同步數(shù)據(jù)文件,主要包含兩個(gè)過(guò)程:
- 前滾:把redo log file中記錄的日志條目都重新做一邊,包括提交和未提交的;
- 回滾:把未提交的事務(wù)都回滾掉
Phases of Instance Recovery
1.當(dāng)數(shù)據(jù)庫(kù)啟動(dòng)到mount狀態(tài)后,要打開(kāi)數(shù)據(jù)文件,此時(shí)要檢查數(shù)據(jù)文件頭記錄的SCN和控制文件中記錄的SCN是否一致;如果一致的話就正常打開(kāi)數(shù)據(jù)庫(kù);
2.如果不一致的話,實(shí)例會(huì)按照順序應(yīng)用在線重做日志中的改變,提交和未提交的事務(wù)都在這個(gè)階段被重新執(zhí)行;
3.當(dāng)數(shù)據(jù)文件和控制文件同步之后,會(huì)打開(kāi)數(shù)據(jù)庫(kù),用戶可以登錄并進(jìn)行操作;
4.之后會(huì)讀取UNDO中數(shù)據(jù)來(lái)回滾為提交的事務(wù);最終,只有提交的數(shù)據(jù)會(huì)保留
Tuning Instance Recovery
1.實(shí)例恢復(fù)的過(guò)程中,會(huì)從上次發(fā)生checkpoint的位置一直應(yīng)用到在線日志的末尾處;
2.所以,實(shí)例恢復(fù)調(diào)優(yōu)本質(zhì)就是控制檢查點(diǎn)到日志結(jié)尾的距離(事務(wù)量);
3.為了數(shù)據(jù)庫(kù)性能,要隔一段時(shí)間才把Buffer Cache中的臟數(shù)據(jù)寫入到數(shù)據(jù)文件,因?yàn)镈BWRn進(jìn)程要比LGWR進(jìn)程慢很多;
4.每隔3s,CKPT進(jìn)程會(huì)把redo log中當(dāng)前的checkpoint位置寫入到控制文件中,因此數(shù)據(jù)庫(kù)就知道在線日志組中哪些日志實(shí)體是在恢復(fù)中需要的,哪些是不需要的;
eg:控制文件的心跳就是3s一次,可以通過(guò)3s轉(zhuǎn)儲(chǔ)2次控制文件信息查看,也可以通過(guò)alert文件查看;
5.實(shí)例恢復(fù)的時(shí)間就是應(yīng)用上次checkpoint的位置到控制文件總記錄最新SCN的位置這些日志所需要的時(shí)間,DBA通過(guò)設(shè)置fast_start_mttr_target參數(shù)和設(shè)置在線日志組大小來(lái)控制這個(gè)時(shí)間(數(shù)據(jù)庫(kù)內(nèi)部機(jī)制保證了,上次發(fā)生檢查點(diǎn)的位置到在線日志結(jié)尾的距離不能超過(guò)日志組中最小日志文件的90%)
Using the MTTR Advisor
1.指定實(shí)例恢復(fù)的期望時(shí)間,可以使用EM操作也可以在sqlplus中設(shè)置(show parameter fast_start_mttr_target);
2.默認(rèn)值是0,即禁用,由系統(tǒng)自行決定;如果設(shè)置了fast_start_mttr_target的值,則由MTTR向?qū)?EM->Advisor Central->MTTR Advisor)轉(zhuǎn)換這個(gè)值來(lái)設(shè)置其它參數(shù)來(lái)達(dá)到期望的時(shí)間內(nèi)恢復(fù);
3.最大值是3600s;
4.tips:如果fast_start_mttr_target這個(gè)值設(shè)置太小的話,會(huì)增加I/O負(fù)載,如果太大的話,則恢復(fù)時(shí)間太長(zhǎng);
Media Failure
1.磁盤驅(qū)動(dòng)器,磁盤控制器損壞,或者數(shù)據(jù)文件被刪除/損壞;主要是包括數(shù)據(jù)文件,控制文件或者在線日志文件損壞;
2.從備份中還原,如果必要的話把數(shù)據(jù)庫(kù)還原到一個(gè)新的位置等;
Configuring for Recoverability
為了配置數(shù)據(jù)庫(kù)的最大可恢復(fù)行,必須做的幾項(xiàng)操作:
1.制定常規(guī)備份策略:大部分的媒體錯(cuò)誤都需要從備份中恢復(fù)損壞或者丟失的文件;
2.控制文件多路復(fù)用:相當(dāng)于數(shù)據(jù)庫(kù)的大腦,推薦使用至少兩份控制文件,如果所有控制文件都丟失恢復(fù)起來(lái)相當(dāng)困難;
3.在線日志組多路復(fù)用:在實(shí)例恢復(fù)和媒體恢復(fù)時(shí)都需要使用到在線聯(lián)機(jī)日志,用于對(duì)提交事務(wù)的前滾操作;如果丟失在線聯(lián)機(jī)日志的話,就可能丟失數(shù)據(jù),推薦每個(gè)日志組至少包含兩個(gè)日志文件并且放在不同的磁盤上
4.打開(kāi)歸檔模式:如果一個(gè)數(shù)據(jù)文件丟失的話,從備份中恢復(fù)需要使用到備份后所有的日志文件,在線聯(lián)機(jī)日志文件是循環(huán)使用的,內(nèi)容會(huì)被覆蓋,所以需要把內(nèi)容拷貝到歸檔日志文件中;就是所謂的歸檔模式,雖然打開(kāi)之后會(huì)對(duì)數(shù)據(jù)庫(kù)性能有一定影響,但是這個(gè)是非常有必要的;查看命令archive log list
Configuring the Fast Recovery Area
1.快速閃回區(qū)是一塊存儲(chǔ)空間,用來(lái)存放歸檔日志,備份,閃回日志,多路復(fù)用的控制文件和多路復(fù)用的在線日志文件;
2.強(qiáng)烈推薦用于備份存儲(chǔ)管理,應(yīng)該把這個(gè)目錄與數(shù)據(jù)庫(kù)的數(shù)據(jù)文件,控制文件,主要在線日志文件的目錄放在不同的磁盤上;
3.快速閃回區(qū)的空間理論上是越大越好,但是推薦至少是數(shù)據(jù)庫(kù)文件(數(shù)據(jù)文件,在線日志文件,控制文件等)大小的兩倍;
4.快速閃回區(qū)中的內(nèi)容自動(dòng)被備份保留策略管理,Oracle數(shù)據(jù)庫(kù)會(huì)自動(dòng)刪除那些還原不需要的文件;rman target /;show all;
5.設(shè)置快速閃回區(qū):設(shè)置db_recovery_file_dest_size和db_recovery_file_dest參數(shù);有順序設(shè)置
Multiplexing Control Files
1.控制文件是一個(gè)非常小的二進(jìn)制文件,用來(lái)描述數(shù)據(jù)庫(kù)結(jié)構(gòu)信息;在數(shù)據(jù)庫(kù)mount或者open狀態(tài)下,必須可用;如果沒(méi)有控制文件的話,數(shù)據(jù)庫(kù)不能被mount,此時(shí)可以還原控制文件或者重建重置文件;
2.如果丟失一個(gè)控制文件的話,恢復(fù)很簡(jiǎn)單,只需要做個(gè)拷貝即可;如果全部丟失的話,恢復(fù)起來(lái)非常困難,但是也不算是個(gè)災(zāi)難;
3.如果使用ASM的話,在+DATA和+FRA各放一份控制文件即可;
4.如果是文件系統(tǒng)的話,推薦至少兩份拷貝,而且放在不同的磁盤上,增加控制文件的步驟:
- 修改spfile中初始化參數(shù):ALTER SYSTEM SET control_files='/u01/app/oracle/oradata/ORCL/control01.ctl', '/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl', '/u01/app/oracle/oradata/ORCL/control03.ctl' scope=spfile;
- 關(guān)閉數(shù)據(jù)庫(kù):shutdown immediate;
- 拷貝文件:cp /u01/app/oracle/oradata/ORCL/control01.ctl /u01/app/oracle/oradata/ORCL/control03.ctl;
- 啟動(dòng)數(shù)據(jù)庫(kù):startup;
Redo Log Files
1.每個(gè)聯(lián)機(jī)在線日志組中可以包含1個(gè)或者多個(gè)在線聯(lián)機(jī)日志文件,一組中的多個(gè)文件互為拷貝;目的是用來(lái)預(yù)防媒體錯(cuò)誤或者數(shù)據(jù)丟失,但是多個(gè)數(shù)據(jù)文件會(huì)增加數(shù)據(jù)庫(kù)的I/O(事務(wù)只有當(dāng)日志條目寫入到磁盤之后才能返回成功,所以必須把聯(lián)機(jī)日志文件放在快速磁盤上,而且要把不同的文件放在不同的磁盤上,因?yàn)橐淮沃荒軐懸粋€(gè)文件,而且如果磁盤損壞的話也有備份);
2.建議每個(gè)日志組至少兩個(gè)文件,如果是文件系統(tǒng)的話分別放在不同的磁盤上,如果是ASM的話分別放在+DATA和+FRA即可;
3.如果丟失日志組中的一個(gè)成員的話,不會(huì)影響數(shù)據(jù)庫(kù)的操作,但是會(huì)在alert日志中寫警告;如果丟失一個(gè)日志組的話,會(huì)發(fā)生驗(yàn)證的媒體錯(cuò)誤,導(dǎo)致丟失數(shù)據(jù);恢復(fù)的方式會(huì)在管理2中介紹;
Multiplexing the Redo Log
1.通過(guò)EM添加在線日志組和在線日志文件,EM->Server->Redo Log Groups;
2.通過(guò)sqlplus添加在線日志組合在線日志文件;
- 查看當(dāng)前日志組狀況:SELECT * FROM v$logfile;
- 日志文件組中添加數(shù)據(jù)文件:ALTER DATABASE ADD LOGFILE MEMBER '/u01/app/oracle/oradata/ORCL/redo01A.log' TO GROUP 1;
- 添加日志文件組:ALTER DATABASE ADD LOGFILE GROUP 4 ('/u01/app/oracle/oradata/ORCL/redo04A.log','/u01/app/oracle/oradata/ORCL/redo04B.log') SIZE 50M;
Archive Log Files
1.因?yàn)樵诰€聯(lián)機(jī)日志組是一個(gè)循環(huán)使用的內(nèi)存,為了數(shù)據(jù)庫(kù)的最大可恢復(fù)性,需要在聯(lián)機(jī)日志文件組在被覆蓋之前做一個(gè)拷貝,稱之為歸檔日志;
2.配置歸檔日志需要有三個(gè)步驟:
- 指定歸檔日志的命名規(guī)則;
- 指定一個(gè)或者多個(gè)歸檔日志的路徑;
- 設(shè)置數(shù)據(jù)庫(kù)到歸檔模式,之前歸檔日志路徑必須存在;
3.如果使用了快速閃回區(qū)的話,那么可以不用設(shè)置前兩步
Archiver(ARCn) Process
1.是一個(gè)可選的后臺(tái)進(jìn)程,當(dāng)數(shù)據(jù)庫(kù)為ARCHIVELOG模式的時(shí)候自動(dòng)啟動(dòng); ps -ef | grep arc;
2.保存數(shù)據(jù)庫(kù)中所有的改變,由log_archive_max_processes參數(shù)控制進(jìn)程的個(gè)數(shù);
3.歸檔模式下,每次發(fā)生log switch時(shí)調(diào)用archive進(jìn)程;非歸檔模式下沒(méi)有這個(gè)進(jìn)程
Archive Log File:Naming and Destinations
1.使用EM修改:EM->Availability->Configure Recovery Settings;
2.使用sqlplus修改log_archive_format參數(shù),推薦為%t_%s_%r.dbf;
- %s:sequence number,日志文件的序號(hào);
- %t:thread,線程號(hào);
- %r:resetlogs id,主要是為了保證以resetlogs模式打開(kāi)數(shù)據(jù)庫(kù)后歸檔日志的名字能保證唯一性,10g之后的新特性;
- %d:database id,數(shù)據(jù)庫(kù)id,只有在多個(gè)數(shù)據(jù)庫(kù)共享歸檔日志路徑時(shí)才會(huì)使用
3.默認(rèn)的,如果開(kāi)啟了快速閃回區(qū),則USE_DB_RECOVERY_FILE_DEST就指定了歸檔日志文件的路徑;如果想修改為其它路徑的話,則ALTER SYSTEM SET log_archive_dest_1='location=/path';
4.11gR2中可以最多寫入到31個(gè)不同的目錄,由log_archive_dest_n參數(shù)指定,目標(biāo)路徑可以是本地的也可以是遠(yuǎn)程的
Enabling ARCHIVELOG Mode
sqlplus / as sysdba
shutdown immediate
startup mount
alter database archivelog;
archive log list;
alter database open;
評(píng)論列表
還沒(méi)有評(píng)論,快來(lái)說(shuō)點(diǎn)什么吧~