Oracle RMAN Recover中使用BBED 跳过缺失的归档 继续 Recover 的测试
一.背景说明
Oracle RMAN 备份的恢复分2个步骤:RESTRE 和 RECOVER。
在这个过程中,Recover 是依赖与归档文件的。
假设一种情况:周一对数据库做了全备,然后保留归档。周四发现数据库有异常,准备恢复,发现周二的时候少了一个归档。
按照正常的情况,我们只能将数据库恢复到周二缺失归档的之前的点。
那么我这里就是一个研究,如何跳过这个缺失的归档,让数据库继续进行Recover。
根据测试结果,Recover 是可以继续,但是测试的结果意义不是很大,因为还是有数据丢失。
所以这里更多的是对这种方法的抛砖引玉。
二.测试案例
2.1 使用RMAN 全备数据库
此步骤直接备份即可。
2.2 创建测试表dave1并切换归档
SQL> select sequence# from v$log wherethread#=1;
SEQUENCE#
----------
152
151
SQL> create table dave1 as select * fromdba_users;
Table created.
SQL> alter system switch logfile;
System altered.
SQL> select sequence# from v$log wherethread#=1;
SEQUENCE#
----------
152
153
2.3 创建测试表dave2并切换归档
SQL> create table dave2 as select * fromdba_users;
Table created.
SQL> alter system switch logfile;
System altered.
SQL> select sequence#,status from v$logwhere thread#=1;
SEQUENCE# STATUS
---------- ----------------
154 CURRENT
153 ACTIVE
SQL> select sequence# fromv$archived_log where thread#=1;
SEQUENCE#
----------
148
149
150
151
152
153
6 rows selected.
2.4 删除153的归档
[oracle@dave arch]$ ll
total 42200
-rw-r-----. 1 oracle oinstall 42715136Jul 5 22:56 1_125_816661296.dbf
-rw-r-----. 1 oracle oinstall 248320 Jul 6 23:14 1_152_816661296.dbf
-rw-r-----. 1 oracle oinstall 127488 Jul 6 23:15 1_153_816661296.dbf
-rw-r-----. 1 oracle oinstall 113664 Jul 6 23:19 1_154_816661296.dbf
[oracle@dave arch]$ rm-rf 1_153_816661296.dbf
[oracle@dave arch]$ ll
total 42072
-rw-r-----. 1 oracle oinstall 42715136Jul 5 22:56 1_125_816661296.dbf
-rw-r-----. 1 oracle oinstall 248320 Jul 6 23:14 1_152_816661296.dbf
-rw-r-----. 1 oracle oinstall 113664 Jul 6 23:19 1_154_816661296.dbf
[oracle@dave arch]$
2.5 然后进行restore 和recover
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup mount
RMAN> restore database;
Starting restore at 06-JUL-13
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=20 device type=DISK
channel ORA_DISK_1: starting datafilebackup set restore
channel ORA_DISK_1: specifying datafile(s)to restore from backup set
channel ORA_DISK_1: restoring datafile00001 to /u01/app/oracle/oradata/dave/system.256.816661027
channel ORA_DISK_1: restoring datafile00003 to /u01/app/oracle/oradata/dave/undotbs1.258.816661037
channel ORA_DISK_1: restoring datafile00005 to /u01/app/oracle/oradata/dave/undotbs2.265.816661787
channel ORA_DISK_1: reading from backuppiece /u01/backup/dave_lev0_06oe3kdv_1_1_20130706
channel ORA_DISK_1: piecehandle=/u01/backup/dave_lev0_06oe3kdv_1_1_20130706 tag=DAVE_LEV0
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete,elapsed time: 00:00:25
channel ORA_DISK_1: starting datafilebackup set restore
channel ORA_DISK_1: specifying datafile(s)to restore from backup set
channel ORA_DISK_1: restoring datafile00002 to /u01/app/oracle/oradata/dave/sysaux.257.816661033
channel ORA_DISK_1: restoring datafile00004 to /u01/app/oracle/oradata/dave/users.259.816661039
channel ORA_DISK_1: restoring datafile00006 to /u01/app/oracle/oradata/dave/dave01.dbf
channel ORA_DISK_1: restoring datafile00007 to /u01/app/oracle/oradata/dave/dave02.dbf
channel ORA_DISK_1: reading from backuppiece /u01/backup/dave_lev0_05oe3kdv_1_1_20130706
channel ORA_DISK_1: piece handle=/u01/backup/dave_lev0_05oe3kdv_1_1_20130706tag=DAVE_LEV0
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete,elapsed time: 00:00:25
Finished restore at 06-JUL-13
RMAN>
RMAN> recoverdatabase;
Starting recover at 06-JUL-13
using channel ORA_DISK_1
starting media recovery
archived log for thread 1 with sequence 152is already on disk as file /u01/arch/1_152_816661296.dbf
archived log for thread 1 with sequence 154is already on disk as file /u01/arch/1_154_816661296.dbf
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGESTACK FOLLOWS ===============
RMAN-00571:===========================================================
RMAN-03002: failure of recover command at07/06/2013 23:23:48
RMAN-06053: unable to perform mediarecovery because of missing log
RMAN-06025: no backup ofarchived log for thread 1 with sequence 153 and starting SCN of 3836001 foundto restore
RMAN>
这个153 是我们刚才手工删掉的归档。如果这个不搞定,后面没办法恢复。
2.6 BBED 推荐SCN
2.6.1 修改原理说明
-- System Checkpoint SCN:
SQL> select checkpoint_change# fromv$database;
CHECKPOINT_CHANGE#
------------------
3836654
--- Datafile CheckpointSCN:
SQL> select name,checkpoint_change# fromv$datafile;
NAME CHECKPOINT_CHANGE#
-------------------------------------------------------------------------
/u01/app/oracle/oradata/dave/system.256.816661027 3836654
/u01/app/oracle/oradata/dave/sysaux.257.816661033 3836654
/u01/app/oracle/oradata/dave/undotbs1.258.816661037 3836654
/u01/app/oracle/oradata/dave/users.259.816661039 3836654
/u01/app/oracle/oradata/dave/undotbs2.265.816661787 3836654
/u01/app/oracle/oradata/dave/dave01.dbf 3836654
/u01/app/oracle/oradata/dave/dave02.dbf 3836654
7 rows selected.
---START SCN:
SQL> select name,checkpoint_change# fromv$datafile_header;
NAME CHECKPOINT_CHANGE#
-------------------------------------------------------------------------
/u01/app/oracle/oradata/dave/system.256.816661027 3835435
/u01/app/oracle/oradata/dave/sysaux.257.816661033 3835434
/u01/app/oracle/oradata/dave/undotbs1.258.816661037 3835435
/u01/app/oracle/oradata/dave/users.259.816661039 3835434
/u01/app/oracle/oradata/dave/undotbs2.265.816661787 3835435
/u01/app/oracle/oradata/dave/dave01.dbf 3835434
/u01/app/oracle/oradata/dave/dave02.dbf 3835434
7 rows selected.
+++++SCN号与数据库启动:
在进行recovery的时候,我们根据归档,推进START SCN,但是归档缺失,导致无法推荐,数据库也无法启动。
我们这里缺失的是153的归档,我们只需要手工的修改datafile header,让数据库认为这个归档已经恢复了,即可。 这是一种欺骗行为,虽然可以继续,但还是会出现问题。
可以使用如下方法确定具体缺失的归档SCN,然后使用BBED 跳过这些SCN 即可。
SQL> selectsequence#,first_change#,next_change# from v$archived_log;
SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
---------- ------------- ------------
RMAN-03002: failure of recover command at07/06/2013 23:23:48
RMAN-06053: unable to perform mediarecovery because of missing log
2.6.2 使用BBED 推进所有DATAFILE header SCN
kscnbas (at offset 484) - SCN of lastchange to the datafile.
1 /u01/app/oracle/oradata/dave/system.256.816661027 129280
2 /u01/app/oracle/oradata/dave/sysaux.257.816661033 97280
3 /u01/app/oracle/oradata/dave/undotbs1.258.816661037 9600
4 /u01/app/oracle/oradata/dave/users.259.816661039 640
5 /u01/app/oracle/oradata/dave/undotbs2.265.816661787 12800
6 /u01/app/oracle/oradata/dave/dave01.dbf 393216
7 /u01/app/oracle/oradata/dave/dave02.dbf 6400
+++我们需要将所有datafile 的SCN从3836001 推到3836079:
SQL> selectto_char('3836079','xxxxxxxxx') from dual;
但是注意,对于little-endian的format,他存储是先存储低位的,因此实际block 存储的是:af883a00.
我们需要使用BBED 将所有datafileheader 的@484 的值修改成:af883a00。
File:/u01/app/oracle/oradata/dave/system.256.816661027 (1)
Block: 1 Offsets: 484 to 499 Dba:0x00400001
-------------------------------------------------------
2b863a00 00000000 bfd1e130 01000000 l+.:........0....
BBED> modify /x af88 dba 1,1 offset 484
File: /u01/app/oracle/oradata/dave/system.256.816661027(1)
Block: 1 Offsets: 484 to 499 Dba:0x00400001
------------------------------------------------------------------------
af883a00 00000000 bfd1e130 01000000
<32 bytes per line>
BBED> sum dba 1,1 apply
Check value for File 1, Block 1:
current = 0xe9ba, required = 0xe9ba
+++按照同样的步骤,把剩下的6个datafile都修改。
--BBED 推荐成功:
SQL> selectfile#,checkpoint_change#,status from v$datafile_header;
FILE# CHECKPOINT_CHANGE# STATUS
---------- ------------------ -------
1 3836079 ONLINE
2 3836079 ONLINE
3 3836079 ONLINE
4 3836079 ONLINE
5 3836079 ONLINE
6 3836079 ONLINE
7 3836079 ONLINE
7 rows selected.
这里的datafile 的SCN 都跳过了我们缺失的归档,我们可以继续进行recover了。
2.7 重新进行Recover
RMAN> recover database;
Starting recover at 07-JUL-13
using channel ORA_DISK_1
starting media recovery
media recovery failed
RMAN-00571:===========================================================
RMAN-00569: =============== ERROR MESSAGESTACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at07/07/2013 01:04:43
ORA-00283: recovery session canceled due toerrors
RMAN-11003: failure during parse/executionof SQL statement: alter database recover if needed
start
ORA-00283: recovery session canceled due toerrors
ORA-00600: internal errorcode, arguments: [3020], [3], [8077], [12590989], [], [], [], [], [], [], [],[]
ORA-10567:Redo is inconsistent with data block (file# 3, block# 8077, file offset is 66166784 bytes)
ORA-01110: data file 3:'/u01/app/oracle/oradata/dave/undotbs1.258.816661037'
ORA-10560: block type 'KTU UNDO BLOCK'
根据官网的说明,我们这是UNDO 表空间恢复无法继续了,详见:
Resolving ORA-600[3020] Raised During Recovery (文档 ID 361172.1)
RMAN> recover database allow 50 corruption;
media recovery complete, elapsed time:00:00:01
ORA-01092: ORACLE instance terminated.Disconnection forced
ORA-01578: ORACLE data block corrupted(file # 3, block # 128)
ORA-01110: data file 3:'/u01/app/oracle/oradata/dave/undotbs1.258.816661037'
Session ID: 16 Serial number: 5
2.8 重建UNDO 表空间
这里里面的 3 就是我们的undo 表空间,我们把重新创建一个UNDO 在拉起数据库:
2.8.1 用spfile 创建pfile,然后修改参数
2.8.2 用修改之后的pfile,重启DB
SQL> startuppfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initdave.ora'
Total System Global Area 718188544 bytes
Database Buffers 276824064 bytes
2.8.3 删除原来的表空间,创建新的UNDO 表空间
SQL> select tablespace_name fromdba_tablespaces;
------------------------------
SQL> create undo tablespace undotbs1datafile '/u01/app/oracle/oradata/dave/undotbs1.dbf' size 50M;
2.8.4 关闭数据库,修改pfile参数,然后用新的pfile创建spfile,在正常启动数据库。
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 718188544 bytes
Fixed Size 2231832 bytes
Variable Size 436208104 bytes
Database Buffers 276824064 bytes
Redo Buffers 2924544 bytes
Database mounted.
Database opened.
SQL>
库终于拉起来了。
2.9 验证
SQL> select name,checkpoint_change# fromv$datafile;
NAME CHECKPOINT_CHANGE#
-------------------------------------------------------------------------
/u01/app/oracle/oradata/dave/system.256.816661027 3857521
/u01/app/oracle/oradata/dave/sysaux.257.816661033 3857521
/u01/app/oracle/oradata/dave/undotbs1.dbf 3857521
/u01/app/oracle/oradata/dave/users.259.816661039 3857521
/u01/app/oracle/oradata/dave/undotbs2.265.816661787 3857521
/u01/app/oracle/oradata/dave/dave01.dbf 3857521
/u01/app/oracle/oradata/dave/dave02.dbf 3857521
7 rows selected.
SQL> select name,checkpoint_change# fromv$datafile_header;
NAME CHECKPOINT_CHANGE#
-------------------------------------------------------------------------
/u01/app/oracle/oradata/dave/system.256.816661027 3857521
/u01/app/oracle/oradata/dave/sysaux.257.816661033 3857521
/u01/app/oracle/oradata/dave/undotbs1.dbf 3857521
/u01/app/oracle/oradata/dave/users.259.816661039 3857521
/u01/app/oracle/oradata/dave/undotbs2.265.816661787 3857521
/u01/app/oracle/oradata/dave/dave01.dbf 3857521
/u01/app/oracle/oradata/dave/dave02.dbf 3857521
7 rows selected.
SQL> select checkpoint_change# fromv$database;
CHECKPOINT_CHANGE#
------------------
3857521
SQL> select count(1) from dave1;
select count(1) from dave1
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> select count(1) from dave2;
select count(1) from dave2
*
ERROR at line 1:
ORA-00942: table or view does not exist
库是正常拉起来了,不过之前创建的表都没有成功恢复。
--------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Email: tianlesoftware@gmail.com
Blog: http://blog.csdn.net/tianlesoftware
Weibo: http://weibo.com/tianlesoftware
Twitter: http://twitter.com/tianlesoftware
转载于:https://www.cnblogs.com/tianlesoftware/p/3609055.html
Oracle RMAN Recover中使用BBED 跳过缺失的归档 继续 Recover 的测试相关推荐
- oracle中recover作用,Oracle rman中restore和recover的区别
在Oracle的备份与恢复的知识点中,经常会出现Restore 和 Recovery两个词. 由于这两个词在字典中的解释很接近,Oracle的官方文档中看到了以下解释. Restoration:A c ...
- Oracle非常规恢复(使用BBED跳过归档)
一.BBED工具 1.BBED的安装 oracle 11g中缺bbed包,oracle11g bbed install and example 1.上传(sbbdpt.o ssbbded.o bbed ...
- oracle rman部分恢复,Oracle中使用RMAN备份及一些恢复方法
使用RMAN备份并恢复 Backup 备份命令生成 Backup sets (备份集合),以 oracle 专有的格式保存, 由一个完全的所有的备份片集合构成,构成一个完全备份或增量备份. 1.1. ...
- oracle 10g 安装介质,如何从Oracle 10g的安装介质中提取BBED必须的sbbdpt.o和ssbbded.o库文件...
BBED编译的时候需要使用到sbbdpt.o和ssbbded.o两个库文件,但是从11g开始,Oracle不再提供这两个库文件,但是可以使用10g版本中的这两个库文件在11g中编译生成BBED工具. ...
- Oracle RMAN 的 show,list,crosscheck,delete命令整理
1.SHOW命令: 显示rman配置: RMAN> show all; 2.REPORT命令: 2.1.RMAN> report schema 报告目标数据库的物理结构; 2.2 ...
- Oracle RMAN篇(三)—— RMAN 维护与管理
一. RMAN常用配置选项 1. 备份优化 优化备份开启后,会跳过以前备份过的文件,只读表空间和offline的表空间也会跳过. CONFIGURE BACKUP OPTIMIZATION OFF; ...
- Oracle RMAN 还原与恢复(一)--还原服务器参数文件
一. RMAN 还原与恢复基础 在RMAN 用于中,还原与恢复是两个不同的概念. 还原(restore):指访问先前生成的备份,从中得到一个或多个对象,然后在磁盘上的某个位置还原这些对象. 恢复(re ...
- Oracle RMAN备份与还原 - 联机备份讲解
Oracle RMAN备份与还原 - 联机备份讲解 脱机备份之后,对于RMAN备份有了初步的了解,相对于传统的用户手动管理备份文件,RMAN备份操作起来相对要简单方便的多,但是联机备份相对脱机备份操作 ...
- Oracle RMAN Catalog 和 Nocatalog 的区别
nocatalog方式:用control file作为catalog,每一次备份都要往控制文件里面写好多备份信息,控制文件里面会有越来越多的备份信息,即RMAN的 备份信息写在本地控制文件里面. ca ...
最新文章
- Istio所有模块、Service、Pod的功能介绍
- 服务器操作系统的安全策略,服务器操作系统的安全策略
- Oracle存储过程和自定义函数
- C++中函数模板template和函数参数为指针,且有返回值的结合使用
- 关于pipelineDB调用GetLocalStreamReaders的BUG
- 在mysql-workbench中运行function
- Memcached:列出所有Key
- 我所知的javascript之prototype
- filtic函数 matlab_matlab filtic 函数应用 filter 解差分方程 dft 函数
- emacs 替换模式_如何使用Emacs Org模式撰写博客
- opencv 学习之 亮度检测
- 【selenium 模拟拼图】滑动拼图验证码10分钟教程
- React脚手架开发
- H3CIE(WLAN)学习笔记(1)——电磁场基础
- VBV大小-H.264
- 遥感图像通用数据格式(BSQ\BIL\BIP)的理解
- Ubuntu 20.04/21.04 不能检测到外部HDMI显示器
- Unity接入穿山甲广告(使用unity插件SDK接入)看这一篇就够了
- 论如何写一份好的前端面试简历
- [图像去雨]--Arixv-Gradual Network for Single Image De-raining
热门文章
- 一个口罩引发的老黄牛
- Cannot resolve method ‘call(java.lang.String, org.apache.flink.table.api.ApiExpression)‘
- Error while retrieving the leader gateway. Retrying to connect to akka.tcp://flink@laptop:xxxx
- HBase-site.xml 常见重要配置参数(转载)
- 数据仓库相关书籍调研
- Error: Another program is already listening on a port that one of our HTTP servers is configured to
- Spark API 详解(转)
- expect一键登录mysql
- 数学狂想曲(十二)——熵(2), 阴影面积, 肺炎版《黄冈密卷》
- Service Fabric下删除实例并注销应用