中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么修復NOLOGGING操作引起的ORA-1578的壞塊問題

發布時間:2021-11-11 13:45:59 來源:億速云 閱讀:296 作者:iii 欄目:關系型數據庫

本篇內容介紹了“怎么修復NOLOGGING操作引起的ORA-1578的壞塊問題”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

適用于:

Oracle Database - Enterprise Edition - 版本 7.1.6.0 到 12.2.0.1 [發行版 7.1.6 到 12.2]本文檔所含信息適用于所有平臺

用途

重要:
如果只是錯誤ORA-1578,而沒有伴隨ORA-26040,那么這個壞塊是其他的原因,可以通過RMAN Block Media Recovery修復。參考1578.1

適用范圍

本文適用于用戶和 Oracle Support。

詳細信息

如果數據段定義為 NOLOGGING 屬性,當 NOLOGGING/UNRECOVERABLE 操作修改該數據段或者使用datapump import 參數 disable_archive_logging:y,聯機重做日志只記錄很少的日志信息,如果之后執行 RECOVERY 操作的話,會導致這些塊無效。

如果這些聯機重做日志/歸檔日志被用來恢復數據文件,那么 Oracle 會將對應的數據塊標志為無效,而且下一次訪問這些數據塊時,會報 ORA-1578 和 ORA-26040錯誤。

例如:

SQL> select * from test_nologging;

