ITPub博客

首页 > 数据库 > Oracle > Oracle模拟块损坏及其恢复过程

Oracle模拟块损坏及其恢复过程

原创 Oracle 作者:mqxiao07 时间:2007-02-01 16:13:44 0 删除 编辑
  1月31日下午4:50,珠海某公司报告数据库块损坏故障,以前曾碰到过这样的案例,应该重点检查硬盘是否有坏块报告。。。如下步骤模拟块损坏及恢复过程。[@more@]

连接到:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

SQL>set linesize 300
SQL>set pagesize 999
SQL>select name from v$datafile;

NAME
----------------------------------------
E:ORACLEORADATAORCLSYSTEM01.DBF
E:ORACLEORADATAORCLA0.DBF
E:ORACLEORADATAORCLDRSYS01.DBF
E:ORACLEORADATAORCLINDX01.DBF
E:ORACLEORADATAORCLTOOLS01.DBF
E:ORACLEORADATAORCLUSERS01.DBF
E:ORACLEORADATAORCLXDB01.DBF
E:ORACLEORADATAORCLTEST_DATA.DBF
E:ORACLEORADATAORCLPERFSTAT.DBF
E:ORACLEORADATAORCLA.DBF
E:ORACLEORADATAORCLBLOCK.DBF
E:ORACLEORADATAORCLA1.DBF
E:ORACLEORADATAORCLUNDOTBS.ORA

已选择13行。
SQL> create tablespace block
2 datafile 'e:oracleoradataorclblock.dbf' size 1M extent management local;

表空间已创建。
SQL> alter user r default tablespace block;

用户已更改。
SQL> alter user r quota unlimited on block;

用户已更改。
SQL>conn r/r
已连接。
SQL> create table t as select * from dba_users;

表已创建。

SQL> insert into t select * from t;

已创建17行。
SQL> /

已创建34行。

SQL> /

已创建68行。

SQL> /

已创建136行。

SQL> /

已创建272行。

SQL> /

已创建544行。

SQL> /

已创建1088行。

SQL> /

已创建2176行。

SQL> /

已创建4352行。

SQL> /
insert into t select * from t
*
ERROR 位于第 1 行:
ORA-01653: 表R.T无法通过8(在表空间BLOCK中)扩展
SQL> commit;

提交完成。
SQL> select count(*) from t;

COUNT(*)
----------
8704

SQL> alter system checkpoint;

系统已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
关闭数据库后用Ultredit编辑数据文件,随便更改几个字符.
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 64035360 bytes
Fixed Size 453152 bytes
Variable Size 46137344 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> select count(*) from r.t;
select count(*) from r.t
*
ERROR 位于第 1 行:
ORA-01578: ORACLE 数据块损坏(文件号11,块号10)
ORA-01110: 数据文件 11: 'E:ORACLEORADATAORCLBLOCK.DBF'
然后用DBV来检验:
E:oracleoradataorcl>dbv file=block.dbf blocksize=8192

DBVERIFY: Release 9.2.0.1.0 - Production on 星期四 2月 1 15:48:47 2007

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

DBVERIFY - 验证正在开始 : FILE = block.dbf
标记为损坏的页10
***
Corrupt block relative dba: 0x02c0000a (file 11, block 10)
Bad check value found during dbv:
Data in bad block -
type: 6 format: 2 rdba: 0x02c0000a
last change scn: 0x0000.000f9d9a seq: 0x2 flg: 0x04
consistency value in tail: 0x9d9a0602
check value in block header: 0xa06b, computed block checksum: 0x3
spare1: 0x0, spare2: 0x0, spare3: 0x0
***

DBVERIFY - 验证完成

检查的页总数 :128
处理的页总数(数据):118
失败的页总数(数据):0
处理的页总数(索引):0
失败的页总数(索引):0
处理的页总数(其它):9
处理的总页数 (段) : 0
失败的总页数 (段) : 0
空的页总数 :0
标记为损坏的总页数:1
汇入的页总数 :0

E:oracleoradataorcl>
在这种情况下,如果有备份,需要从备份中恢复
如果没有备份,那么坏块部分的数据肯定要丢失了

在这个时候导出是不允许的:

E:oracleoradataorcl>exp r/r file=t.dmp tables='t';

Export: Release 9.2.0.1.0 - Production on 星期四 2月 1 15:50:12 2007

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


