




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 PAGE 56Oracle壞塊故障總結 最近處理了兩次典型的ora-01578,ora-01115,ora-01110故障,一次是平湖索引塊壞,一次是黃山數據文件壞、blob數據塊壞。平湖的警告日志志文件中有以以下信息:ORA-120012: eerror on auuto exxecutee of jjob 211ORA-015578: OORACLEE dataa blocck corrrupteed (fiile # 10, bblock # 25558610)ORA-011110: ddata ffile 110: DD:ORAACLEOORADATTABSUSEERS04.DBFO
2、RA-120012: eerror on auuto exxecutee of jjob 1ORA-015578: OORACLEE dataa blocck corrrupteed (fiile # 16, bblock # 26224066)ORA-011110: ddata ffile 116: DD:ORAACLEOORADATTABSUSEERS10.DBF應用軟件可以正正常使用,偶偶爾會報錯oora-011578。排錯過程登錄數據庫檢查查:select countt(*) ffrom ep_taable tt wherre pttimettrunc(sysdaate)-330 an
3、dd alarrmtypee=0784163select countt(*) ffrom eep_tabble t42810622看來全表掃描正正常select fromm ep_ttable t wheere pptimetrrunc(ssysdatte)-333 and alarmmtype=0 andd rownnum100001索引掃描報錯了了,推斷為索索引上有壞塊塊!繼續查:select ownerr,filee_id,ssegmennt_namme, seegmentt_typee, bloock_idd, bloocksfrom dba_eextenttswhere file_i
4、d=166 and blockk_id= 266240666;OWNERFILE_IDDSEGMENTT_NAMEESEGMENTT_TYPEEBLOCK_IIDBLOCKSBS16VHINOINDEX2624066616運氣真好重建相相關索引后數數據庫就恢復復了。黃山壞塊故障就就比較復雜了了,硬盤壞導導致多個數據據文件的多個個塊故障,其其中還有bllob對象。Count(*)一張表報報錯:查詢某張表系統事件中有報報錯:磁盤管理中報錯錯:Dell的服務務器,2塊772G硬盤,沒沒有做raiid,8i數據庫沒沒有備份。(上上圖磁盤3為為移動硬盤)初步檢查到這里里我感覺這次次壞的嚴重了了,恢復可能
5、能比較麻煩。整理一下思路:不要隨意重啟記錄損壞的數據據信息導出可用數據更換故障硬盤重做系統及數據據庫恢復數據重傳丟失的數據據(我們的系系統架構可以以這樣做)排錯過程select * froom dbaa_exteents wwhere file_id=8 and 114618442 bettween blockk_id aand bllock_iid+bloocks-111BSSYYS_LOBB000000037700C000117$LOBSEEGMENTTUSERSS3457008146188421310772168解釋:blocck_id+blockks-1=14618842+這個區有多多
6、少個bloock-1查到故障段為LLOBSEGGMENT類類型,SYSS_LOB000000003770CC000177$。select dl.taable_nname,ddl.SEGGMENT_NAME from dba_llobs ddl wheere dll.owneer= BS whhere ddl.SEGGMENT_NAME= SYSS_LOB000000003770CC000177$查到有壞塊的表表為EP_PPECC。接著查出這張表表的lob索索引段Select A.TAABLE_NNAME,AA.COLUUMN_NAAME,B.SEGMEENT_NAAME,B.SEGMEENT_
7、TYYPE,B.HEADEER_FILLE,B.HHEADERR_BLOCCK,B.BBYTES from DBBA_LOBBS A,DDBA_SEEGMENTTS B where AA.INDEEX_NAMME=B.SSEGMENNT_NAMME ANDD A.TAABLE_NNAME=EP_PEECC當時因為沒有記記錄,所以我我隨便舉例:1EP_TAABLETHIRDDPICTSYS_IIL000000527338C000018$LOBINNDEX71556553662EP_TAABLEPANORRAMAPIICTSYS_IIL000000527338C000017$LOBINNDEX71
8、396553663EP_TAABLEPLATEEPICTSYS_IIL000000527338C000016$LOBINNDEX7123655366select rowidd from BBS.EP_PEECC wheree dbmms_rowwid.roowid_tto_abssolutee_fno(rowidd,BS,EP_PECC)=8 aand dbbms_roowid.rrowid_blockk_numbber(roowid)=14618842;這個塊無法找出出blob段段的rowiid。本想找找后我可以按按照rowiid清空故障障的blobb數據。選擇一個范圍繼繼續找:select
9、 rowidd,T.PTTIME,TT.PLATTEPICTT,T.PAANORAMMAPICTT from BBS.EP_PEECC T wheree dbmss_rowiid.rowwid_too_absoolute_fno(rrowid,BS,EP_PECC)=8 aand dbbms_roowid.rrowid_blockk_numbber(roowid) BETWEEEN 144618400 AND 14618842;還是沒有找到select rowidd, dbmms_rowwid.roowid_oobjectt(rowiid) obbj_id, dbms_roowid.rrowi
10、d_relattive_ffno(roowid) df#, dbms_roowid.rrowid_blockk_numbber(roowid) blknuum, dbms_roowid.rrowid_row_nnumberr(rowiid) roowno ,T.PTIIME,T.ALARMMTYPE,T.PLAATEPICCT,T.PPANORAAMAPICCTfrom EPP_PECCC T whhere ddbms_rrowid.rowidd_to_aabsoluute_fnno(rowwid,BBS,EP_PECC)=8 AND dbms_rowidd.rowiid_bloock_nuu
11、mber(rowidd) BETTWEEN 14618842 ANND 144618422 +1024;還沒找到select rowidd, dbmms_rowwid.roowid_oobjectt(rowiid) obbj_id, dbms_roowid.rrowid_relattive_ffno(roowid) df#, dbms_roowid.rrowid_blockk_numbber(roowid) blknuum, dbms_roowid.rrowid_row_nnumberr(rowiid) roowno ,T.PTIIME,T.ALARMMTYPE,T.PLAATEPICCT,T
12、.PPANORAAMAPICCTfrom EPP_PECCC T whhere ddbms_rrowid.rowidd_to_aabsoluute_fnno(rowwid,BBS,EP_PECC)=8 AND dbms_rowidd.rowiid_bloock_nuumber(rowidd) BETTWEEN 14617742 ANND 144618422;終于找到了一些些AAAA66AAAIAAFFkrSAAAJ377081460994692009-10-266 19:440:080省略一些結果集集AAAA66AAAIAAFFk5JAAAG377081461883362009-10-266
13、19:447:080查到以下記錄時時出錯,看來按照rrowid清清空故障的bblob數據據不行AAAA66AAAIAAFFk5JAAAGROWID_TTYPE: 1OBJECT_NUMBEER: 33770RELATIVVE_FNOO: 8BLOCK_NNUMBERR: 144618333ROW_NUMMBER: 6可以從obj#,rfille#,bllock#,row#計計算得到理論論上的rowwid Obj# 37770Rfile# 8Block# 14618842Row# 0實際上就是將十十進制數轉化化成64進制制數,當然,從從二進制轉化化的規則比較較簡單點。將二進制數從右右到左,6個個
14、bit一組組,然后將這這6個bitt組轉成100進制數,就就是AZ az 009 + /這64個個字符的位置置(從0開始始),替換成成base664的字符即即可。rowwid是baase64編編碼的,用AAZ az 099 + /共共64個字符符表示。A表表示0,B表表示1,a表示226,0表示示52,+表示662,/表示示63可以將將其看做一個個64進制的的數。obj#=37770轉換成成二進制,補補足成6位bbase644編碼,左邊邊填0,結果果為AAAAA66rfile#=8=0010000=I,補足足成3位,得得到AAIblock#=14618842=0001011 1001000 1
15、110001 0100110=5 36 57 18,補足成成6位,得到到AAFk5SSrow#=0,33位AAA合起來就是AAAAA66AAAIAAFFk5SAAA但是不要忘了,這這次壞的是bblob它會會跨多個塊的的。所以這條條理論rowwid沒有找找到!舉例子補充說明明:select * froom dbaa_lobss dl wwhere dl.owwner=TEST1TESTT_LOGGRZSYS_LLOB000000527726C000002$TESTSYS_IIL000000527226C000002$8192900NOYESYESNOT AAPPLICCABLE NO2TESTE
16、P_TAABLEPLATEEPICTSYS_LLOB000000527738C000016$TESTSYS_IIL000000527338C000016$8192900NOYESYESNOT AAPPLICCABLE NO3TESTEP_TAABLEPANORRAMAPIICTSYS_LLOB000000527738C000017$TESTSYS_IIL000000527338C000017$8192900NOYESYESNOT AAPPLICCABLE NO4TESTEP_TAABLETHIRDDPICTSYS_LLOB000000527738C000018$TESTSYS_IIL00000
17、0527338C000018$8192900NOYESYESNOT AAPPLICCABLE NO5TESTEP_PEECCPLATEEPICTSYS_LLOB000000527746C000016$TESTSYS_IIL000000527446C000016$8192900NOYESYESNOT AAPPLICCABLE NO6TESTEP_PEECCPANORRAMAPIICTSYS_LLOB000000527746C000017$TESTSYS_IIL000000527446C000017$8192900NOYESYESNOT AAPPLICCABLE NO7TESTEP_PEECCTH
18、IRDDPICTSYS_LLOB000000527746C000018$TESTSYS_IIL000000527446C000018$8192900NOYESYESNOT AAPPLICCABLE NO沒有任何數據時時:select dl.TAABLE_NNAME,ddl.COLLUMN_NNAME,dde.seggment_name,de.seegmentt_typee,de.FFILE_IID,de.BLOCKK_ID ffrom ddba_exxtentss de,ddba_loobs dll wherre de.ownerr=TESST and dll.OWNEER=TEEST and
19、 dee.segmment_nname=ddl.SEGGMENT_NAME1T_LOGGRZSYS_LLOB000000527726C000002$LOBSEEGMENTT7172EP_TAABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT71133EP_TAABLEPANORRAMAPIICTSYS_LLOB000000527738C000017$LOBSEEGMENTT71294EP_TAABLETHIRDDPICTSYS_LLOB000000527738C000018$LOBSEEGMENTT71455EP_PEECCPLATEE
20、PICTSYS_LLOB000000527746C000016$LOBSEEGMENTT71776EP_PEECCPANORRAMAPIICTSYS_LLOB000000527746C000017$LOBSEEGMENTT71937EP_PEECCTHIRDDPICTSYS_LLOB000000527746C000018$LOBSEEGMENTT7209向EP_TABBLE表的PLATTEPICTT字段,插入入一張9MBB大小的圖片片后結果:1T_LOGGRZSYS_LLOB000000527726C000002$LOBSEEGMENTT7172EP_TAABLEPLATEEPICTSYS_L
21、LOB000000527738C000016$LOBSEEGMENTT71133EP_TAABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT72734EP_TAABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT72815EP_TAABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT72896EP_TAABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT72977EP_T
22、AABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT73058EP_TAABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT73139EP_TAABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT732110EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT732911EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016
23、$LOBSEEGMENTT733712EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT734513EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT735314EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT736115EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT736916EP_TTABLEPLATEEPICTSY
24、S_LLOB000000527738C000016$LOBSEEGMENTT737717EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT738518EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT6919EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT739320EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT6137
25、21EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT752122EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT626523EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT764924EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT639325EP_TTABLEPLATEEPICTSYS_LLOB00000052773
26、8C000016$LOBSEEGMENTT777726EP_TTABLEPLATEEPICTSYS_LLOB000000527738C000016$LOBSEEGMENTT652127EP_TTABLEPANORRAMAPIICTSYS_LLOB000000527738C000017$LOBSEEGMENTT712928EP_TTABLETHIRDPPICTSYS_LLOB000000527738C000018$LOBSEEGMENTT714529EP_PPECCPLATEEPICTSYS_LLOB000000527746C000016$LOBSEEGMENTT717730EP_PPECCPA
27、NORRAMAPIICTSYS_LLOB000000527746C000017$LOBSEEGMENTT719331EP_PPECCTHIRDDPICTSYS_LLOB000000527746C000018$LOBSEEGMENTT7209查test用戶戶blob容容量:select sum(dee.BYTEES/10224/1024) from ddba_exxtentss de,ddba_loobs dll wherre de.ownerr=TESST AND dll.OWNEER=TEEST AND dee.segmment_nname=ddl.seggment_name10.375顯示
28、10MB檢查表建在那個個數據文件那那個塊上SELECT DISTIINCT ddbms_rrowid.rowidd_relaative_fno(rrowid) AS Fiile, dbms_rowidd.rowiid_bloock_nuumber(rowidd) AS Bllock FROM eep_tabble; FilleBlockk7110看起來這個表存存放在文件號號7,塊號1110的地方方查找存放圖片的的blob段段:select de.seegmentt_namee,de.EEXTENTT_ID,dde.FILLE_ID,de.BLLOCK_IID,de.BYTESS,de.BBLO
29、CKSS,de.rrelatiive_fnno froom dbaa_exteents dde wheere dee.owneer=TEEST and dee.segmment_nname=SYS_LLOB000000527738C000016$我已經往這個段段里存放了一一張9MB的的圖片,占用用了以下塊。 SEGGMENT_NAME EXTENNT_IDFILE_IDBLOCKK_IDBYTESSBLOCKKSRELATTIVE_FFNO1SYS_LLOB000000527738C000016$07113655366872SYS_LLOB000000527738C000016$1727365
30、5366873SYS_LLOB000000527738C000016$27281655366874SYS_LLOB000000527738C000016$37289655366875SYS_LLOB000000527738C000016$47297655366876SYS_LLOB000000527738C000016$57305655366877SYS_LLOB000000527738C000016$67313655366878SYS_LLOB000000527738C000016$77321655366879SYS_LLOB000000527738C000016$8732965536687
31、10SYS_LOB000000522738C000016$973376553668711SYS_LOB000000522738C000016$1073456553668712SYS_LOB000000522738C000016$1173536553668713SYS_LOB000000522738C000016$1273616553668714SYS_LOB000000522738C000016$1373696553668715SYS_LOB000000522738C000016$1473776553668716SYS_LOB000000522738C000016$15738565536687
32、17SYS_LOB000000522738C000016$166910485576128618SYS_LOB000000522738C000016$17739310485576128719SYS_LOB000000522738C000016$18613710485576128620SYS_LOB000000522738C000016$19752110485576128721SYS_LOB000000522738C000016$20626510485576128622SYS_LOB000000522738C000016$21764910485576128723SYS_LOB00000052273
33、8C000016$22639310485576128624SYS_LOB000000522738C000016$23777710485576128725SYS_LOB000000522738C000016$246521104855761286根據上一步查出出來的BLOOCK_IDD一陣狂找,終于于找到了select rowidd, dbmms_rowwid.roowid_oobjectt(rowiid) obbj_id, dbms_roowid.rrowid_relattive_ffno(roowid) df#, dbms_roowid.rrowid_blockk_numbber(roowid
34、) blknuum, dbms_roowid.rrowid_row_nnumberr(rowiid) roowno ,T.PTIIME,T.ALARMMTYPE,T.PLAATEPICCT,T.PPANORAAMAPICCTfrom epp_tablle T wheere dbbms_roowid.rrowid_to_abbsolutte_fnoo(rowiid,TESTT,EP_TAABLE)=7 AND dbbms_roowid.rrowid_blockk_numbber(roowid) BETWEEEN 1 AND 113; ROWWIDOBJ_IIDDF#BLKNUUMROWNOOPT
35、IMEEALARMMTYPEPLATEEPICTPANORRAMAPIICT1AAAM44CAAHAAAAABuuAAA527388711002009-11-299 22:551:580看來它跨越了66號數據文件件的9號塊到到7號數據文文件的7777號塊根據rowidd反過來驗證證一下塊信息息:declareev_rowidd_typee numbber;v_OBJECCT_NUMMBER nnumberr;v_RELATTIVE_FFNO nuumber;v_BLOCKK_NUMBBERE_FFNO nuumber;v_ROW_NNUMBERR numbber;begindbms_roowi
36、d.rrowid_info(rowidd_in = AAAAM4CAAAHAAAAABuAAAA,roowid_ttype = v_rrowid_type,objecct_nummber = v_OOBJECTT_NUMBBER,relativve_fnoo = vv_RELAATIVE_FNO,bblock_numbeer = v_BLOOCK_NUUMBEREE_FNO,row_nnumberr = vv_ROW_NUMBEER);dbms_ouutput.put_lline(ROWIDD_TYPEE: |to_cchar(vv_rowiid_typpe);dbms_ouutput.put
37、_lline(OBJECCT_NUMMBER: |tto_chaar(v_OOBJECTT_NUMBBER);dbms_ouutput.put_lline(RELATTIVE_FFNO: |too_charr(v_REELATIVVE_FNOO);dbms_ouutput.put_lline(BLOCKK_NUMBBER: |too_charr(v_BLLOCK_NNUMBERRE_FNOO);dbms_ouutput.put_lline(ROW_NNUMBERR: |to_cchar(vv_ROW_NUMBEER);end;/ROWID_TTYPE: 1OBJECT_NUMBEER: 552
38、738RELATIVVE_FNOO: 7BLOCK_NNUMBERR: 1110ROW_NUMMBER: 0也就是說如果bblob字段段發生壞塊,可能壞塊的block_id為273,但是要查找記錄的rowid的話需要前后跨越一段block_id才有可能找到,例如這里的110。而從obj#,rfile#,block#,row#計算得到理論上的rowid可能不存在。回到黃山壞塊故故障上:SELECT COUNTT(*) FROM EP_PEECC WHHERE TTO_CHAAR(PTIIME,YYYYYMMMDD) 2000911255 ANDD TO_CHARR(PTIMME,YYYYYMMD
39、DD) 200991127;ERROR 位位于第 1 行:ORA-011115: 從從文件 8 讀取塊時出出現 IO 錯誤 (塊塊 # 144618422)ORA-011110: 數數據文件 88: E:ORADDATADDZJCUUSERS002.DBFFORA-270091: sskgfqiio: 無法法進行 I/O 操作OSD-040006: RReadFiile() 失敗,無法法自文件讀取取O/S-Errror: (OS 233) 數據錯錯誤 (循環環冗余檢查)。驗證了這個時間間段區間內的的數據有壞塊塊!Select countt(*) ffrom EEP_PECCC t wwhere
40、 PTIMEETTO_DATTE(2000910226 20:48:577,yyyyymmddd HH224:MI:SS)沒有報錯結論:14611833塊為 2000910226 20:47:577到 2000910266 20:448:57 之間。同時時我也偷懶了了沒有繼續查查找因為連著著壞了好多塊塊。恢復完數據據庫后重傳這這段時間的記記錄就行了!備份時只需把期期間的數據備備份出來就可可以。DELETE from EP_PEECC t wheree PTIMMETTO_DATTE(2000910001 00:00:000,yyyyymmddd HH224:MI:SS)和用戶溝通了一一下,把以
41、前前的過期記錄錄全部刪除后來發現另外一一張表EP_TABLEE導出時也有有壞塊。即將導出指定的的表通過常規規路徑 . 正在導導出表 EP_TAABLEEXP-000056: OORACLEE 錯誤 11115 出出現ORA-011115: 從從文件 8 讀取塊時出出現 IO 錯誤 (塊塊 # 122003388)ORA-270070: sskgfdiisp: 異異步讀取/寫寫入失敗OSD-040016: 查查詢非同步 I/O 請請求發生錯誤誤.O/S-Errror: (OS 233) 數據錯錯誤 (循環環冗余檢查)。ORA-011115: 從從文件 8 讀取塊時出出現 IO 錯誤 (塊塊 #
42、122003388)ORA-270070: sskgfdiisp: 異異步讀取/寫寫入失敗OSD-040016: 查查詢非同步 I/O 請請求發生錯誤誤.O/S-Errror: (OS 233) 數據錯錯誤 (循環環冗余檢查)。導出成功終止,但但出現警告。同理處理。找到壞塊所在記記錄的時間段段后exp時時跳過。后面的恢復處理理就不寫了。特別注意:試過dbms_repaiir,但是ddbms_rrepairr找不到錯誤誤的記錄。試過ALTERR SYSTTEM SEET EVEENTS 102311 tracce namme conntext forevver,leevel 110; 也也不能成
43、功。奇怪了,只能猜猜硬盤壞的太太厲害,產生生了物理壞道道。RMAN 可可以備份包含含損壞數據塊塊的數據文件件,通過設置置 sett maxccorruppt 可以以跳過指定個個數的壞塊來來避免備份失失敗。 RMAN sset maaxcorrrupt ffor daatafille 1 tto 10;在 Oraclle9i中可可以用 RRMAN來執執行塊級的恢恢復,而且恢恢復期間數據據文件可以是是聯機狀 態態。RMANN通過 BBlock Mediaa Recoovery(簡簡稱 BMRR)來執行塊塊級恢復操作作。假設我們們在查 詢一一個 Orracle 表的時候候接收到下面面的錯誤:EERR
44、OR 位于第 1 行:ORRA-015578: OORACLEE 數據塊塊損壞(文件件號 5,塊塊號 977) ORA-011110: 數據文文件 5: E:xxxxx.dbbf那么我們就可以以在 RMMAN中用 BLOCCKRECOOVER 命命令來修復:RMAN BLOCCKRECOOVER DDATAFIILE 5 BLOCKK97; 啟啟動 bllockreecoverr 于 03-9月月 -066 正在啟動動全部恢復目目錄的 rresyncc完成全部 resyync使用通通道 ORRA_DISSK_1通道道 ORAA_DISKK_1: 正在從從數據文件副副本 E:xxxx.bak 恢
45、恢復塊 正在在開始介質的的恢復完成介介質的恢復完完成 bllockreecoverr 于 03-9月月 -066塊恢復 Bloock Meedia RRecoveery (BBMR),塊塊是恢復的最最小單元,通通過塊可以減減少恢復 時時間,而且數數據文件可以以在線。恢復復塊的時候,必必須指定具體體的塊號,如如:RMANN bloockreccoverddatafiile 6 blockk 3;具體體請見 44.7.4 塊媒體恢恢復 Bllock MMedia Recovvery (BBMR)1)指示RMAAN從文件的的最新備份集集或映像副本本中還原與恢恢復一個指定定的數據塊: RMAAN bl
46、lockreecoverr dataafile 7 bloock 5;2)BLOCKKRECOVVER命令可可以接受若干干文件中的一一列數據塊: RMAAN bllockreecoverr dataafile 7 bloock 5,6,7 ddatafiile 9 blockk 21,225;3)從指定備份份集中還原數數據塊 RMAAN bllockreecoverr dataafile 7 bloock 5 from backuupset 1039;4)從使用標記記指定的備份份中還原數據據塊 RMAAN bllockreecoverr dataafile 7 bloock 5 from ta
47、g mmonthlly_whoole;5)使用至少已已生成一周的的備份來還原原和恢復前一一個備份操作作發現受損的的所有數據塊塊: RMAAN bllockreecoverr corrruptioon lisst unttil tiime syysdatee - 7;注意:此處關鍵鍵字UNTIIL并非表示示不完全恢復復!這個關鍵鍵字意味著必必須從特定日日期(序列號號或SCN)之之前生成的備備份中還原數數據塊。下面系統的總結結一下壞塊故故障的處理:數據庫出現壞塊塊現象是指:在Oraccle數據庫庫的一個或多多個數據塊內內出現內容混混亂的現象。由由于正常的數數據塊都有固固定的合法內內容格式,壞壞塊的
48、出現,導導致數據庫進進程無法正常常解析數據塊塊的內容,進進而使數據庫庫進程報錯乃乃至掛起,并并級聯導致整整個數據庫實實例出現異常常。一壞塊的產生生原因壞塊產生的原因因大致有以下下幾種:1.1 硬件問問題Oracle進進程在處理一一個數據塊時時,首先將其其讀入物理內內存空間,在在處理完成后后,再由特定定進程將其寫寫回磁盤;如如果在這個過過程中,出現現內存故障,CCPU計算失失誤,都會導導致內存數據據塊的內容混混亂,最后反反映到寫回磁磁盤的數據塊塊內容有誤。同同樣,如果存存儲子系統出出現異常,數數據塊損壞也也就隨之出現現了。1.2 操作系系統BUG由于Oraclle進程對數數據塊的讀寫寫,都是以操
49、操作系統內核核調用(syystem call)的的方式完成的的,如果操作作系統在內核核調用存在問問題,必然導導致Oraccle進程寫寫入非法的內內容。1.3 操作系系統的I/OO錯誤或緩沖沖問題1.4 內存或或paginng問題Oracle軟軟件BUGOracle軟軟件特定版本本上,可能出出現導致數據據塊的內容出出現異常BUUG。1.5 非Orracle進進程擾亂Orracle共共享內存區域域如上文所述,在在當數據塊的的內容被讀入入主機的物理理內存時,如如果其他非OOraclee進程,對OOraclee使用的共享享內存區域形形成了擾亂,最最終導致寫回回磁盤的數據據塊內容混亂亂。1.6 異常關關
50、機,掉電,終終止服務異常關機,掉電電,終止服務務使進程異常常終止,而破破壞數據塊的的完整性,導導致壞塊產生生。注:這也是為什什么突然斷電電會導致數據據庫無法啟動動由上可見,壞塊塊的形成原因因復雜。當出出現壞塊時,為為了找到確切切的原因,需需要大量的分分析時間和排排查操作,甚甚至需要多次次重現才能找找出根本原因因。但當故障障發生在生產產系統上,我我們為了減少少停機時間,會會盡快實施應應急權變措施施以保證系統統的可用性,這這樣就破壞了了故障現場,對對根本原因的的分析因而也也更加困難了了。二壞塊的預防防壞塊問題破壞性性大,但并非非不可預防。2.1 在Meetalinnk.oraacle.ccom網站
51、,OOraclee定期發布基基于特定軟件件版本的“已知問題(knownn issuues)說明明”。對于可能能導致壞塊的的Oraclle軟件BUUG,在Orracle公公司內部,是是作為高嚴重重級別的問題題進行處理,在在“已知問題(knownn issuues)說明明”中,這些BBUG以嚴重重(Notiicablee)問題標出出(標記為*或+),部部分問題,OOraclee還會發布警警告(Aleert)通告告。在文檔中中,Oraccle會提供供相應的補丁丁或應對措施施。2.2 Oraacle提供供備份恢復工工具Reccoveryy Manaager,提提供了掃描文文件檢查壞塊塊的功能。在Rec
52、oveery Maanagerr界面中,使使用:RMAN BBACKUPP CHECCK LOGGICAL VALIDDATE DDATAFIILE n ;可以檢查數據文文件是否包含含壞塊,同時時并不產生實實際的備份輸輸出。2.3 Dbvv工具檢查注:因為dbvv要求fille后面跟的的必須是一個個文件擴展名名,所以如果果用裸設備存存儲的,就必必須使用lnn鏈接裸設備備到一個文件件,然后再用用dbv對這這個鏈接文件件進行檢查。ANALYZEE TABLLE tabblenamme VALLIDATEE STRUUCTUREE CASCCADE它執行壞塊的檢檢查,但是不不會標記壞塊塊為corrr
53、upt,檢檢測的結果保保存在USEER_DUMMP_DESST目錄下的的用戶traace文件中中。2.4 利用eexp工具導導出整個數據據庫可以檢測測壞塊對以下情況的壞壞塊是檢測不不出來的:HWM以上的壞壞塊是不會發發現的索引中存在的壞壞塊是不會發發現的數據字典中的壞壞塊是不會發發現的結合數據庫性能能綜合考慮ddb_bloock_chhecksuum和db_bllockchheckinng參數。當我們使用Reecoverry Mannager進進行實際的數數據庫備份時時,同時也就就進行了壞塊塊檢查。但要要注意的是,在在線使用Reecoverry Mannager掃掃描壞塊和備備份時,需要要數據
54、庫運行行在歸檔模式式(archhive llog),否否則只能在數數據庫未打開開的情況下進進行。對于操操作系統問題題和硬件故障障,則需要相相應廠商的配配合支持。同同時,避免在在數據庫主機機運行其他用用戶進程,避避免異常停機機,也會減少少壞塊發生的的幾率。三壞塊故障的的識別遇到壞塊問題時時,數據庫的的異常表現通通常有:報告ORA-001578錯錯誤。報告Ora-11110錯誤誤。報告ORA-000600錯錯誤,其中,第第一個參數為為2000-8000,CCache layerr 20000 40000,Trannsactiion laayer 44000 60000,Dataa layeer 6
55、0000 - 88000。Trace文件件中出現Coorruptt blocck dbaa: 0 x1160c59958 . foundd。分析對象失敗。后臺進程,如DDBWR,LLGWR出現現長時間異常常等待,如“LGWR wait for rredo ccopy”。四Oraclle數據塊損損壞恢復總結結可以用DBV 命令來檢測測是否有壞塊塊:在恢復前使用DDBV命令檢檢查數據文件件是否存在壞壞塊dbv fille=d:oraclleoraadatamydbRONLYY.DBF blockksize=8192查看數據壞塊所所在數據文件件號及塊號可可以對表進行行一次全表掃掃描,如:select
56、 countt(*) ffrom ttablenname;關于DBV 命命令的具體使使用,請參考考blog:http:/ttianleesoftwware/aarchivve/20009/12/16/500151644.aspxx4.1 沒有備備份的情況下下:4.1.1、使使用exp/imp恢復復在這種情況下肯肯定會造成數數據的丟失,在在這種情況下下應采取將數數據導出然后后重建表再進進行導入的方方法,來盡量量恢復損壞數數據塊中的數數據,但是在在有壞塊的情情況下是不允允許導出的,如如下命令:Exp tesst/tesst fille=t.ddmp taables=t;導出命令在執行行中會報ORR
57、A-015578錯誤,在在這錯誤提示示中會提示那那個文件號的的文件以及這這個文件中的的哪個塊被損損壞,如:OORA015788:ORACCLE 數據據塊損壞(文文件號 4,塊塊號 35)針對以上的提示示首先查詢那那些對象被損損壞:Select tableespacee_namee,segmment_ttype,oowner,segmeent_naame Frrom dbba_exttents Wheree filee_id=44 and 35 beetweenn blocck_id and bblock_id+bllocks-1;如果被損壞的塊塊是索引,通通常可以通過過索引重建來來解決,如果果
58、損壞的是數數據(seggment_type為為tablee),那么通通過設置如下下內部事件使使得Exp操操作跳過壞塊塊。Alter ssessioon sett evennts=110231 tracee namee conttext fforeveer,levvel 100;然后重新執行導導出命令,導導出相關的表表,然后執行行Drop Tablee命令刪除相相關表,之后后重建表最后后導入數據。4.1.2、使使用DBMSS_REPAAIR恢復用DBMS_RREPAIRR當然也會丟丟失數據。這這里不做詳細細的介紹,有有興趣的可以以查看oraacle的在在線文檔4.2 使用RRman進行行恢復:首
59、先要存在Rmman的最新新備份集,然然后執行如下下命令:RMANbaackup validdate ddatafiile 4;檢查4號數據文文件是否存在在壞塊執行查詢:select * froom v$ddatabaase_bllock_ccorrupption wheree filee#=4;如果4號文件存存在壞塊的話話,那么將在在結果集中有有所顯示,會會顯示損壞的的塊號,根據據顯示結果執執行如下命令令進行恢復:RMANbllockreecoverr dataafile 4 bloock 355 fromm backkupsett;該命令執行后即即可恢復壞塊塊,并且不會會造成數據丟丟失,但是
60、要要求數據庫必必須要運行在在歸檔模式下下,否則RMMAN無法發發揮作用,而而且通過RMMAN做過最最新的數據庫庫備份4.3 使用bbbed恢復復使用bbed恢恢復時必須有有數據文件的的拷貝。bbed就是英英文blocck broowse eedit的縮縮寫,用來直直接查看和修修改數據文件件數據的一個個工具。BBED在wiindowss 8i中在在$ORACCLE_HOOME/biin下可以找找到,9i中中似乎未隨軟軟件發布,故故在winddows沒有有這個工具,llinux下下需要編譯,然后把$ORACLE_HOME/rdbms/lib加到環境變量的PATH里面,就可以直接在命令中bbed了。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年陜西省西安交大附中中考物理三模試卷(含解析)
- 雞澤墻改梁施工方案
- 看臺土方開挖施工方案
- 酒店商鋪招商方案范本
- 鐵路旅客人身損害違約責任課件
- 中華兒童銘課件
- 大學生職業規劃大賽《輪機工程專業》生涯發展展示
- 臨時物流服務合同范本
- 個人職業防護課件
- 版舊房交易合同樣本
- 2025年國家招商局集團有限公司招聘筆試參考題庫含答案解析
- 中國加入世貿組織23周年
- 《無人機安全操作能力評估系統技術規范》
- 變壓器檢修規程范文(2篇)
- 強夯檢測方案
- 2024危重癥患兒管飼喂養護理-中華護理學會團體標準課件
- 生成式人工智能技術知識產權歸屬
- 我們愛運動(課件)冀美版美術二年級下冊
- 《國際物流與供應鏈管理》課程綜述論文:跨境電商供應鏈管理研究的文獻綜述4100字
- 數控車削編程與加工 課件 3.5軸類零件綜合
- 《三福百貨營銷環境PEST、SWOT研究及其營銷策略研究》11000字(論文)
評論
0/150
提交評論