Oracle資料庫壞塊典型案例擴充
資料庫壞塊典型案例擴充
1 、 物理壞塊
物理壞塊指的是塊格式本身已經損壞,塊內的資料沒有任何意義。物理壞塊一般是由於記憶體問題、 OS 問題、 I/O 子系統問題或硬體引起的,邏輯壞塊一般是由 Oracle Bug 等原因引起的。物理塊損壞也可以稱為介質塊損壞( Media Corrupt Block )。物理壞塊可以分為以下幾類:
(1) 壞頭( Bad header ):資料塊頭( Cache Header )被無效值損壞
(2) 塊有裂縫 / 不完整( Fractured/Incompleted Block ):資料塊頭和塊尾不匹配,其 trace 檔案內容如下所示:
Corrupt block relative dba: 0x0380e573 (file 14, block 58739)
Fractured block found during buffer read
Data in bad block -
type: 6 format: 2 rdba: 0x0380e573
last change scn: 0x0288.8e5a2f78 seq: 0x1 flg: 0x04
consistency value in tail: 0x00780601
check value in block header: 0x8739, computed block checksum: 0x2f00
spare1: 0x0, spare2: 0x0, spare3: 0x0
***
Reread of rdba: 0x0380e573 (file 14, block 58739) found same corrupted data
(3) 塊的塊校驗和( checksum )無效,其 trace 內容如下所示:
Corrupt block relative dba: 0x0380a58f (file 14, block 42383)
Bad check value found during buffer read
Data in bad block -
type: 6 format: 2 rdba: 0x0380a58f
last change scn: 0x0288.7784c5ee seq: 0x1 flg: 0x06
consistency value in tail: 0xc5ee0601
check value in block header: 0x68a7, computed block checksum: 0x2f00
spare1: 0x0, spare2: 0x0, spare3: 0x0
***
Reread of rdba: 0x0380a58f (file 14, block 42383) found same corrupted data
(4) 塊的位置錯誤( Block Misplaced ):檢驗和正確,但是正在被讀取的資料塊的內容屬於另外一個塊
Corrupt block relative dba: 0x0d805a89 (file 54, block 23177)
Bad header found during buffer read
Data in bad block -
type: 6 format: 2 rdba: 0x0d805b08 ----> Block is different than expected 0x0d805a89
last change scn: 0x0692.86dc08e3 seq: 0x1 flg: 0x04
consistency value in tail: 0x08e30601
check value in block header: 0x2a6e, computed block checksum: 0x0
spare1: 0x0, spare2: 0x0, spare3: 0x0
***
(5) 歸零的塊( Zeroed out blocks )( Note 1545366.1 )
Corrupt block relative dba: <rdba> (file <file#>, block <block#>)
Completely zero block found during buffer read
Reading datafile 'datafile' for corruption at rdba: <rdba> (file <file#>, block <block#>)
Reread (file <file#>, block <block#>) found same corrupt data (no logical check)
2、 邏輯壞塊
邏輯壞塊指的是塊內的資料在邏輯上存在問題,比如說索引塊的索引值沒有按順序排列導致的邏輯壞塊。邏輯壞塊通常包含一個正確的 checksum 和結構,但是塊頭以下的部分(塊的內容)被損壞,可能引起不同的 ORA-600 錯誤。邏輯損壞詳細的損壞資訊通常不列印在 alert 告警日誌中,但是 DBV 將報告邏輯損壞的塊。
3、 壞塊校驗
3.1 DBVERIFY ( D BV )
dbv 工具不能驗證聯機 Redo 日誌、歸檔日誌、控制檔案和 R MAN 備份集,只能用於資料檔案的塊驗證。 D BV 有兩種命令列介面,一是驗證資料檔案的資料庫,二是驗證段(在驗證段時需要查詢的檢視包括: S YS.SYS_DBA_SEG 和 S YS.SYS_USER_SEGS )。
DBV 要求 file 引數後面跟的必須是一個包含副檔名的檔案,所以如果資料庫使用裸裝置作為儲存方式,那麼就必須使用 ln 命令連線裸裝置一個帶副檔名的檔案,然後使用 D BV 工具透過對連結檔案的驗證實現對裸裝置資料檔案的驗證。如果是驗證儲存在 A SM 中的資料檔案,那麼需要指定使用者名稱和密碼,如果不指定使用者名稱和密碼,那麼將收到 D BV-00008:USERID must bu SPECIFIED FOR OSM files 的報錯。
( 1 ) F S 中: dbv file= /oradata/test01.dbf blocksize=8192
( 2 ) A SM 中: dbv file=+DATA/orcl/datafile/user.dbf userid=sys/mc
( 3 )驗證段,其中 segment _id 引數格式為:表空間 I D ,段頭所在資料檔案號,段頭資料塊號:
select tablespace_id,header_file,header_block from
sys.sys_dba_segs where owner='MC' and segment_name='TAB1'
dbv userid=sys/mc segment_id=36.12.130
3.2 ANALYZE
A nalyze 命令透過分析資料庫物件,為最佳化器收集資料庫物件的統計資訊,以便最佳化器生成準確的執行計劃。同時,他也能檢查某個表或索引是否存在損壞的情況。 A NALYZE 執行壞塊檢查,但是不會標記壞塊為 C ORRUPT ,檢測結果儲存在 U SER_DUMP _ DEST 目錄下的使用者 T RACE 檔案中。
ANALYZE TABLE/INDEX XXX VALIDATE STRUCTURE;
3.3 EXP
對於包含壞塊的表執行匯出操作,會收到相關的錯誤資訊( O RA-01578 )。 E xp 壞塊檢查不會發現的壞塊型別包括: H WM (高水位線)以上的壞塊、索引中存在的壞塊、資料字典中存在的壞塊。對於這種情況,在非歸檔模式無法透過塊恢復修復塊的情況下,有如下兩種處理方法:
方法 1 :啟用 1 0231 事件。透過設定 1 0231 診斷事件可以在匯出的時候讓 O racle 忽略表損壞的資料庫, 1 0231 是 Oracle 的內部診斷事件,設定在全表掃描時跳過壞塊的資料塊,只匯出包含正確塊的資料,只匯出包含正確塊的資料,之後把表刪除,再把匯出的表資料匯入新表,從而修復該表。
-- ( 1 )啟用 1 0231 診斷事件
S QL> alter system set events='10231 trace name context forever,level 10';
- - ( 2 )禁用 1 0231 診斷事件
S QL> alter system set events='10231 trace name context forever,level 0';
方法 2 :使用 D BMS_REPAIR 包標記損壞的塊。可以使用 D BMS_REPAIR 包標記損壞的資料庫物件,這樣 Oracle 在對損壞的物件執行全表掃描的時候會跳過損壞的塊。
SQL> exec dbms_repair.skip_corrupt_blocks(user,'table name ');
3.4 RMAN
RMAN 可以檢查塊是否被損壞,如果備份資料資料庫中包含有壞塊,那麼將會收到錯誤。
RMAN> backup validate datafile 6;
RMAN> backup validate database;
RMAN> backup validate check logical database archivelog all;
4、 查詢壞塊對應的物件
-- 確定壞塊對應的物件
SELECT TABLESPACE_NAME,
SEGMENT_TYPE,
OWNER,
SEGMENT_NAME,
PARTITION_NAME
FROM DBA_EXTENTS
WHERE FILE_ID = &FILE_ID
AND &BLOCK_ID BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1;
SEGMENT_TYPE OWNER SEGMENT_NAME
------------------ ----------------- ------------------------------------
INDEX LC1019999 PK_ZJTEMPMXCXHJ19291
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30310891/viewspace-2922208/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料庫壞塊典型案例分析Oracle資料庫
- 學習這篇Oracle資料庫檔案壞塊損壞的恢復方法,擴充你的知識面Oracle資料庫
- 【資料庫資料恢復】Oracle資料庫檔案出現壞塊報錯的資料恢復案例資料庫資料恢復Oracle
- 一次ORACLE資料庫undo壞塊處理Oracle資料庫
- Oracle資料庫處理壞塊問題常用命令Oracle資料庫
- 如何處理Oracle資料庫中的壞塊問題(轉)Oracle資料庫
- RMAN備份恢復典型案例——資料檔案存在壞快
- Oracle優化案例-擴充套件統計資訊(十四)Oracle優化套件
- oracle 普通表空間資料檔案壞塊Oracle
- PHP 資料庫擴充之 PDOPHP資料庫
- oracle壞塊(二)Oracle
- Oracle資料庫出現ORA-19566 LOB壞塊的處理記錄Oracle資料庫
- RMAN備份恢復典型案例——資料庫卡頓資料庫
- 在 Homestead 環境下為 PHP 新增 Oracle 資料庫擴充套件(OCI)PHPOracle資料庫套件
- Oracle壞塊處理Oracle
- 伺服器Oracle資料庫損壞修復伺服器Oracle資料庫
- Laravel MongoDB 資料庫查詢擴充外掛 擴充原始 Laravel 類LaravelMongoDB資料庫
- 【LINUX】Oracle資料庫 linux磁碟頭資料損壞修復LinuxOracle資料庫
- 【資料庫資料恢復】MongoDB資料庫檔案損壞的資料恢復案例資料庫資料恢復MongoDB
- ORACLE 擴充套件Oracle套件
- 運維實戰:Linux系統擴充套件oracle資料庫所在的分割槽運維Linux套件Oracle資料庫
- Oracle資料庫 ASM磁碟線上擴容Oracle資料庫ASM
- 案例:DG主庫未設定force logging導致備庫壞塊
- GBASE觀察:擴充套件分析型資料庫套件資料庫
- 【資料庫資料恢復】Oracle資料庫誤truncate table的資料恢復案例資料庫資料恢復Oracle
- Oracle分散式事務典型案例處理Oracle分散式
- PHP的SPL擴充套件庫(一)資料結構PHP套件資料結構
- Oracle案例11——Oracle表空間資料庫檔案收縮Oracle資料庫
- 一個簡單易用的資料庫壞塊處理方案資料庫
- Oracle資料庫不同損壞級別的恢復詳解Oracle資料庫
- 【資料庫資料恢復】ASM磁碟組掉線的Oracle資料庫資料恢復案例資料庫資料恢復ASMOracle
- SpringCloudGateway資料庫儲存路由資訊的擴充套件方案SpringGCCloudGateway資料庫路由套件
- Oracle資料塊格式Oracle
- 使用Kotlin擴充套件函式擴充套件Spring Data案例Kotlin套件函式Spring
- 非常實用的Oracle資料庫資料恢復方法案例Oracle資料庫資料恢復
- Oracle日常問題-壞塊修復Oracle
- truncate操作消除ORACLE SEG壞塊解析Oracle
- 使用nub恢復資料庫的知識擴充套件資料庫套件