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\XHTEST\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_AREA\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_AREA\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_TAG20091027T220531_5GFZKFVC_.BKP
通道 ORA_DISK_1: 已从备份段 1 恢复块
段句柄 = F:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XHTEST\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_TAG20091027T172314_5GFH04WS_.BKP
通道 ORA_DISK_1: 已从备份段 1 恢复块
段句柄 = F:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XHTEST\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',table_type=>dbms_repair.re
pair_table,action=>dbms_repair.create_action,tablespace=>'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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12020513/viewspace-617560/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12020513/viewspace-617560/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值