OCP读书笔记(9) - 诊断数据库
數據庫恢復顧問
Data Recovery Advisor的命令行選項
1. 啟動 RMAN 進程并連接到目標
$ rman target=/
2. 假設發生了某個錯誤,希望找出原因,使用 list failure 命令:
RMAN> list failure;如果沒有錯誤,該命令將返回以下消息:
no failures found that match specification
如果有錯誤,將顯示如下更具說明性的消息:
142 HIGH OPEN 15-JUL-07 One or more non-system datafiles are missing
該消息表明某些數據文件已丟失,由于這些數據文件屬于 SYSTEM 以外的表空間,該表空間脫機。該錯誤相當嚴重,因此優先級設為 HIGH,每個故障都有一個故障 ID,以方便各個故障的識別和解決,例如,可以發出以下命令來了解故障 142 的詳細信息:
該命令將向您顯示錯誤的確切原因
3. 向Data Recovery Advisor 尋求幫助:
RMAN> advise failure;以上命令的響應將對錯誤進行詳細的解釋,并說明如何糾正該錯誤:
首先,該 Advisor 對錯誤進行了分析,在以上的例子中,錯誤很明顯數據文件丟失,接下來,Advisor 建議了一個策略在該案例中,這也是相當簡單的:還原和恢復文件(V$IR_MANUAL_CHECKLIST 也顯示了該信息)
4. 預覽修復任務將執行的操作:
RMAN> repair failure preview;5. 發出以下命令來執行實際的修復:
RMAN> repair failure;Do you really want to execute the above repair (enter YES or NO)?
輸入YES,操作將繼續執行:
如果不希望提示;而是希望繼續進行并修復,沒有任何提示,在RMAN 提示符下使用 repair failure noprompt 即可
RMAN> repair failure noprompt;處理壞塊
1. 安裝bbed
11g安裝OracleDatabase 11g中缺省的未提供BBED庫文件,但是可以用10g的文件編譯出來
需要先從10g中復制如下文件到相應目錄然后再執行連接命令:
復制Oracle 10g庫文件
cp $ORA10g_HOME/rdbms/lib/ssbbded.o $ORA11g_HOME/rdbms/lib cp $ORA10g_HOME/rdbms/lib/sbbdpt.o $ORA11g_HOME/rdbms/libcp $ORA10g_HOME/rdbms/mesg/bbedus.msb to $ORA11g_HOME/rdbms/mesg cp $ORA10g_HOME/rdbms/mesg/bbedus.msg to $ORA11g_HOME/rdbms/mesgsu - oracle11g cd $ORACLE_HOME/rdbms/lib chown oracle11g:oinstall ssbbded.o chown oracle11g:oinstall sbbdpt.o chmod 644 ssbbded.o chmod 644 sbbdpt.ocd $ORACLE_HOME/rdbms/mesg chown oracle11g:oinstall bbedus.msb chown oracle11g:oinstall bbedus.msg chmod 644 bbedus.msb chmod 644 bbedus.msg編譯安裝bbed
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed做個鏈接到oracle二進制命令目錄里:
ln ./bbed $ORACLE_HOME/bin/bbed2. 模擬壞塊
SQL> create tablespace test01 datafile '/u02/app/oracle11g/oradata/orcl11g/test01.dbf' size 1m; SQL> create table test(id number,name varchar2(30)) tablespace test01; SQL> insert into test select rownum,object_name from dba_objects where rownum<10000; SQL> insert into test select rownum,object_name from dba_objects where rownum<10000; SQL> commit;SQL> select count(*) from test; SQL> select segment_name,file_id,block_id from dba_extents where segment_name='TEST';使用rman對其進行備份:
rman target /RMAN> backup tablespace test01 format='/u01/app/oracle/backup/rmanbk/%d_%s.dbf'; RMNA> shutdown immediate然后使用bbed工具編輯數據文件,修改里面的部分內容
查看test01.dbf的大小:
ls -l /u01/app/oracle/oradata/orcl/test01.dbfvi /u01/app/oracle/temptest/filelist.txt
加入以下內容:
1 /u01/app/oracle/oradata/orcl/test01.dbfvi /u01/app/oracle/temptest/par.bbd
加入以下內容:
blocksize=8192 listfile=/u01/app/oracle/temptest/filelist.txt mode=editbbed parfile=/u01/app/oracle/temptest/par.bbd
Password:
BBED: Release 2.0.0.0.0 - Limited Production on Sat Nov 27 23:34:25 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> set file 1 BBED> show BBED> modify 1000 file 1 block 17-----------------破壞塊 Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y BBED> verify BBED> quit查看破壞結果:
SQL>startup SQL>select count(*) from test; --error主動的運行狀況檢查
在 Oracle 數據庫 11g 中,RMAN 中的一個新命令VALIDATE DATABASE 檢查數據庫塊中的物理損壞操作,如果檢測到損壞,將記錄到自動診斷信息庫中,然后,RMAN 將生成輸出:
vi /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_7885.trc
發現17號塊發生損壞
3. 使用rman進行恢復:
RMAN> list failure; RMAN> advise failure; RMAN> repair failure preview; RMAN> repair failure noprompt;sqlplus / as sysdba SQL> select count(*) from test;還可以驗證特定的表空間,數據文件,以及數據文件中的一個塊:
RMAN> validate tablespace users; RMAN> validate datafile 1; RMAN> validate datafile 4 block 56;VALIDATE 命令的驗證范圍遠遠不只是數據文件,您可以驗證 spfile、controlfilecopy、恢復文件快速恢復區,等等
ADR:自動診斷資料庫
1. ADR目錄設置:通過參數diagnostic_dest設置
如果設置了ORACLE_BASE,diagnostic_dest設置為ORACLE_BASE的值
如果沒有設置ORACLE_BASE,diagnostic_dest默認設置為$ORACLE_HOME/log
2. ADR目錄結構:
ADR_BASE/diag/product_type/product_id/instance_id
3. ADR中的子目錄:
alert:包含實例的預警日志(XML格式)
cdump:包含核心文件
hm:包含Health Monitor報表
incident:包含每個意外事件的子目錄,每個意外事件的子目錄中還包含該意外事件的所有跟蹤轉出
incpkg:包含你為傳到Oracle Support而創建的意外事件包
ir:包含為每個實例創建的意外事件報表
trace:存儲用戶會話跟蹤文件
通過查詢V$DIAG_INFO視圖,找出所有與ADR有關的位置:
SQL> select name, value from v$diag_info;4. 如何查看和解決ADR中的問題
可以通過命令行工具adrci和database control中的support workbench來訪問ADR中的數據
adrci:通過adrci工具可以查看數據庫的診斷數據,還可以把意外事件和問題信息打包成ZIP文件發送給Oracle Support,診斷數據包括跟蹤和轉儲文件,預警日志文件以及oracle database 11g的新Health Monitor報表等數據,可以使用交互式和腳本方式使用adrci
以命令行方式使用adrci:
[root@oracle ~]# su - oracle [oracle@oracle ~]$ adrci輸入help可以查看幫助
在命令行中執行adrci命令:
為了在命令行中執行adrci命令,可以使用參數exec,調用adrci時,必須在腳本中使用以下的語法:
adrci exec="command[;command]...."
例如,如果想要在一個命令行中使用兩條adrci命令:show homes和show incident,可以使用以下的語法:
adrci exec="show homes; show incident"例如,使用命令行功能查看告警日志:
adrci exec="set homepath diag/rdbms/orcl/orcl; set editor vi; show alert -V"使用腳本:
adrci<<eofset homepath diag/rdbms/orcl/orclshow alert -p "message text like '%ORA-%'" eof設置homepath
當我們在adrci發出命令時,這些命令都將在ADR的根目錄下運行,show base命令可以查看ADR的根目錄的位置:
如果沒有明確設置homepath(根目錄路徑),則ADR根目錄下的所有ADR主目錄都是當前的,ADR命令總是在當前ADR主目錄中的診斷數據上運行,因此,如果執行一條命令,如show tracefile,adrci將顯示當前的每個ADR目錄中的所有跟蹤文件,show homes顯示所有可用的ADR主目錄
設置ADR主目錄的路徑:
adrci> set homepath diag/rdbms/orcl/orcl; adrci> show homepath;當有多個當前主目錄的情況下執行ips命令(創建一個意外事件包)將報錯,所以必須用set homepath命令設置單個ADR主目錄路徑,才能用ips命令創建意外事件包
查看命令列表
可以在adrci命令行上輸入help命令查看可以使用那些adrci命令
查看預警日志
在11G中,預警日志文件以文本格式和XML格式的文件存儲,分別在ADR的主目錄下,和trace目錄下,可以使用adrci命令來查看XML格式的告警日志如
adrci將當前的日志文件的完整內容傳輸到/tmp目錄中,可以使用-tail選項的show alert命令查看預警日志文件的20到30條消息,如
adrci> show alert -tail 100查看告警日志中是否存在ORA-600錯誤:
adrci> show alert -p "MESSAGE TEXT LIKE %ORA-600%"adrci中可以使用spool例如:
adrci> spool /u01/app/oracle/temptest/strip_alert.log adrci> show alert adrci> spool off列出跟蹤文件以及查看意外事件:
adrci> show tracefile adrci> show incident adrci> show incident -mode detail -p "incident_id=113769"show incident命令有兩個選項,分別是謂詞串-p和方式-mode,可以使用謂詞串來指定各字段名,可在謂詞中使用的所有的字段名的列表通過describe incident來顯示:
sdrci> describe incident主動的運行狀況檢查
雖然數據庫自動進行激活檢查,但最好是定期主動運行檢查器,檢測至今尚未影響數據庫的潛在故障激活檢查只在故障影響數據庫時才執行,比如說在用戶試圖從某個訛誤數據塊中檢索數據時才執行激活檢查,但是,如果用戶沒有在數據塊訛誤后訪問它,則該訛誤的數據塊不會自動導致數據庫的故障預警,手動檢查有助于捕捉這種可能在某個繁忙時間發作,潛在地降低數據庫可用性的隱蔽故障
可使用Database Control或PL/SQL程序包dbms_hm來進行手動數據庫檢查,此外,還可以用新的RMAN命令validate進行數據庫訛誤檢查
1.用dbms_hm程序包進行手動檢查
Oracle通過dbms_hm程序包來進行Health Monitor,使用dbms_hm程序包的run_check過程進行主動健康檢查
desc dbms_hm
下面列出run_check過程的不同參數所代表的含義
check_name:數據庫檢查名,這是一個必需的參數,而且一定要與v$hm_check視圖中的檢查名匹配
run_name:這是一個可選的參數,它允許指定檢查運行名
timeout:可選,可以用檢查能運行的時間長度設置限制
input_params:這是一個輸入參數,控制檢查的運行,可查詢v$hm_check_param視圖查看各種類型的輸入
實驗:使用dbms_hm來進行數據文件完整性的檢查:
(1). 使用rman對數據庫進行備份:
rman target /
backup database format='/u02/backup/rmanbk/%d_%s.dbf';
(2). 刪除users01.dbf:
cd $ORACLE_BASE/oradata/orcl11g
rm -rf users01.dbf
(3). 使用dbms_hm進行檢測:
exec dbms_hm.run_check('DB Structure Integrity Check', 'testrun1');
Health Monitor在此數據庫實例的ADR主目錄中保存其所有數據庫檢查的報告,show hm_run命令顯示ADR中登記的所有檢查器運行的摘要,它們是可以從v$hm_run視圖看到的相同的檢查器運行,給出show hm_run命令的樣例結果:
adrci> show hm_run
可使用adrci命令show report查看Health Monitor執行的一個特定檢查的詳細報告:
adrci> show report hm_run testrun1
所有Health Monitor報告都存儲在v$hm_run視圖中,使用dbms_hm程序包首先生成報告:
var v_output clob
begin
:v_output := dbms_hm.get_run_report('testrun1');
end;
/
打印報告:
set long 100000
set pages 0
print :v_output
可以直接查詢v$hm_run視圖獲得檢查的信息:
select name, check_name, run_mode, status from v$hm_run;
2.使用Database Control進行手動檢查
可以按照下面的步驟通過Database Control進行Health Monitor檢查:
(1) 單擊Database主頁上的Advisor Central(顧問中心);
(2) 單擊Checkers(檢查器)轉到Checkers子頁;
(3) 單擊你想運行的檢查器;
(4) 為檢查器運行輸入每個參數的值;
(5) 單擊Run(運行),在確認你的選擇后,再次單擊Run開始檢查
3.用RMAN命令validate進行手動檢查
在以前的Oracle數據庫版本中,可以使用backup … validate命令檢驗備份,本質上,這條命令幫助檢查數據文件中的邏輯和物理塊內訛誤(intrablock corruption),同時還檢查數據文件是否可以被RMAN備份,這條命令并不執行實際的備份,它只是檢驗數據庫文件,使你在用RMAN備份這些數據文件時保證具有可用的合法的備份
Oracle Database 11g有一條名為validate的新命令,它在語義上與舊的backup … validate命令具有類似的選項,但可以進行更細粒度的檢驗。backup … validate命令只能在數據庫層面上使用,而validate命令可以在備份集、表空間、數據文件的層面上完成相同的工作,甚至可以在數據塊層次上使用,甚至可以用它來檢查閃回恢復區或所有恢復文件的完整性
可以使用RMAN中的Data Recovery Advisor的list failure、advise failure和repair failure命令查看故障并處理它們
實驗:
rman target /
RMAN> validate database;
RMAN> list failure;
RMAN> advise failure ;
RMAN> repair failure;
?
轉載于:https://www.cnblogs.com/thlzhf/p/3382733.html
總結
以上是生活随笔為你收集整理的OCP读书笔记(9) - 诊断数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5.exchange2013实战操作之启
- 下一篇: TestFlight