Oracle

使用 DBMS_REPAIR.SKIP_CORRUPT_BLOCKS 後禁用 SKIP_CORRUPT

  • December 28, 2017

最近,在生產數據庫中的幾個塊損壞後,我參與了恢復數據的工作。

*免責聲明:*我絕不是一個稱職的 DBA,而是一個有相當多(我猜)經驗的 PL/SQL 開發人員,所以也許我在這裡遺漏了一些非常明顯的東西。對此感到抱歉。

DBMS_REPAIR包提供了SKIP_CORRUPT_BLOCKS幾乎不言自明的過程(允許訪問表,儘管它有損壞的塊)。

使用後,您可以檢查DBA_TABLES.SKIP_CORRUPT列(預設情況下變為ENABLED而不是DISABLED)。

現在塵埃落定,所有數據都已恢復,希望吸取教訓,我似乎無法找到一種方法在不重新創建表的情況下將其切換回來(如果有一天該段中的另一個塊被損壞,我寧願讓查詢失敗,也不願默默地跳過損壞塊中的行)。

有沒有辦法在SKIP_CORRUPT不重新創建表的情況下禁用?

您可以使用相同的過程禁用它。

begin
 dbms_repair.skip_corrupt_blocks
 (
   schema_name => '...',
   object_name => '...',
   object_type => dbms_repair.table_object,
   flags=> dbms_repair.noskip_flag
 );
end;
/

dbms_repair.skip_flag啟用、dbms_repair.noskip_flag禁用此行為。

引用自:https://dba.stackexchange.com/questions/194108