了解ORA-1410邏輯壞塊問題產生的原因以及有效的解決方法是非常重要的。
其中壹個解決方案是:
您可以通過下面的PL/SQL過程將健康數據復制到新表中,問題數據塊中的數據將被跳過。對於可以容忍數據丟失的場景,可以考慮這樣恢復,然後截斷原始表/分區,加載健康數據。有關特定腳本,請參見以下鏈接:
數據恢復可以通過構造ROWID繞過ORA-1578、ORA-8103、ORA-1410等邏輯/物理壞塊,無需備份。
oer ora 1410
01410,00000,"無效的ROWID "
//*原因:
//*動作:
如果在ORA-1410上執行errorstack,通常會看到以下日誌:
OBJD不匹配typ=6,seg.obj=%d,diskobj=%d,dsflg=%d,dsobj=%d,tid=%d,cls=%d
觸發ORA-1410錯誤堆棧調用通常是:kcbgtcr = & gtkcbzib = & gtKcbz_check_OBJD_typ,即在邏輯讀取數據塊時運行kcbz_check_objd_typ函數,檢測到OBJD不壹致的問題。因為seg.obj和diskobj不壹致,所以10g之後的kcbz_check_objd_typ函數負責驗證塊上的objd是否錯配,如果不壹致,就會觸發ORA-1410錯誤。
objd mimatch有幾個主要的可能原因:
1.Write Lost Write,導致相關數據塊不能正常格式化為現有對象,導致數據塊校驗和雖然正確,但對應的數據字典不壹致。磁盤或卷組鏡像同步軟件的不完整復制也可能導致寫入丟失。
如果磁盤上的objd是& ltkcbdsobj,則可能是Oracle出錯或IO層(操作系統緩存、卷管理器等)丟失寫入。
10g版本沒有很好的防寫丟方案。隱藏“_db_lost_write_checking”控制在DBWR寫入數據文件後立即讀取寫入的塊,以便檢測丟失的寫入,但該參數對性能的損失很大,因此不建議設置。
在11g中,引入了參數DB_LOST_WRITE_PROTECT,可以配合Data Guard使用,有效檢測丟失寫入問題。
如果自己處理不了,可以找ASKMACLEAN的專業數據庫修復團隊成員幫妳恢復!