oracle实验记录 (恢复,备份-含坏块数据文件)

来源:互联网 发布:c语言中二维数组赋值 编辑:程序博客网 时间:2024/05/01 23:37

恢复坏块几种方式及其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

原创粉丝点击