gdufo

           

          數(shù)據(jù)文件出現(xiàn)壞快的解決之三(做個小試驗)

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

          試驗的目的:
          1.查找含壞塊的數(shù)據(jù)的所有的rowid,從而得到損壞的數(shù)據(jù)量
          2.查找損壞表的現(xiàn)在可用的數(shù)據(jù)量
          3.根據(jù)1和2得到該表的本來的總的數(shù)據(jù)量

          試驗步驟:
          1)參照 數(shù)據(jù)文件出現(xiàn)壞塊時之五(如何利用dbms_repair來標(biāo)記和跳過壞塊)的第一步和第二部
            建了表空間block,用戶test1107,表test,初始化了數(shù)據(jù)4512行,模擬了數(shù)據(jù)壞塊,
            并用dbv得到所有的壞塊ID(34~52,68~87)
           
          2)參照 數(shù)據(jù)文件出現(xiàn)壞快時之三(如何查找壞塊所含的數(shù)據(jù)表名稱和數(shù)據(jù)的rowid)的步驟,查找出所有的壞塊包含的rowid
            select /*+ index(test1107, i_test)*/ rowid
            from test1107.test
            where  dbms_rowid.rowid_to_absolute_fno(rowid,'TEST1107','TEST')=13
            and  (dbms_rowid.rowid_block_number(rowid) between 34 and 52 or
            dbms_rowid.rowid_block_number(rowid) between 68 and 87);
           
            結(jié)果返回了1598行壞記錄
           
          3)參照 數(shù)據(jù)文件出現(xiàn)壞塊時之六(設(shè)置內(nèi)部事件使exp跳過壞塊)
              先exp報錯,后來設(shè)置了events事件,然后exp出來,顯示有 2914行,抓屏幕如下:
             
              C:\Documents and Settings\liguohua>exp test1107/aaaa tables=test file=d:\work\temp\test.dmp
            即將導(dǎo)出指定的表通過常規(guī)路徑 ...
            . . 正在導(dǎo)出表                            TEST
            EXP-00056: 遇到 ORACLE 錯誤 1578
            ORA-01578: ORACLE 數(shù)據(jù)塊損壞(文件號13,塊號34)
            ORA-01110: 數(shù)據(jù)文件 13: 'D:\ORACLE\ORADATA\BLOCK.DBF'
            導(dǎo)出成功終止,但出現(xiàn)警告。

              C:\Documents and Settings\liguohua>alter system set events='10231 trace name context forever,level 10';    
             
              C:\Documents and Settings\liguohua>exp test1107/aaaa tables=test file=d:\work\temp\test.dmp
              即將導(dǎo)出指定的表通過常規(guī)路徑 ...
               . . 正在導(dǎo)出表                            TEST       2914 行被導(dǎo)出
              在沒有警告的情況下成功終止導(dǎo)出。
             
            結(jié)果表示有2914行記錄可用
            另外一種方法,其實可以用

                 select count(1) from test1107.test where rowid  not in
                  (
                    select /*+ index(test1107, i_test)*/ rowid
                     from test1107.test
                     where  dbms_rowid.rowid_to_absolute_fno(rowid,'TEST1107','TEST')=13
                     and  (dbms_rowid.rowid_block_number(rowid) between 34 and 52 or
                     dbms_rowid.rowid_block_number(rowid) between 68 and 87)
                   );

             來查詢可用的記錄數(shù),這樣比較簡單
          4)1598 + 2914 = 4512,正好和原表總記錄數(shù)吻合!

          5)恢復(fù)events參數(shù)
            alter system set events='10231 trace name context off'; 

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

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 漳州市| 京山县| 巫山县| 绿春县| 花垣县| 兴和县| 陆川县| 白城市| 虹口区| 日照市| 册亨县| 贡觉县| 德令哈市| 阿荣旗| 尚义县| 隆尧县| 南汇区| 乌拉特中旗| 安溪县| 万全县| 华池县| 佛坪县| 佛学| 贵定县| 台州市| 张掖市| 中牟县| 肥东县| 富源县| 武隆县| 余姚市| 嘉峪关市| 阳江市| 晋中市| 普陀区| 赣榆县| 常宁市| 通城县| 竹溪县| 贵溪市| 依安县|