连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径 ...
. . 正在导出表 T
EXP-00056: 遇到 ORACLE 错误 1578
ORA-01578: ORACLE 数据块损坏(文件号11,块号10)
ORA-01110: 数据文件 11: 'E:ORACLEORADATAORCLBLOCK.DBF'
EXP-00011: R.; 不存在
导出成功终止,但出现警告。

当然,对于不同的情况需要区别对待

首先你需要检查损坏的对象,使用以下SQL:
SQL> SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_extents
WHERE file_id = 11
and 10 between block_id AND block_id + blocks - 1;
TABLESPACE_NAME SEGMENT_TYPE OWNER SEGMENT_NAME
------------------------------ ------------------ ------------------------------ -------------
BLOCK TABLE R T
如果损失的是数据,ok
我们可以设置内部事件,使exp跳过这些损坏的block
SQL> ALTER SYSTEM SET EVENTS='10231 trace name context forever,level 10' ;

系统已更改。

然后我们可以导出未损坏的数据
E:oracleoradataorcl>exp r/r file=t.dmp tables='t';

Export: Release 9.2.0.1.0 - Production on 星期四 2月 1 15:54:43 2007

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


连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径 ...
. . 正在导出表 T 8687 行被导出
EXP-00011: R.; 不存在
导出成功终止,但出现警告。
这时候数据成功导出.
然后我们可以drop table,recreate,然后导入数据

本例中
我们损失了

8704 - 8687 = 17 行数据

SQL> conn r/r
已连接。
SQL> drop table t;

表已丢弃。

E:oracleoradataorcl>imp r/r file=t.dmp tables='t';

Import: Release 9.2.0.1.0 - Production on 星期四 2月 1 15:58:05 2007

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


连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

经由常规路径导出由EXPORT:V09.02.00创建的文件
已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入
. 正在将R的对象导入到 R
. . 正在导入表 "T" 8687行被导入
IMP-00033: 警告: 在导出文件中未找到表 ";"
成功终止导入,但出现警告。
SQL> select count(*) from t;

COUNT(*)
----------
8687
完成数据恢复。

注:10231事件指定数据库在进行全表扫描时跳过损坏的块
而不是给出ORA-1578 错误,对数据库没有影响
在完成恢复以后,你可以取消该事件设置:
SQL> ALTER SYSTEM SET EVENTS='10231 trace name context off';

系统已更改。

另外,如果有Rman最新的全备份,就能够利用Oracle9i的blockrecover新特性进行完全恢复。
SQL> conn r/r
已连接。
SQL> drop table t;

表已丢弃。
SQL> create table t as select * from dba_users;

表已创建。
SQL> insert into t select * from t;

已创建17行。

SQL> /

已创建34行。

SQL> /

已创建68行。

SQL> /

已创建136行。

SQL> /

已创建272行。

SQL> /

已创建544行。

SQL> /

已创建1088行。

SQL> /

已创建2176行。

SQL> /

已创建4352行。

SQL> /
insert into t select * from t
*
ERROR 位于第 1 行:
ORA-01653: 表R.T无法通过8(在表空间BLOCK中)扩展

SQL> commit;

提交完成。

SQL> alter system checkpoint;

系统已更改。

接着完成Rman的一次完整备份。
E:oracleoradataorcl>rman target system/manager catalog rman/rman

恢复管理器: 版本9.2.0.1.0 - Production

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

连接到目标数据库: ORCL (DBID=1117463701)
连接到恢复目录数据库

RMAN> backup database format='e:dbbackuporcl_fullback.bak' tag='orcl';

启动 backup 于 01-2月 -07
正在启动全部恢复目录的 resync
完成全部 resync
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=15 devtype=DISK
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
在备份集中包含当前的 SPFILE
备份集中包括当前控制文件
输入数据文件 fno=00001 name=E:ORACLEORADATAORCLSYSTEM01.DBF
输入数据文件 fno=00009 name=E:ORACLEORADATAORCLPERFSTAT.DBF
输入数据文件 fno=00006 name=E:ORACLEORADATAORCLUSERS01.DBF
输入数据文件 fno=00014 name=E:ORACLEORADATAORCLUNDOTBS.ORA
输入数据文件 fno=00007 name=E:ORACLEORADATAORCLXDB01.DBF
输入数据文件 fno=00003 name=E:ORACLEORADATAORCLDRSYS01.DBF
输入数据文件 fno=00004 name=E:ORACLEORADATAORCLINDX01.DBF
输入数据文件 fno=00005 name=E:ORACLEORADATAORCLTOOLS01.DBF
输入数据文件 fno=00008 name=E:ORACLEORADATAORCLTEST_DATA.DBF
输入数据文件 fno=00010 name=E:ORACLEORADATAORCLA.DBF
输入数据文件 fno=00002 name=E:ORACLEORADATAORCLA0.DBF
输入数据文件 fno=00011 name=E:ORACLEORADATAORCLBLOCK.DBF
输入数据文件 fno=00012 name=E:ORACLEORADATAORCLA1.DBF
通道 ORA_DISK_1: 正在启动段 1 于 01-2月 -07
通道 ORA_DISK_1: 已完成段 1 于 01-2月 -07
段 handle=E:DBBACKUPORCL_FULLBACK.BAK comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:56
完成 backup 于 01-2月 -07

