设为首页 加入收藏

TOP

使用dbms_repair修复块损坏的具体示例(一)
2014-11-24 01:03:19 来源: 作者: 【 】 浏览:14
Tags:使用 dbms_repair 修复 损坏 具体 示例

使用dbms_repair修复块损坏的具体示例:


SQL> create tablespace block datafile D:oracleoradataoracle9ilock.dbf size 5M;


Tablespace created


SQL> connect dlinger/dlinger

Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0

Connected as dlinger


QL> create table test tablespace block as select * from all_tables;


Table created


SQL> insert into test select * from test;


806 rows inserted


SQL> insert into test select * from test;


1612 rows inserted


SQL> insert into test select * from test;


3224 rows inserted


SQL> insert into test select * from test;


6448 rows inserted


SQL> insert into test select * from test;


insert into test select * from test


ORA-01653: 表DLINGER.TEST无法通过128(在表空间BLOCK中)扩展


SQL> commit;


Commit complete


SQL> select count(*) from test;


COUNT(*)

----------

12896


SQL> create index i_test on test(table_name);


Index created


SQL> alter system checkpoint;


System altered

SQL> connect sys/sys as sysdba

已连接。

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库

ORACLE 例程已经关闭。


--使用UltraEdit编辑block.dbf,修改几个字符


SQL> startup

ORACLE 例程已经启动。


Total System Global Area 72424008 bytes

Fixed Size 453192 bytes

Variable Size 46137344 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

数据库装载完毕。

数据库已经打开。

SQL> select count(*) from dlinger.test;

select count(*) from dlinger.test

*

ERROR 位于第 1 行:

ORA-01578: ORACLE 数据块损坏(文件号14,块号160)

ORA-01110: 数据文件 14: D:ORACLEORADATAORACLE9IBLOCK.DBF

用dbv检查:

C:Documents and Settingsduanl>dbv file=D:oracleoradataoracle9ilock.dbf

blocksize=8192


DBVERIFY: Release 9.2.0.1.0 - Production on 星期二 8月 24 19:58:15 2004


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


DBVERIFY - 验证正在开始 : FILE = D:oracleoradataoracle9ilock.dbf

标记为损坏的页160

***

Corrupt block relative dba: 0x038000a0 (file 14, block 160)

Bad check value found during dbv:

Data in bad block -

type: 6 format: 2 rdba: 0x038000a0

last change scn: 0x0000.0035f5c2 seq: 0x1 flg: 0x06

consistency value in tail: 0xf5c20601

check value in block header: 0x3681, computed block checksum: 0x5bb

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

***


DBVERIFY - 验证完成


检查的页总数 :640

处理的页总数(数据):510

失败的页总数(数据):0

处理的页总数(索引):0

失败的页总数(索引):0

处理的页总数(其它):9

处理的总页数 (段) : 0

失败的总页数 (段) : 0

空的页总数 :120

标记为损坏的总页数:1

汇入的页总数 :0


使用dbms_repair包

1.创建管理表:

SQL> connect sys/sys as sysdba

Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0

Connected as SYS


SQL> exec DBMS_REPAIR.ADMIN_TABLES(REPAIR_TABLE,1,1,USERS);


PL/SQL procedure successfully completed


SQL> exec DBMS_REPAIR.ADMIN_TABLES(ORPHAN_TABLE,2,1,USERS);


PL/SQL procedure successfully completed

2.检查坏块:dbms_repair.check_object


SQL> declare

2 cc number;

3 begin

4 dbms_repair.check_object(schema_name => DLINGER,object_name => TEST,cor

rupt_count => cc);

5 dbms_output.put_line(a => to_char(cc));

6 end;

7 /

1


PL/SQL 过程已成功完成。


看到这里用dbms_repair.check,检查的结果corrupt_count=1,有一个块损坏,和dbv的结果一致。


check完之后,在我们刚在创建的REPAIR_TABLE中查看块损坏信息:


SQL> SELECT object_name, relative_file_id, block_id,marked_corrupt, corrupt_description, repair_description,

2 CHECK_TIMESTAMP from repair_table;


OBJECT_NAME RELATIVE_FILE_ID BLOCK_ID MARKED_CORRUPT CORRUPT_DESCRIPTION REPAIR_DESCRIPTION CHECK_TIMESTAMP

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

TEST 14 160 TRUE mark block software corrupt 2004-8-24 21:46


在这个table中,可以看到损坏的block的信息,这里的信息和我们用dbv得到的一致。

我们这个实验是在9i下模拟的,我们注意看MARKED_CORRUPT的值,这里经过check_object后,已经

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇走进Affinity之一:VMware开源数.. 下一篇mongodb for java使用中的小问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: