gdufo

           

          數據文件出現壞快的解決之二(設置內部事件使exp跳過壞塊)

          http://blog.chinaunix.net/u1/50863/showart_400575.html

          和數據文件出現壞塊時之五中提到的前幾步一樣,先模擬出壞塊,然后用dbv檢查,此時,不用dbms_repair,而用下面的方法:

           

          1.先exp該表試驗一下

          在這種情況下,如果有備份,需要從備份中恢復
          如果沒有備份,那么壞塊部分的數據肯定要丟失了

          在這個時候導出是不允許的:

          E:\>exp eygle/eygle file=t.dmp tables=t

          Export: Release 9.2.0.4.0 - Production on 星期一 3月 8 20:54:15 2004

          Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


          連接到: Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
          With the Partitioning, OLAP and Oracle Data Mining options
          JServer Release 9.2.0.4.0 - Production
          已導出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

          即將導出指定的表通過常規路徑 ...
          . . 正在導出表 T
          EXP-00056: 遇到 ORACLE 錯誤 1578
          ORA-01578: ORACLE 數據塊損壞(文件號4,塊號35)
          ORA-01110: 數據文件 4: 'E:\ORACLE\ORADATA\EYGLE\BLOCK.DBF'
          導出成功終止,但出現警告。

           

          2.當然,對于不同的情況需要區別對待 ,如果損失不是數據而是重要的oracle內部信息,則不能用set event
          首先你需要檢查損壞的對象,使用以下SQL:

           

          --------------------------------------------------------------------------------


          SQL> SELECT tablespace_name, segment_type, owner, segment_name

            2            FROM dba_extents

            3           WHERE file_id = 4

            4             and 35 between block_id AND block_id + blocks - 1

            5     ;

           

          TABLESPACE_NAME                SEGMENT_TYPE       OWNER

          ------------------------------ ------------------ -------------------------

          SEGMENT_NAME

          ---------------------------------------------------------------------------

          BLOCK                          TABLE              'EYGLE'

          'T'

          --------------------------------------------------------------------------------

           

          3.如果損失的是數據,ok,可以設置內部事件,使exp跳過這些損壞的block

          10231事件指定數據庫在進行全表掃描時跳過損壞的塊

          ALTER SYSTEM SET EVENTS='10231 trace name context forever,level 10' ;

          SQL> ALTER SYSTEM SET EVENTS='10231 trace name context forever,level 10' ;

          系統已更改。

          然后我們可以導出未損壞的數據


          SQL> host
          Microsoft Windows XP [版本 5.1.2600]
          (C) 版權所有 1985-2001 Microsoft Corp.

          E:\

          E:\>exp eygle/eygle file=t.dmp tables=t

          Export: Release 9.2.0.4.0 - Production on 星期一 3月 8 20:57:13 2004

          Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


          連接到: Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
          With the Partitioning, OLAP and Oracle Data Mining options
          JServer Release 9.2.0.4.0 - Production
          已導出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

          即將導出指定的表通過常規路徑 ...
          . . 正在導出表 T 8036 行被導出
          在沒有警告的情況下成功終止導出。

          這時候數據成功導出.
          然后我們可以drop table,recreate,然后導入數據

          本例中
          我們損失了

          8192 - 8036 = 156 行數據


          4.重建表,再導入

          SQL> connect eygle/eygle
          已連接。
          SQL> drop table t;

          表已丟棄。

          SQL> host
          Microsoft Windows XP [版本 5.1.2600]
          (C) 版權所有 1985-2001 Microsoft Corp.

          E:\Oracle\ora92\bin>cd \

          E:\>imp eygle/eygle file=t.dmp tables=t

          Import: Release 9.2.0.4.0 - Production on 星期一 3月 8 21:12:38 2004

          Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


          連接到: Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
          With the Partitioning, OLAP and Oracle Data Mining options
          JServer Release 9.2.0.4.0 - Production

          經由常規路徑導出由EXPORT:V09.02.00創建的文件
          已經完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的導入
          . 正在將EYGLE的對象導入到 EYGLE
          . . 正在導入表 "T" 8036行被導入
          成功終止導入,但出現警告。

          E:\>exit

          SQL> select count(*) from t;

          COUNT(*)
          ----------
          8036

          完成數據恢復

           

          最后如果要取消events設置,做以下操作:

          如果你在初始化參數中設置的
          注釋之

          如果在命令行設置的
          alter system set events='10231 trace name context off';

          posted on 2009-11-25 22:29 gdufo 閱讀(1133) 評論(0)  編輯  收藏 所屬分類: Database (oracle, sqlser,MYSQL)

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 泗洪县| 苍溪县| 松原市| 陇南市| 大关县| 承德市| 宜黄县| 湖南省| 江西省| 靖宇县| 香港| 长兴县| 郓城县| 凤阳县| 沿河| 商水县| 柳河县| 秭归县| 靖江市| 昌宁县| 安丘市| 柞水县| 阿尔山市| 增城市| 罗江县| 原平市| 西乌珠穆沁旗| 台江县| 中阳县| 孟州市| 慈利县| 通江县| 盐源县| 和田县| 广河县| 沅江市| 简阳市| 南城县| 伊金霍洛旗| 徐汇区| 黔南|