RMAN> delete noprompt obsolete;

RMAN 保留策略将应用于该命令
将 RMAN 保留策略设置为冗余 1
使用通道 ORA_DISK_1
删除以下已废弃的备份和副本:
类型 关键字 完成时间 文件名/句柄
-------------------- ------ ------------------ --------------------
备份集 2846 01-2月 -07
备份段 2847 01-2月 -07 E:DBBACKUPORCL_FULLBK.BAK
存档日志 2695 07-9月 -06 E:ORACLEADMINARCHIVEARC02415.001

存档日志 2684 23-8月 -06 E:ORACLEADMINARCHIVEARC02416.001

存档日志 2692 23-8月 -06 E:ORACLEADMINARCHIVEARC02417.001

存档日志 2790 08-1月 -07 E:ORACLEADMINARCHIVEARC02454.001

存档日志 2791 08-1月 -07 E:ORACLEADMINARCHIVEARC02455.001

存档日志 2792 08-1月 -07 E:ORACLEADMINARCHIVEARC02456.001

存档日志 2793 08-1月 -07 E:ORACLEADMINARCHIVEARC02457.001

存档日志 2794 08-1月 -07 E:ORACLEADMINARCHIVEARC02458.001

存档日志 2795 08-1月 -07 E:ORACLEADMINARCHIVEARC02459.001

存档日志 2796 08-1月 -07 E:ORACLEADMINARCHIVEARC02460.001

存档日志 2797 08-1月 -07 E:ORACLEADMINARCHIVEARC02461.001

存档日志 2798 08-1月 -07 E:ORACLEADMINARCHIVEARC02462.001

存档日志 2799 08-1月 -07 E:ORACLEADMINARCHIVEARC02463.001

存档日志 2800 08-1月 -07 E:ORACLEADMINARCHIVEARC02464.001

存档日志 2801 08-1月 -07 E:ORACLEADMINARCHIVEARC02465.001

存档日志 2802 08-1月 -07 E:ORACLEADMINARCHIVEARC02466.001

存档日志 2803 08-1月 -07 E:ORACLEADMINARCHIVEARC02467.001

存档日志 2804 08-1月 -07 E:ORACLEADMINARCHIVEARC02468.001

存档日志 2805 08-1月 -07 E:ORACLEADMINARCHIVEARC02469.001

存档日志 2806 08-1月 -07 E:ORACLEADMINARCHIVEARC02470.001

存档日志 2807 08-1月 -07 E:ORACLEADMINARCHIVEARC02471.001

存档日志 2808 08-1月 -07 E:ORACLEADMINARCHIVEARC02472.001

存档日志 2809 08-1月 -07 E:ORACLEADMINARCHIVEARC02473.001

存档日志 2810 08-1月 -07 E:ORACLEADMINARCHIVEARC02474.001

存档日志 2811 08-1月 -07 E:ORACLEADMINARCHIVEARC02475.001

存档日志 2812 08-1月 -07 E:ORACLEADMINARCHIVEARC02476.001

存档日志 2813 08-1月 -07 E:ORACLEADMINARCHIVEARC02477.001

存档日志 2814 08-1月 -07 E:ORACLEADMINARCHIVEARC02478.001

存档日志 2815 08-1月 -07 E:ORACLEADMINARCHIVEARC02479.001

存档日志 2816 08-1月 -07 E:ORACLEADMINARCHIVEARC02480.001

存档日志 2817 08-1月 -07 E:ORACLEADMINARCHIVEARC02481.001

存档日志 2818 12-1月 -07 E:ORACLEADMINARCHIVEARC02482.001

