oracle實驗記錄 (恢復,備份-含壞塊數據文件)

恢復壞塊幾種方式及其rman 備份與壞塊

  SQL> select * from v$version;

  BANNER

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

  Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

  PL/SQL Release 10.2.0.1.0 - Production

  CORE 10.2.0.1.0 Production

  TNS for 32-bit Windows: Version 10.2.0.1.0 - Production

  NLSRTL Version 10.2.0.1.0 - Production

  SQL> create tablespace ss datafile 'e:/datafile/ss.dbf' size 1m;

  表空間已創建。

  SQL> conn xh/a831115

  已連接。

  SQL> show user

  USER 爲 "XH"

  SQL> create table ss (a char(2000), b char(2000), c char(2000) ) tablespace ss;

  表已創建。

  SQL> declare

  2 begin

  3 for i in 1..1000 loop

  4 insert into ss values('a','b','c');

  5 commit;

  6 end loop;

  7 end;

  8 /

  declare

  *

  第 1 行出現錯誤:

  ORA-01653: 表 XH.SS 無法通過 8 (在表空間 SS 中) 擴展

  ORA-06512: 在 line 4

  SQL> select count(*) from ss;

  COUNT(*)

  ----------

  110

  RMAN> list backup of database;

  RMAN> backup database;

  啓動 backup 於 27-10月-09

  使用通道 ORA_DISK_1

  完成 Control File and SPFILE Autobackup 於 27-10月-09

  shutdown immediate

  SQL> conn xh/a831115

  已連接。

  ~~~~~~UltraEdit~~破壞

  SQL> select count(*) from ss;

  select count(*) from ss

  *

  第 1 行出現錯誤:

  ORA-01578: ORACLE 數據塊損壞 (文件號 7, 塊號 82)

  ORA-01110: 數據文件 7: 'E:/DATAFILE/SS.DBF'

  看見 出現 壞塊了

  順便使用下

  dbverify工具 檢查數據文件

  C:/>dbv

  DBVERIFY: Release 10.2.0.1.0 - Production on 星期二 10月 27 20:47:36 2009

  Copyright (c) 1982, 2005, Oracle. All rights reserved.

  關鍵字 說明 (默認值)

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

  FILE 要驗證的文件 (無)

  START 起始塊 (文件的第一個塊)

  END 結束塊 (文件的最後一個塊)

  BLOCKSIZE 邏輯塊大小 (8192)

  LOGFILE 輸出日誌 (無)

  FEEDBACK 顯示進度 (0)

  PARFILE 參數文件 (無)

  USERID 用戶名/口令 (無)

  SEGMENT_ID 段 ID (tsn.relfile.block) (無)

  HIGH_SCN 要驗證的最高塊 SCN (無)

  (scn_wrap.scn_base 或 scn)

  工具可使用的參數

  C:/>dbv file=e:/datafile/ss.dbf feedback=100

  DBVERIFY: Release 10.2.0.1.0 - Production on 星期二 10月 27 20:49:28 2009

  Copyright (c) 1982, 2005, Oracle. All rights reserved.

  DBVERIFY - 開始驗證: FILE = e:/datafile/ss.dbf

  頁 82 標記爲損壞

  Corrupt block relative dba: 0x01c00052 (file 7, block 82)

  Bad check value found during dbv:

  Data in bad block:

  type: 6 format: 2 rdba: 0x01c00052

  last change scn: 0x0000.0050f79a seq: 0x2 flg: 0x04

  spare1: 0x0 spare2: 0x0 spare3: 0x0

  consistency value in tail: 0xf79a0602

  check value in block header: 0xdd15

  computed block checksum: 0x207c

  ..(每驗證100個塊出現一個.)

  DBVERIFY - 驗證完成

  檢查的頁總數: 128

  處理的頁總數 (數據): 109

  失敗的頁總數 (數據): 0

  處理的頁總數 (索引): 0

  失敗的頁總數 (索引): 0

  處理的頁總數 (其它): 18

  處理的總頁數 (段) : 0

  失敗的總頁數 (段) : 0

  空的頁總數: 0

  標記爲損壞的總頁數: 1

  流入的頁總數: 0

  最高塊 SCN : 5306362 (0.5306362)

  出現一個壞塊 82

  rman與壞塊

  SQL> col name format a30

  SQL> select name,file# from v$datafile;

  NAME FILE#

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

  F:/ORACLE/PRODUCT/10.2.0/ORADA 1

  TA/XHTEST/SYSTEM01.DBF

  F:/ORACLE/PRODUCT/10.2.0/ORADA 2

  TA/XHTEST/UNDOTBS01.DBF

  F:/ORACLE/PRODUCT/10.2.0/ORADA 3

  TA/XHTEST/SYSAUX01.DBF

 

      F:/ORACLE/PRODUCT/10.2.0/ORADA 4

  TA/XHTEST/USERS01.DBF

  NAME FILE#

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

  F:/ORACLE/PRODUCT/10.2.0/ORADA 5

  TA/XHTEST/EXAMPLE01.DBF

  E:/DATAFILE/TEST.DBF 6

  E:/DATAFILE/SS.DBF 7

  已選擇7行。

  C:/>rman target /

  恢復管理器: Release 10.2.0.1.0 - Production on 星期二 10月 27 20:54:22 2009

  Copyright (c) 1982, 2005, Oracle. All rights reserved.

  連接到目標數據庫: XHTEST (DBID=1778946334)

  RMAN> backup datafile 7

  2> ;

  啓動 backup 於 27-10月-09

  使用目標數據庫控制文件替代恢復目錄

  分配的通道: ORA_DISK_1

  通道 ORA_DISK_1: sid=140 devtype=DISK

  通道 ORA_DISK_1: 啓動全部數據文件備份集

  通道 ORA_DISK_1: 正在指定備份集中的數據文件

  輸入數據文件 fno=00007 name=E:/DATAFILE/SS.DBF

  通道 ORA_DISK_1: 正在啓動段 1 於 27-10月-09

  備份不成功

  SQL> desc v$database_block_corruption;

  名稱 是否爲空? 類型

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

  FILE# NUMBER

  BLOCK# NUMBER

  BLOCKS NUMBER

  CORRUPTION_CHANGE# NUMBER

  CORRUPTION_TYPE VARCHAR2(9)

  SQL> select count(*) from v$database_block_corruption where file#=7;

  COUNT(*)

  ----------

  0

  RMAN> run{set maxcorrupt for datafile 7 to 2;

  2> backup datafile 7;}

  正在執行命令: SET MAX CORRUPT

  啓動 backup 於 27-10月-09

  使用通道 ORA_DISK_1

  通道 ORA_DISK_1: 啓動全部數據文件備份集

  通道 ORA_DISK_1: 正在指定備份集中的數據文件

  輸入數據文件 fno=00007 name=E:/DATAFILE/SS.DBF

  通道 ORA_DISK_1: 正在啓動段 1 於 27-10月-09

  通道 ORA_DISK_1: 已完成段 1 於 27-10月-09

  段句柄=F:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/XHTE ST/BACKUPSET/2009_10_27/

  O1_MF_NNNDF_TAG20091027T220531_5GFZKFVC_.BKP 標記=TAG20091027T220531 註釋=NONE

  通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:01

  完成 backup 於 27-10月-09

  啓動 Control File and SPFILE Autobackup 於 27-10月-09

  段 handle=F:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_ARE A/XHTEST/AUTOBACKUP/2009_10

  _27/O1_MF_S_701388335_5GFZKJ0H_.BKP comment=NONE

  完成 Control File and SPFILE Autobackup 於 27-10月-09

  SQL> select * from v$database_block_corruption where file#=7;

  FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO

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

  7 82 1 0 CHECKSUM

  用copy命令:

  RMAN> run{set maxcorrupt for datafile 7 to 2;

  2> copy datafile 7 to 'd:/tt.dbf';}

  正在執行命令: SET MAX CORRUPT

  啓動 backup 於 27-10月-09

  使用通道 ORA_DISK_1

  通道 ORA_DISK_1: 啓動數據文件副本

  輸入數據文件 fno=00007 name=E:/DATAFILE/SS.DBF

  輸出文件名 = D:/TT.DBF 標記 = TAG20091027T221051 recid = 75 時間戳 = 701388651

  通道 ORA_DISK_1: 數據文件複製完畢, 經過時間: 00:00:01

  完成 backup 於 27-10月-09 啓動 Control File and SPFILE Autobackup 於 27-10月-09

  段 handle=F:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_ARE A/XHTEST/AUTOBACKUP/2009_10

  _27/O1_MF_S_701388652_5GFZVFPY_.BKP comment=NONE

  完成 Control File and SPFILE Autobackup 於 27-10月-09

  SQL> select file#,blocks from v$copy_corruption where file#=7;

  FILE# BLOCKS

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

  7 1

  關於解決壞塊

  rman解決

  RMAN> blockrecover device type disk datafile 5 block 82;

  啓動 blockrecover 於 27-10月-09

  釋放的通道: ORA_DISK_1

  分配的通道: ORA_DISK_1

  通道 ORA_DISK_1: sid=140 devtype=DISK

  正在開始介質的恢復

  介質恢復完成, 用時: 00:00:01

  完成 blockrecover 於 27-10月-09

  RMAN> blockrecover device type disk datafile 7 block 82;

  啓動 blockrecover 於 27-10月-09

  釋放的通道: ORA_DISK_1

  分配的通道: ORA_DISK_1

 

      通道 ORA_DISK_1: sid=140 devtype=DISK

  通道 ORA_DISK_1: 正在從數據文件副本 D:/TT.DBF 復原塊

  故障轉移到上一個備份

  通道 ORA_DISK_1: 正在恢復塊

  通道 ORA_DISK_1: 正在指定要從備份集恢復的塊

  正在恢復數據文件 00007 的塊

  通道 ORA_DISK_1: 正在讀取備份段 F:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/XHT

  EST/BACKUPSET/2009_10_27/O1_MF_NNNDF_TAG20091027T2 20531_5GFZKFVC_.BKP

  通道 ORA_DISK_1: 已從備份段 1 恢復塊

  段句柄 = F:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/XHTES T/BACKUPSET/2009_10_2

  7/O1_MF_NNNDF_TAG20091027T220531_5GFZKFVC_.BKP 標記 = TAG20091027T220531

  通道 ORA_DISK_1: 塊恢復完成, 用時: 00:00:02

  故障轉移到上一個備份

  通道 ORA_DISK_1: 正在恢復塊

  通道 ORA_DISK_1: 正在指定要從備份集恢復的塊

  正在恢復數據文件 00007 的塊

  通道 ORA_DISK_1: 正在讀取備份段 F:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/XHT

  EST/BACKUPSET/2009_10_27/O1_MF_NNNDF_TAG20091027T1 72314_5GFH04WS_.BKP

  通道 ORA_DISK_1: 已從備份段 1 恢復塊

  段句柄 = F:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/XHTES T/BACKUPSET/2009_10_2

  7/O1_MF_NNNDF_TAG20091027T172314_5GFH04WS_.BKP 標記 = TAG20091027T172314

  通道 ORA_DISK_1: 塊恢復完成, 用時: 00:00:01

  正在開始介質的恢復

  介質恢復完成, 用時: 00:00:07

  完成 blockrecover 於 27-10月-09

  RMAN>

  SQL> conn xh/a831115

  已連接。

  SQL> select count(*) from ss;

  COUNT(*)

  ---------- 恢復完成後可以查詢

  110

  dbms_repair 解決:可以檢測壞塊 ,修復壞塊(跳過壞塊,丟數據)

  再次製造壞塊

  SQL> conn xh/a831115

  已連接。

  SQL> select count(*) from ss;

  select count(*) from ss

  *

  第 1 行出現錯誤:

  ORA-01578: ORACLE 數據塊損壞 (文件號 7, 塊號 84)

  ORA-01110: 數據文件 7: 'E:/DATAFILE/SS.DBF'

  SQL> conn / as sysdba

  已連接。

  SQL> desc sys.dbms_repair

  PROCEDURE ADMIN_TABLES

  參數名稱 類型 輸入/輸出默認值?

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

  TABLE_NAME VARCHAR2 IN DEFAULT

  TABLE_TYPE BINARY_INTEGER IN

  ACTION BINARY_INTEGER IN

  TABLESPACE VARCHAR2 IN DEFAULT

  PROCEDURE CHECK_OBJECT

  參數名稱 類型 輸入/輸出默認值?

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

  SCHEMA_NAME VARCHAR2 IN

  OBJECT_NAME VARCHAR2 IN

  PARTITION_NAME VARCHAR2 IN DEFAULT

  OBJECT_TYPE BINARY_INTEGER IN DEFAULT

  REPAIR_TABLE_NAME VARCHAR2 IN DEFAULT

  FLAGS BINARY_INTEGER IN DEFAULT

  RELATIVE_FNO BINARY_INTEGER IN DEFAULT

  BLOCK_START BINARY_INTEGER IN DEFAULT

  BLOCK_END BINARY_INTEGER IN DEFAULT

  CORRUPT_COUNT BINARY_INTEGER OUT

  PROCEDURE DUMP_ORPHAN_KEYS

  參數名稱 類型 輸入/輸出默認值?

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

  SCHEMA_NAME VARCHAR2 IN

  OBJECT_NAME VARCHAR2 IN

  PARTITION_NAME VARCHAR2 IN DEFAULT

  OBJECT_TYPE BINARY_INTEGER IN DEFAULT

  REPAIR_TABLE_NAME VARCHAR2 IN DEFAULT

  ORPHAN_TABLE_NAME VARCHAR2 IN DEFAULT

  FLAGS BINARY_INTEGER IN DEFAULT

  KEY_COUNT BINARY_INTEGER OUT

  PROCEDURE FIX_CORRUPT_BLOCKS

  參數名稱 類型 輸入/輸出默認值?

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

  SCHEMA_NAME VARCHAR2 IN

 

      OBJECT_NAME VARCHAR2 IN

  PARTITION_NAME VARCHAR2 IN DEFAULT

  OBJECT_TYPE BINARY_INTEGER IN DEFAULT

  REPAIR_TABLE_NAME VARCHAR2 IN DEFAULT

  FLAGS BINARY_INTEGER IN DEFAULT

  FIX_COUNT BINARY_INTEGER OUT

  FUNCTION ONLINE_INDEX_CLEAN RETURNS BOOLEAN

  參數名稱 類型 輸入/輸出默認值?

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

  OBJECT_ID BINARY_INTEGER IN DEFAULT

  WAIT_FOR_LOCK BINARY_INTEGER IN DEFAULT

  PROCEDURE REBUILD_FREELISTS

  參數名稱 類型 輸入/輸出默認值?

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

  SCHEMA_NAME VARCHAR2 IN

  OBJECT_NAME VARCHAR2 IN

  PARTITION_NAME VARCHAR2 IN DEFAULT

  OBJECT_TYPE BINARY_INTEGER IN DEFAULT

  PROCEDURE REBUILD_SHC_INDEX

  參數名稱 類型 輸入/輸出默認值?

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

  SEGMENT_OWNER VARCHAR2 IN

  CLUSTER_NAME VARCHAR2 IN

  PROCEDURE SEGMENT_FIX_STATUS

  參數名稱 類型 輸入/輸出默認值?

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

  SEGMENT_OWNER VARCHAR2 IN

  SEGMENT_NAME VARCHAR2 IN

  SEGMENT_TYPE BINARY_INTEGER IN DEFAULT

  FILE_NUMBER BINARY_INTEGER IN DEFAULT

  BLOCK_NUMBER BINARY_INTEGER IN DEFAULT

  STATUS_VALUE BINARY_INTEGER IN DEFAULT

  PARTITION_NAME VARCHAR2 IN DEFAULT

  PROCEDURE SKIP_CORRUPT_BLOCKS

  參數名稱 類型 輸入/輸出默認值?

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

  SCHEMA_NAME VARCHAR2 IN

  OBJECT_NAME VARCHAR2 IN

  OBJECT_TYPE BINARY_INTEGER IN DEFAULT

  FLAGS BINARY_INTEGER IN DEFAULT

  SQL>

  先用dbms_repair.admin建立 孤表和修復表

  ADMIN_TABLES :Provides administrative functions (create, drop, purge) for repair or orphan key tables.

  Note: These tables are always created in the SYS schema.

  CHECK_OBJECT :Detects and reports corruptions in a table or index

  DUMP_ORPHAN_KEYS :Reports on index entries that point to rows in corrupt data blocks

  FIX_CORRUPT_BLOCKS :Marks blocks as software corrupt that have been previously identified as corrupt by the CHECK_OBJECT procedure

  REBUILD_FREELISTS :Rebuilds the free lists of the object

  SEGMENT_FIX_STATUS :Provides the capability to fix the corrupted state of a bitmap entry when segment space management is AUTO

  SKIP_CORRUPT_BLOCKS: When used, ignores blocks marked corrupt during table and index scans. If not used, you get error ORA-1578 when encountering blocks

  marked corrupt.

  s.

  1 begin

  2 dbms_repair.admin_tables(table_name=>'REPAIR_tb',ta ble_type=>dbms_repair.re

  pair_table,action=>dbms_repair.create_action,tables pace=>'USERS');

  3* end;

  SQL> /

  PL/SQL 過程已成功完成。

  repair table必須要有REPAIR_前綴(否則報錯ORA-24129: 表名 repair_tb 沒有以前綴 REPAIR_ 開始)

  table_type=>dbms_repair.orphan_table:記錄壞塊檢查結果

  table_type=>dbms_repair.repair_table:與index有關係,記錄壞塊在index中的KEY VALUE

  SQL> desc REPAIR_tb

  名稱 是否爲空? 類型

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

  OBJECT_ID NOT NULL NUMBER

  TABLESPACE_ID NOT NULL NUMBER

 

      RELATIVE_FILE_ID NOT NULL NUMBER

  BLOCK_ID NOT NULL NUMBER

  CORRUPT_TYPE NOT NULL NUMBER

  SCHEMA_NAME NOT NULL VARCHAR2(30)

  OBJECT_NAME NOT NULL VARCHAR2(30)

  BASEOBJECT_NAME VARCHAR2(30)

  PARTITION_NAME VARCHAR2(30)

  CORRUPT_DESCRIPTION VARCHAR2(2000)

  REPAIR_DESCRIPTION VARCHAR2(200)

  MARKED_CORRUPT NOT NULL VARCHAR2(10)

  CHECK_TIMESTAMP NOT NULL DATE

  FIX_TIMESTAMP DATE

  REFORMAT_TIMESTAMP DATE

  建立好的結構

  檢查壞塊

  SQL> SET SERVEROUTPUT ON

  1 DECLARE num_corrupt INT;

  2 BEGIN

  3 num_corrupt := 0;

  4 DBMS_REPAIR.CHECK_OBJECT (

  5 SCHEMA_NAME => 'XH',

  6 OBJECT_NAME => 'SS',

  7 REPAIR_TABLE_NAME => 'REPAIR_TB',

  8 CORRUPT_COUNT => num_corrupt);

  9 DBMS_OUTPUT.PUT_LINE('number corrupt: ' || TO_CHAR (num_corrupt));

  10* END;

  SQL> /

  number corrupt: 2

  有2個壞塊

  SQL> select object_name,block_id,MARKED_CORRUPT from repair_tb;

  OBJECT_NAME BLOCK_ID MARKED_COR

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

  SS 84 TRUE

  SS 85 TRUE

  84,85爲壞塊

  1 DECLARE num_fix INT;

  2 BEGIN

  3 num_fix := 0;

  4 DBMS_REPAIR.FIX_CORRUPT_BLOCKS (

  5 SCHEMA_NAME => 'XH',

  6 OBJECT_NAME=> 'SS',

  7 OBJECT_TYPE => dbms_repair.table_object,

  8 REPAIR_TABLE_NAME => 'REPAIR_TB',

  9 FIX_COUNT=> num_fix);

  10 DBMS_OUTPUT.PUT_LINE('num fix: ' || TO_CHAR(num_fix));

  11* END;

  SQL> /

  num fix: 0

  PL/SQL 過程已成功完成。

  在check階段已經標記爲損壞,所以修正階段 返回爲0

  跳過壞塊

  1 BEGIN

  2 DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (

  3 SCHEMA_NAME => 'XH',

  4 OBJECT_NAME => 'SS',

  5 OBJECT_TYPE => dbms_repair.table_object,

  6 FLAGS => dbms_repair.skip_flag);

  7* END;

  SQL> /

  PL/SQL 過程已成功完成。

  SQL> conn xh/a831115

  已連接。

  SQL> select count(*) from ss;

  COUNT(*)

  ----------

  108

  可以看到正好丟了 2行的數據(建立表時每行對應一個塊)

  另外如果有INDEX的話要執行

  用來保存壞塊對應index的 key value(否則不一直FTS 報錯,INDEX SCAN 不報錯)

  SET SERVEROUTPUT ON

  DECLARE num_orphans INT;

  BEGIN

  num_orphans := 0;

  DBMS_REPAIR.DUMP_ORPHAN_KEYS (

  SCHEMA_NAME => 'XH',

  OBJECT_NAME => 'IND_SS',

  OBJECT_TYPE => dbms_repair.index_object,

  REPAIR_TABLE_NAME => 'REPAIR_TB',

  ORPHAN_TABLE_NAME=> 'ORPHAN_KEY_TABLE',

  KEY_COUNT => num_orphans);

  DBMS_OUTPUT.PUT_LINE('orphan key count: ' || TO_CHAR(num_orphans));

  END;

  /

  建立玩上面的表 執行後

  SQL> shutdown immediate;

  數據庫已經關閉。

  已經卸載數據庫。

  ORACLE 例程已經關閉。

  ~~~~~~~~~~~~~~~在製造壞塊

  SQL> startup

  ORA-32004: obsolete and/or deprecated parameter(s) specified

  ORACLE 例程已經啓動。

  Total System Global Area 289406976 bytes

  Fixed Size 1248576 bytes

  Variable Size 104858304 bytes

  Database Buffers 176160768 bytes

  Redo Buffers 7139328 bytes

  數據庫裝載完畢。

  數據庫已經打開。

  SQL> conn xh/a831115

  已連接。

  SQL> select count(*) from ss;

  COUNT(*)

  ----------

  106~~~~~~~~~~~~~~~~~~~~~將自己跳過壞塊(奇怪)

  SQL> select object_name,block_id from repair_tb;

 

      OBJECT_NAME BLOCK_ID

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

  SS 84

  SS 85

  中還是記錄2個壞塊

  SQL> host dbv file=e:/datafile/ss.dbf feedback=100

  DBVERIFY: Release 10.2.0.1.0 - Production on 星期二 10月 27 23:19:31 2009

  Copyright (c) 1982, 2005, Oracle. All rights reserved. DBVERIFY - 開始驗證: FILE = e:/datafile/ss.dbf

  頁 46 標記爲損壞

  Corrupt block relative dba: 0x01c0002e (file 7, block 46)

  Bad check value found during dbv:

  Data in bad block:

  type: 6 format: 2 rdba: 0x01c0002e

  last change scn: 0x0000.0050f73b seq: 0x2 flg: 0x04

  spare1: 0x0 spare2: 0x0 spare3: 0x0

  consistency value in tail: 0xf73b0602

  check value in block header: 0x970d

  computed block checksum: 0xc6af

  頁 49 標記爲損壞

  Corrupt block relative dba: 0x01c00031 (file 7, block 49)

  Bad check value found during dbv:

  Data in bad block:

  type: 6 format: 2 rdba: 0x01c00031

  last change scn: 0x0000.0050f749 seq: 0x2 flg: 0x04

  spare1: 0x0 spare2: 0x0 spare3: 0x0

  consistency value in tail: 0xf7490602

  check value in block header: 0xdb0c

  computed block checksum: 0xe2ff

  頁 84 標記爲損壞

  Corrupt block relative dba: 0x01c00054 (file 7, block 84)

  Bad check value found during dbv:

  Data in bad block:

  type: 6 format: 2 rdba: 0x01c00054

  last change scn: 0x0000.0050f794 seq: 0x2 flg: 0x04

  spare1: 0x0 spare2: 0x0 spare3: 0x0

  consistency value in tail: 0xf7940602

  check value in block header: 0xdd2c

  computed block checksum: 0x777d

  頁 85 流入 - 很可能是介質損壞

  Corrupt block relative dba: 0x01c00055 (file 7, block 85)

  Fractured block found during dbv:

  Data in bad block:

  type: 6 format: 2 rdba: 0x01c00055

  last change scn: 0xad00.0050f796 seq: 0xad flg: 0xa4

  spare1: 0x0 spare2: 0x0 spare3: 0x0

  consistency value in tail: 0xf7960602

  check value in block header: 0xdb18

  computed block checksum: 0xb2f4

  ..

  DBVERIFY - 驗證完成

  檢查的頁總數: 128

  處理的頁總數 (數據): 106

  失敗的頁總數 (數據): 0

  處理的頁總數 (索引): 0

  失敗的頁總數 (索引): 0

  處理的頁總數 (其它): 18

  處理的總頁數 (段) : 0

  失敗的總頁數 (段) : 0

  空的頁總數: 0

  標記爲損壞的總頁數: 4

  流入的頁總數: 1

  最高塊 SCN : 5306362 (0.5306362)

  檢查出4個,oracle自動執行掉過壞塊操作了??

  1 BEGIN

  2 DBMS_REPAIR.ADMIN_TABLES (

  3 TABLE_NAME => 'REPAIR_TB',

  4 TABLE_TYPE => dbms_repair.repair_table,

  5 ACTION => dbms_repair.purge_action

  6 );

  7* END;

  SQL> /

  PL/SQL 過程已成功完成。

  SQL> select object_name,block_id from repair_tb;

  OBJECT_NAME BLOCK_ID

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

  SS 84

  SS 85

  1 BEGIN

  2 DBMS_REPAIR.ADMIN_TABLES (

  3 TABLE_NAME => 'REPAIR_TB',

  4 TABLE_TYPE => dbms_repair.repair_table,

  5 ACTION => dbms_repair.drop_action);

  6* END;

  7 /

  PL/SQL 過程已成功完成。

  SQL> select object_name,block_id from repair_tb;

  select object_name,block_id from repair_tb

  *

  第 1 行出現錯誤:

  ORA-00942: 表或視圖不存在

  SQL> shutdown immediate;

  數據庫已經關閉。

  已經卸載數據庫。

  ORACLE 例程已經關閉。

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~破壞

  SQL> startup

  ORA-32004: obsolete and/or deprecated parameter(s) specified

  ORACLE 例程已經啓動。

  Total System Global Area 289406976 bytes

  Fixed Size 1248576 bytes

  Variable Size 104858304 bytes

  Database Buffers 176160768 bytes

  Redo Buffers 7139328 bytes

  SQL> conn xh/a831115

 

      已連接。

  SQL> select count(*) from ss;

  COUNT(*)

  ----------

  105

  暈了 oracle還是自己解決了

  原因:

  SQL> select skip_corrupt from all_tables where table_name='SS';

  SKIP_COR

  --------

  ENABLED

  SKIP_CORRUPT VARCHAR2(8) Whether the Oracle Database ignores blocks marked corrupt during table and index scans (ENABLED) or raises an error (DISABLED). To

  enable this feature, run the DBMS_REPAIR.SKIP_CORRUPT_BLOCKS procedure

  用event解決:

  SQL> create tablespace sss datafile 'e:/datafile/sss.dbf' size 1m;

  表空間已創建。

  SQL> create table sss (a char(2000), b char(2000), c char(2000) ) tablespace sss

  ;

  表已創建。

  SQL> ed

  已寫入 file afiedt.buf

  1 declare

  2 begin

  3 for i in 1..1000 loop

  4 insert into sss values('a','b','c');

  5 commit;

  6 end loop;

  7* end;

  SQL> /

  declare

  *

  第 1 行出現錯誤:

  ORA-01653: 表 XH.SSS 無法通過 8 (在表空間 SSS 中) 擴展

  ORA-06512: 在 line 4

  SQL> select count(*) from sss;

  COUNT(*)

  ----------

  110

  SQL> select skip_corrupt from all_tables where table_name='SSS';

  SKIP_COR

  --------

  DISABLED

  SQL> conn xh/a831115

  已連接。

  SQL> select count(*) from sss;

  select count(*) from sss

  *

  第 1 行出現錯誤:

  ORA-01578: ORACLE 數據塊損壞 (文件號 8, 塊號 43)

  ORA-01110: 數據文件 8: 'E:/DATAFILE/SSS.DBF'

  SQL> host exp xh/a831115 file=e:/sss.dmp tables=SSS

  Export: Release 10.2.0.1.0 - Production on 星期二 10月 27 23:39:46 2009

  Copyright (c) 1982, 2005, Oracle. All rights reserved.

  連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

  With the Partitioning, OLAP and Data Mining options

  已導出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

  即將導出指定的表通過常規路徑...

  . . 正在導出表 SSS

  EXP-00056: 遇到 ORACLE 錯誤 1578

  ORA-01578: ORACLE 數據塊損壞 (文件號 8, 塊號 43)

  ORA-01110: 數據文件 8: 'E:/DATAFILE/SSS.DBF'

  導出成功終止, 但出現警告。

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

  系統已更改。

  SQL> host exp xh/a831115 file=e:/sss.dmp tables=SSS

  Export: Release 10.2.0.1.0 - Production on 星期二 10月 27 23:40:44 2009

  Copyright (c) 1982, 2005, Oracle. All rights reserved.

  連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

  With the Partitioning, OLAP and Data Mining options

  已導出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

  即將導出指定的表通過常規路徑...

  . . 正在導出表 SSS導出了 109 行

  成功終止導出, 沒有出現警告。

  可以看到 導出時有1row是 丟失的

  SQL> host imp xh/a831115 file=e:/sss.dmp tables=SSS

  Import: Release 10.2.0.1.0 - Production on 星期二 10月 27 23:41:20 2009

  Copyright (c) 1982, 2005, Oracle. All rights reserved.

  連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

  With the Partitioning, OLAP and Data Mining options

  經由常規路徑由 EXPORT:V10.02.01 創建的導出文件

  已經完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的導入

  . 正在將 XH 的對象導入到 XH

  . 正在將 XH 的對象導入到 XH

  . . 正在導入表 "SSS"導入了 109 行

  成功終止導入, 沒有出現警告。

  SQL> select count(*) from sss;

  COUNT(*)

  ----------

  109

  丟失1 rows

  SQL> conn / as sysdba

  已連接。

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~塊損壞

  SQL> shutdown immediate;

  數據庫已經關閉。

  已經卸載數據庫。

  ORACLE 例程已經關閉。

  SQL> startup

  ORA-32004: obsolete and/or deprecated parameter(s) specified

  ORACLE 例程已經啓動。

  Total System Global Area 289406976 bytes

  Fixed Size 1248576 bytes

  Variable Size 117441216 bytes

 

      Database Buffers 163577856 bytes

  Redo Buffers 7139328 bytes

  數據庫裝載完畢。

  數據庫已經打開。

  SQL> conn xh/a831115

  已連接。

  SQL> select count(*) from sss;

  select count(*) from sss

  *

  第 1 行出現錯誤:

  ORA-01578: ORACLE 數據塊損壞 (文件號 8, 塊號 34)

  ORA-01110: 數據文件 8: 'E:/DATAFILE/SSS.DBF'

  SQL> alter session set events '10231 trace name context forever, level 10';~~~~~直接使用事件

  會話已更改。

  SQL> select count(*) from sss;

  COUNT(*)

  ----------

  108

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章