ORA-01578: ORACLE data block corrupted (file # 11, block # 84)
ORA-01110: data file 4: '/oradata/users.dbf'
ORA-26040: Data block was loaded using the NOLOGGING option


以下數據字典視圖中的 LOGGING 列記錄了 NOLOGGING 屬性:

DBA_TABLES, DBA_INDEXES, DBA_LOBS, DBA_TAB_PARTITIONS, DBA_LOB_PARTITIONS, DBA_TAB_SUBPARTITIONS, 等等。

LOGGING='NO' 表示 NOLOGGING。


接下來,這些數據塊會被標志為 Soft Corrupt,當下一次訪問該數據塊時,會報 ORA-1578 和 ORA-26040錯誤。

DATAPUMP 參數 DISABLE_ARCHIVE_LOGGING

DATAPUMP impdp 參數 DISABLE_ARCHIVE_LOGGING:Y 在import時禁止 LOGGING 定義,會產生NOLOGGING操作; 如果相應的datafile被restored 和 recovered, 那么接下來的語句會報錯 ORA-1578 和 ORA-26040.

"如果database是 FORCE LOGGING 模式, 那么DISABLE_ARCHIVE_LOGGING 選項不會關閉logging.

import時使用這個參數的例子:

impdp scott/tiger directory=DATA_PUMP_DIR dumpfile=dp transform=disable_archive_logging:y

RDBMS版本
變化
10.2.0.4+DBverify報告NOLOGGING block錯誤信息 "DBV-00201: Block, DBA <rdba>, marked corrupt for invalid redo application"
10.2.0.5, 10.2.0.1+RMAN validate命令檢查NOLOGGING block,在v$database_block_coruption視圖中記錄corruption_type='NOLOGGING'
11g+引入db_unrecoverable_scn_tracking 參數
11.1.0.6 or 11.1.0.7 or 11.2.0.1

NOARCHIVELOG模式數據庫,對NOLOGGING對象執行了DIRECT PATH操作,并且以后手動恢復數據庫,即使打開了FORCE LOGGING,
也會報ORA-1578 和 ORA-26040。這個約束在11.2.0.2以上版本取消,這個問題在10g不會發生。

12cRMAN validate的結果不在視圖v$database_block_corruption中,而是在視圖v$nonlogged_block
12.2

以下RMAN命令被引入:

RMAN> validate [database / datafile] nonlogged block;

RMAN> recover [database / datafile] nonlogged block; -> 對于 Standby 數據庫

 

 

解決方法


NOLOGGING 操作引起的壞塊是不能修復的,比如"Media Recovery" 或 "RMAN blockrecover"都無法修復這種壞塊。可行的方法是在 NOLOGGING 操作之后立刻備份對應的數據文件。

問題是在執行RMAN DUPLICATE或RESTORE之后產生?

      如果問題是執行RMAN DUPLICATE 或 RESTORE之后 ,那么在源庫打開FORCE LOGGING,然后再重新運行RMAN DUPLICATE 或 RESTORE。

  • alter database force logging;

問題是發生在物理standby庫?

  • 如果錯誤出現在物理 STANDBY 數據庫, 從主庫恢復被影響的數據文件 (只有當主庫沒有這個問題的情況下)。參考文檔Doc ID 958181.1。 在12c中可以使用RMAN選項RECOVER NONLOGGED BLOCK with DATAFILE,TABLESPACE,DATABASE。例如:

  •   

    RMAN> RECOVER DATABASE NONLOGGED BLOCK;

     

  • 為了避免這個問題發生,在主庫強制生產日志:

  • alter database force logging;

如果同一個datafile的數據塊在主庫出現nologging 壞塊,但是備庫沒有,可以通過手動跳過(dbms_repair)壞塊 或者設置event 10231.
主庫出現nologging 壞塊可能是由于主庫執行過備份恢復或者之前是備庫,執行了switchover

識別被影響的Segment

參考  Note 819533.1 和  Note 472231.1 找到壞塊所在的對象:

  • 如果NOLOGGING數據塊位于空閑數據塊(dba_free_space視圖可以查詢到),DBVerify檢查會發現這個問題,報錯DBV-00201
    或者在v$database_block_corruption視圖中顯示.對于這種情況,我們可以等待到這個數據塊被重用時,會自動格式化,或者
    手動強制格式化,參考Doc ID 336133.1

  • 如果是索引,重新創建(drop/create)索引。

  • 如果是,使用 procedure DBMS_REPAIR.SKIP_CORRUPT_BLOCKS 跳過壞塊,請參考 Note 556733.1 獲取包 DBMS_REPAIR 的使用示例。然后考慮是否重建表:

    移動table: alter table &table_name move;

    或者

    保存數據 (export, Create Table as Select, etc) 然后truncate 或 drop/create

           例子:

          

標記表中需要skip的塊:

BEGIN
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (
SCHEMA_NAME => '&schema_name',
OBJECT_NAME => '&table_name',
OBJECT_TYPE => dbms_repair.table_object,
FLAGS => dbms_repair.SKIP_FLAG);
END;
/

確認表的skipping corrupt blocks 是ENABLED:

select SKIP_CORRUPT
from dba_tables
where owner = '&schema_name'
and table_name = '&table_name';

Move這個表:

alter table &table_name move;

OR if decided to save the data:

export (datapump or conventional export)
or
Create Table &newtable as Select * From &nologging_corrupted_table;

 

  • 如果是LOB 參考Note 293515.1。

           如果刪除有壞塊的段之后,這個壞塊就處于空閑狀態,后續可以被分配給其他對象/段,當這個壞塊被分配給一個其他對象/段時,
           這個數據塊被重新格式化。 如果v$database_block_corruption或者是v$nonlogged_block (12c+)視圖中還是顯示為壞塊,那么手動運行rman validate來清除視圖中的信息。

“怎么修復NOLOGGING操作引起的ORA-1578的壞塊問題”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宣武区| 大悟县| 桐柏县| 津南区| 杭锦后旗| 祁门县| 抚远县| 朝阳市| 鲁山县| 葫芦岛市| 海兴县| 治多县| 湘乡市| 青岛市| 玉田县| 长顺县| 攀枝花市| 城口县| 中山市| 尤溪县| 桑日县| 阜平县| 长春市| 白沙| 房山区| 博湖县| 高陵县| 客服| 萨嘎县| 通城县| 金华市| 靖远县| 黑山县| 会东县| 积石山| 曲水县| 上高县| 玉门市| 化德县| 黄石市| 蕉岭县|