存档日志 2819 12-1月 -07 E:ORACLEADMINARCHIVEARC02483.001

存档日志 2820 12-1月 -07 E:ORACLEADMINARCHIVEARC02484.001

存档日志 2821 12-1月 -07 E:ORACLEADMINARCHIVEARC02485.001

存档日志 2822 12-1月 -07 E:ORACLEADMINARCHIVEARC02486.001

存档日志 2823 12-1月 -07 E:ORACLEADMINARCHIVEARC02487.001

存档日志 2824 12-1月 -07 E:ORACLEADMINARCHIVEARC02488.001

存档日志 2825 12-1月 -07 E:ORACLEADMINARCHIVEARC02489.001

存档日志 2826 12-1月 -07 E:ORACLEADMINARCHIVEARC02490.001

存档日志 2827 12-1月 -07 E:ORACLEADMINARCHIVEARC02491.001

存档日志 2828 16-1月 -07 E:ORACLEADMINARCHIVEARC02492.001

存档日志 2829 16-1月 -07 E:ORACLEADMINARCHIVEARC02493.001

存档日志 2830 16-1月 -07 E:ORACLEADMINARCHIVEARC02494.001

存档日志 2831 16-1月 -07 E:ORACLEADMINARCHIVEARC02495.001

存档日志 2832 16-1月 -07 E:ORACLEADMINARCHIVEARC02496.001

存档日志 2833 16-1月 -07 E:ORACLEADMINARCHIVEARC02497.001

存档日志 2834 16-1月 -07 E:ORACLEADMINARCHIVEARC02498.001

存档日志 2835 16-1月 -07 E:ORACLEADMINARCHIVEARC02499.001

存档日志 2836 16-1月 -07 E:ORACLEADMINARCHIVEARC02500.001

存档日志 2837 16-1月 -07 E:ORACLEADMINARCHIVEARC02501.001

存档日志 2838 16-1月 -07 E:ORACLEADMINARCHIVEARC02502.001

存档日志 2839 16-1月 -07 E:ORACLEADMINARCHIVEARC02503.001

存档日志 2840 16-1月 -07 E:ORACLEADMINARCHIVEARC02504.001

存档日志 2841 16-1月 -07 E:ORACLEADMINARCHIVEARC02505.001

存档日志 2842 16-1月 -07 E:ORACLEADMINARCHIVEARC02506.001

存档日志 2843 16-1月 -07 E:ORACLEADMINARCHIVEARC02507.001

存档日志 2865 01-2月 -07 E:ORACLEADMINARCHIVEARC02509.001

存档日志 2890 01-2月 -07 E:ORACLEADMINARCHIVEARC02510.001

存档日志 2900 01-2月 -07 E:ORACLEADMINARCHIVEARC02511.001

存档日志 2901 01-2月 -07 E:ORACLEADMINARCHIVEARC02512.001

存档日志 2902 01-2月 -07 E:ORACLEADMINARCHIVEARC02513.001

存档日志 2903 01-2月 -07 E:ORACLEADMINARCHIVEARC02514.001

存档日志 2904 01-2月 -07 E:ORACLEADMINARCHIVEARC02515.001

已删除备份段
备份段 handle=E:DBBACKUPORCL_FULLBK.BAK recid=14 stamp=613402509
已删除的存档日志
存档日志文件名 =E:ORACLEADMINARCHIVEARC02509.001 记录 ID=163 时间戳 =6134026
74
已删除的存档日志
存档日志文件名 =E:ORACLEADMINARCHIVEARC02510.001 记录 ID=164 时间戳 =6134052
67
已删除的存档日志
存档日志文件名 =E:ORACLEADMINARCHIVEARC02511.001 记录 ID=165 时间戳 =6134070
27
已删除的存档日志
存档日志文件名 =E:ORACLEADMINARCHIVEARC02512.001 记录 ID=166 时间戳 =6134080
52
已删除的存档日志
存档日志文件名 =E:ORACLEADMINARCHIVEARC02513.001 记录 ID=167 时间戳 =6134100
99
已删除的存档日志
存档日志文件名 =E:ORACLEADMINARCHIVEARC02514.001 记录 ID=168 时间戳 =6134110
87
已删除的存档日志
存档日志文件名 =E:ORACLEADMINARCHIVEARC02515.001 记录 ID=169 时间戳 =6134129
83
8 对象已删除

