RMAN4:块block恢复

造数

--1、创建表空间

create tablespace TBS_BLK datafile '/u01/app/oracle/oradata/ORCL/blk.dbf' size 256M;

--2、创建用户

create user blk identified by blk default tablespace TBS_BLK quota unlimited on TBS_BLK;

--3、授权

grant connect,resource to blk;

--4、建表

create table blk.tb_blk(id number primary key,name varchar2(20),savetime date);

--5、插入测试数据

begin

for i in 1..3000 loop

insert into blk.tb_blk values (i,'aaaa'||i,sysdate);

end loop;

end;

--6、提交

commit;

--7、统计信息收集

exec dbms_stats.gather_table_stats(/*min sig:*/ownname=>'BLK'/*varchar2*/,tabname=>'tb_blk'/*varchar2*/);

造损坏的块

  1. 通过工具bbed损害正常的块—如果11g及以上版本请参考 附1:bbed配置
  2. bbed不能直接操作ASM里面的数据文件请参考 附2:移动ASM中的数据文件
  3. 取记录ID=1500所在文件号和块号

SQL> select dbms_rowid.rowid_relative_fno(rowid) R_FNO,dbms_rowid.rowid_block_number(rowid) b_no,id,name from blk.tb_blk where id=1500 order by 1,2;

  1. 定位到数据文件

SQL> select file#,name ,bytes from v$datafile where file#=9;

  1. 确认数据库的db_block_size

SQL> show parameter db_block_size;

  1. 编辑所需文件

#cd /tmp/bbed

#vi bbed.par

blocksize=8192

listfile=/tmp/bbed/listfile.txt

mode=edit

#vi listfile.txt    --根据第4步查询结果

9 /tmp/bbed/blk.dbf 268435456    --如果在ASM中需要通过附2

  1. 进入bbed命令

# cd /tmp/bbed

# bbed parfile=/tmp/bbed/bbed.par   --输入密码 blockedit

BBED> set dba 9,146

--根据显示的Offsets: 6780 to 6787,确认字符串是否为aaaa1500

BBED> dump /v offset 6780 count 8

--破坏块

BBED> modify 801010 dba 9,146

--检查文件是否已破坏

#> dbv /tmp/bbed/blk.dbf

Total Pages Marked Corrupt   : 1

--查询报错

SQL> select count(1) from blk.tb_blk;

ERROR at line 1:

ORA-03135: connection lost contact

Process ID: 16336

Session ID: 18 Serial number: 875

恢复

RMAN> blockrecover datafile 9 block 146;  --单个块恢复

RMAN> blockrecover corruption list;       --许多块一起恢复(v$database_block_corruption)

验证

#dbv file=/tmp/blk.dbf

Total Pages Marked Corrupt   : 0

SQL> select count(1) from blk.tb_blk;

附1:bbed配置

  1. 如为11g-19c的版本,需要从10g中获取三个文件

免积分获取地址:https://download.csdn.net/download/weixin_47745154/21460997

将bbedus.msb、sbbdpt.o、ssbbded.o拷贝到目录 /u01/bbed

  1. 配置

#cd /u01/bbed

#cp sbbdpt.o ssbbded.o $ORACLE_HOME/rdbms/lib/

#cp bbedus.msb $ORACLE_HOME/rdbms/mesg/

#make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed

  1. 验证

#bbed -h

  1. 进入密码为:blockedit

附2:移动ASM中的数据文件到常规目录

--备份快照

RMAN> backup as copy datafile 9 format ‘/tmp/blk.dbf’;

--下线9号数据文件

RMAN> sql 'alter database datafile 9 offline';

--切换到copy

RMAN> switch datafile 9 to copy;

--打开数据库

RMAN> recover datafile 9;

RMAN> sql 'alter database datafile 9 online';

附3:另一种破坏数据块

# dd of=/u02/database/usbo/oradata/tbs_tmp.dbf bs=8192 conv=notrunc seek=153 <<EOF

New corrupted block!

>  EOF

--153为要破坏的块

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kencai1983

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值