ORACLE資料庫壞塊的處理 (處理無物件壞快的方法)

oracle_ace發表於2009-11-20
資料庫壞塊的情況有很多,這裡主要介紹如何處理不屬於任何資料物件的資料檔案壞塊情況。
有兩種解決辦法

方法1:可以將發生壞塊的資料檔案,其所屬表空間裡的所有資料物件移動到別的表空間。然後將現有的資料檔案刪除並重建。該方法的缺點是很明顯的,對7*24小時執行系統的正常業務處理有很大影響。

方法2:參考資料Metalink: Note#336133.1 How to Format Corrupted Block Not Part of Any Segment

詳細的處理細節如下:
1,首先確認資料庫告警日誌裡的報錯資訊如下:

    Corrupt block relative dba: 0×0ccf26df (file 51, block 992991)
    Fractured block found during backing up datafile
    Data in bad block -
    type: 6 format: 2 rdba: 0×0ccf26df
    last change scn: 0×0428.1d038e69 seq: 0×1 flg: 0×04
    consistency value in tail: 0xa2560601
    check value in block header: 0×7170, computed block checksum: 0×2c3f
    spare1: 0×0, spare2: 0×0, spare3: 0×0
    ***
    Reread of blocknum=992991, file=/dev/rd03lv32_03. found same corrupt data

找出壞塊的位置是51號檔案的第992991個資料塊。

2.利用dba_extents檢視確認該壞塊屬於的資料物件:

    SQL> select * from dba_extents where file_id=51 and &block between block_id and block_id+blocks;
    Enter value for block: 992991
    old 1: select * from dba_extents where file_id=51 and &block between block_id and block_id+blocks
    new 1: select * from dba_extents where file_id=51 and 992991 between block_id and block_id+blocks

    no rows selected

該壞塊不屬於任何的資料物件。

3.檢查該資料檔案的可用空間

    SQL> select tablespace_name,file_id,sum(bytes/1024/1024) Mb from dba_free_space
    2 where file_id=51 group by tablespace_name,file_id;

    TABLESPACE_NAME FILE_ID MB
    ————————– ———- ———-
    DATA100 51 1560

壞塊的表空間上建立一張臨時表,並做如下處理:

    建立一張表:
    create table s (n number, c varchar2(4000)) nologging tablespace DATA100;

    並手工分配給該表以發生壞塊的資料檔案的全部可用空間:
    alter table s allocate extent (DATAFILE ‘/dev/rd03lv32_03′ SIZE 1560M);

    此處1560Mb就是前文中檢查的51號檔案的所有可用空間。
    向該表中插入100行資料:
    BEGIN
    FOR i IN 1..100 LOOP
    INSERT INTO s VALUES(i,’x');
    END LOOP;
    END;
    /

    然後對其進行迴圈插入,直到前文中所述的壞塊被使用。

    BEGIN
    FOR i IN 1..1000000000 LOOP
    INSERT INTO s select * from s;
    END LOOP;
    END;
    /

再次確認無資料壞塊:

再次使用dbv檢查該資料檔案,確認無壞塊。
dbv file=’/dev/rd03lv32_03′ blocksize=8192

刪除操作中建立的表:
DROP TABLE s;

處理完畢。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12361284/viewspace-620151/,如需轉載,請註明出處,否則將追究法律責任。

相關文章