RMAN-06207: 警告: 由于状态不匹配, 所以不能删除 57 对象 (对于 DISK 通道)。
RMAN-06208: 请用 CROSSCHECK 命令修正状态
不匹配对象的列表
==========================
对象类型 文件名/句柄
--------------- ---------------------------------------------------
Archivelog E:ORACLEADMINARCHIVEARC02415.001
Archivelog E:ORACLEADMINARCHIVEARC02416.001
Archivelog E:ORACLEADMINARCHIVEARC02417.001
Archivelog E:ORACLEADMINARCHIVEARC02454.001
Archivelog E:ORACLEADMINARCHIVEARC02455.001
Archivelog E:ORACLEADMINARCHIVEARC02456.001
Archivelog E:ORACLEADMINARCHIVEARC02457.001
Archivelog E:ORACLEADMINARCHIVEARC02458.001
Archivelog E:ORACLEADMINARCHIVEARC02459.001
Archivelog E:ORACLEADMINARCHIVEARC02460.001
Archivelog E:ORACLEADMINARCHIVEARC02461.001
Archivelog E:ORACLEADMINARCHIVEARC02462.001
Archivelog E:ORACLEADMINARCHIVEARC02463.001
Archivelog E:ORACLEADMINARCHIVEARC02464.001
Archivelog E:ORACLEADMINARCHIVEARC02465.001
Archivelog E:ORACLEADMINARCHIVEARC02466.001
Archivelog E:ORACLEADMINARCHIVEARC02467.001
Archivelog E:ORACLEADMINARCHIVEARC02468.001
Archivelog E:ORACLEADMINARCHIVEARC02469.001
Archivelog E:ORACLEADMINARCHIVEARC02470.001
Archivelog E:ORACLEADMINARCHIVEARC02471.001
Archivelog E:ORACLEADMINARCHIVEARC02472.001
Archivelog E:ORACLEADMINARCHIVEARC02473.001
Archivelog E:ORACLEADMINARCHIVEARC02474.001
Archivelog E:ORACLEADMINARCHIVEARC02475.001
Archivelog E:ORACLEADMINARCHIVEARC02476.001
Archivelog E:ORACLEADMINARCHIVEARC02477.001
Archivelog E:ORACLEADMINARCHIVEARC02478.001
Archivelog E:ORACLEADMINARCHIVEARC02479.001
Archivelog E:ORACLEADMINARCHIVEARC02480.001
Archivelog E:ORACLEADMINARCHIVEARC02481.001
Archivelog E:ORACLEADMINARCHIVEARC02482.001
Archivelog E:ORACLEADMINARCHIVEARC02483.001
Archivelog E:ORACLEADMINARCHIVEARC02484.001
Archivelog E:ORACLEADMINARCHIVEARC02485.001
Archivelog E:ORACLEADMINARCHIVEARC02486.001
Archivelog E:ORACLEADMINARCHIVEARC02487.001
Archivelog E:ORACLEADMINARCHIVEARC02488.001
Archivelog E:ORACLEADMINARCHIVEARC02489.001
Archivelog E:ORACLEADMINARCHIVEARC02490.001
Archivelog E:ORACLEADMINARCHIVEARC02491.001
Archivelog E:ORACLEADMINARCHIVEARC02492.001
Archivelog E:ORACLEADMINARCHIVEARC02493.001
Archivelog E:ORACLEADMINARCHIVEARC02494.001
Archivelog E:ORACLEADMINARCHIVEARC02495.001
Archivelog E:ORACLEADMINARCHIVEARC02496.001
Archivelog E:ORACLEADMINARCHIVEARC02497.001
Archivelog E:ORACLEADMINARCHIVEARC02498.001
Archivelog E:ORACLEADMINARCHIVEARC02499.001
Archivelog E:ORACLEADMINARCHIVEARC02500.001
Archivelog E:ORACLEADMINARCHIVEARC02501.001
Archivelog E:ORACLEADMINARCHIVEARC02502.001
Archivelog E:ORACLEADMINARCHIVEARC02503.001
Archivelog E:ORACLEADMINARCHIVEARC02504.001
Archivelog E:ORACLEADMINARCHIVEARC02505.001
Archivelog E:ORACLEADMINARCHIVEARC02506.001
Archivelog E:ORACLEADMINARCHIVEARC02507.001


RMAN> list backup;


备份集列表
===================

BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
2906 Full 370M DISK 00:00:51 01-2月 -07
BP 关键字: 2907 状态: AVAILABLE 标记:ORCL
段名:E:DBBACKUPORCL_FULLBACK.BAK
包含的 SPFILE: 修改时间: 10-1月 -07
备份集 2906 中的数据文件列表
文件 LV 类型 Ckp SCN Ckp 时间 名称
---- -- ---- ---------- ---------- ----
1 Full 1030775 01-2月 -07 E:ORACLEORADATAORCLSYSTEM01.DBF
2 Full 1030775 01-2月 -07 E:ORACLEORADATAORCLA0.DBF
3 Full 1030775 01-2月 -07 E:ORACLEORADATAORCLDRSYS01.DBF
4 Full 1030775 01-2月 -07 E:ORACLEORADATAORCLINDX01.DBF
5 Full 1030775 01-2月 -07 E:ORACLEORADATAORCLTOOLS01.DBF
6 Full 1030775 01-2月 -07 E:ORACLEORADATAORCLUSERS01.DBF
7 Full 1030775 01-2月 -07 E:ORACLEORADATAORCLXDB01.DBF
8 Full 1030775 01-2月 -07 E:ORACLEORADATAORCLTEST_DATA.DBF
9 Full 1030775 01-2月 -07 E:ORACLEORADATAORCLPERFSTAT.DBF
10 Full 1030775 01-2月 -07 E:ORACLEORADATAORCLA.DBF
11 Full 1030775 01-2月 -07 E:ORACLEORADATAORCLBLOCK.DBF
12 Full 1030775 01-2月 -07 E:ORACLEORADATAORCLA1.DBF
14 Full 1030775 01-2月 -07 E:ORACLEORADATAORCLUNDOTBS.ORA

RMAN>exit
恢复管理器完成。
然后关闭数据库,使用工具破坏数据块,启动数据库,访问损坏的数据:
SQL> conn r/r
已连接。
SQL> select count(*)from t;
select count(*)from t
*
ERROR 位于第 1 行:
ORA-01578: ORACLE 数据块损坏(文件号11,块号11)
ORA-01110: 数据文件 11: 'E:ORACLEORADATAORCLBLOCK.DBF'

此时alert_.log文件中也会记录损坏块。
***
Corrupt block relative dba: 0x02c0000b (file 11, block 11)
Bad check value found during buffer read
Data in bad block -
type: 6 format: 2 rdba: 0x02c0000b
last change scn: 0x0000.000fba42 seq: 0x1 flg: 0x06
consistency value in tail: 0xba420601
check value in block header: 0xd3e4, computed block checksum: 0x300
spare1: 0x0, spare2: 0x0, spare3: 0x0
***
Reread of rdba: 0x02c0000b (file 11, block 11) found same corrupted data

此时alert_.log文件中会记录RMAN发现的坏块信息:

***
Corrupt block relative dba: 0x02c0000b (file 11, block 11)
Bad check value found during backing up datafile
Data in bad block -
type: 6 format: 2 rdba: 0x02c0000b
last change scn: 0x0000.000fba42 seq: 0x1 flg: 0x06
consistency value in tail: 0xba420601
check value in block header: 0xd3e4, computed block checksum: 0x300
spare1: 0x0, spare2: 0x0, spare3: 0x0
***
Reread of blocknum=11, file=E:ORACLEORADATAORCLBLOCK.DBF. found same corrupt data

查询RMAN发现的坏块信息
SQL> select * from v$database_block_corruption where file#=11;

FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
11 11 1 0 FRACTURED
执行恢复
RMAN> blockrecover datafile 11 block 11 from backupset;

启动 blockrecover 于 01-2月 -07
使用通道 ORA_DISK_1


通道 ORA_DISK_1: 正在恢复块
通道 ORA_DISK_1: 正在指定要从备份集恢复的块
正在恢复数据文件 00011 的块
通道 ORA_DISK_1: 已从备份段 1 恢复块
段 handle=E:DBBACKUPORCL_FULLBACK.BAK tag=ORCL params=NULL
通道 ORA_DISK_1: 块恢复已完成

正在开始介质的恢复
完成介质的恢复

完成 blockrecover 于 01-2月 -07

RMAN>exit

恢复管理器完成。

再次访问损坏的数据:
SQL> conn r/r
已连接。
SQL> select count(*)from t;
COUNT(*)
----------
8704

这里我们看到已经完全恢复。

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

上一篇: 参数修改
下一篇: 求职信
请登录后发表评论 登录
全部评论
  • 博文量
    21
  • 访问量
    500614