场景描述:

数据库利用备份进行恢复时,需要执行restore+recover,restore利用备份片恢复数据文件,recover是进行归档日志应用到最新状态,当我们所有归档日志丢失时,可以利用bbed跳过所有的归档日志,将数据库open起来,在生产环境中bbed是极其危险的操作,谨慎使用,本次测试是单个数据文件跳过所有归档日志。

环境构建:

SQL> archive log list;
Database log mode          Archive Mode
Automatic archival         Enabled
Archive destination        /oracle/app/product/11.2.0/db_1/dbs/arch
Oldest online log sequence     8
Next log sequence to archive   10
Current log sequence           10SQL> create tablespace test_bbed datafile '/oracle/app/oradata/prod/bbed01.dbf' size 50M;
Tablespace created.SQL> create table t1 tablespace test_bbed as select * from dba_objects;
Table created.SQL> insert into t1 select * from t1;
86957 rows created.SQL> commit;
Commit complete.RMAN> backup datafile 6 format '/home/oracle/backup/datafile6_%U';
Starting backup at 31-JUL-20
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=70 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00008 name=/oracle/app/oradata/prod/bbed01.dbf
channel ORA_DISK_1: starting piece 1 at 31-JUL-20
channel ORA_DISK_1: finished piece 1 at 31-JUL-20
piece handle=/home/oracle/backup/datafile8_01v6n1e7_1_1 tag=TAG20200731T181951 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 31-JUL-20SQL> archive log list;
Database log mode          Archive Mode
Automatic archival         Enabled
Archive destination        /oracle/app/product/11.2.0/db_1/dbs/arch
Oldest online log sequence     8
Next log sequence to archive   10
Current log sequence           10多次切换日志:
再次查看SQL> archive log list;
Database log mode          Archive Mode
Automatic archival         Enabled
Archive destination        /oracle/app/product/11.2.0/db_1/dbs/arch
Oldest online log sequence     15
Next log sequence to archive   17
Current log sequence           17删除归档14 15:(也可以全部删除,因为我们是跳过所有归档进行恢复)
rm -rf arch1_14_1046156085.dbf arch1_15_1046156085.dbf   删除数据文件
[oracle@server1 prod]$ mv bbed01.dbf /tmp/SQL> alter system flush buffer_cache;
System altered.SQL> select count(*) from t1;
select count(*) from t1*
ERROR at line 1:
ORA-01116: error in opening database file 8
ORA-01110: data file 8: '/oracle/app/oradata/prod/bbed01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information:3

开始恢复:

RMAN> restore datafile 6;RMAN> recover datafile 6;Starting recover at 08-OCT-20
using channel ORA_DISK_1starting media recoveryarchived log for thread 1 with sequence 10 is already on disk as file /oracle/app/product/11.2.0/db_1/dbs/arch1_10_1046156085.dbf
archived log for thread 1 with sequence 11 is already on disk as file /oracle/app/product/11.2.0/db_1/dbs/arch1_11_1046156085.dbf
archived log for thread 1 with sequence 12 is already on disk as file /oracle/app/product/11.2.0/db_1/dbs/arch1_12_1046156085.dbf
archived log for thread 1 with sequence 13 is already on disk as file /oracle/app/product/11.2.0/db_1/dbs/arch1_13_1046156085.dbf
archived log for thread 1 with sequence 16 is already on disk as file /oracle/app/product/11.2.0/db_1/dbs/arch1_16_1046156085.dbf
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 10/08/2020 23:40:44
RMAN-06053: unable to perform media recovery because of missing log
RMAN-06025: no backup of archived log for thread 1 with sequence 15 and starting SCN of 1115761 found to restore
RMAN-06025: no backup of archived log for thread 1 with sequence 14 and starting SCN of 1115758 found to restore这里只是归档断档,我不想后续继续应用16号归档,跳过所有归档日志。

查看SCN信息:

SQL> select file#,checkpoint_change# from v$datafile_header;FILE# CHECKPOINT_CHANGE#
---------- ------------------1            11157692            11157693            11157694            11157695            11157696            11157326 rows selected.SQL>  select file#,checkpoint_change#,last_change# from v$datafile;FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------1            11157692            11157693            11157694            11157695            11157696            11157696号数据文件 SCN1115732 -> 1115769 直接推进到与其他数据文件一致

bbed有关一致性的偏移量介绍:


​    (1)kscnbas (at offset 484) - SCN of last change to the datafile.​    (2)kcvcptim (at offset 492) -Time of the last change to the datafile.​    (3)kcvfhcpc (at offset 140) - Checkpoint count.​    (4)kcvfhccc (at offset 148) - Unknown, but is always 1 less than thecheckpoint point count.​    Oracle有4个属性来判断datafile 是否和其他的datafile 一致,如果都一致,可以正常操作,如果不一致,那么会报ORA-01113错误。

所以这里我们不仅修改484,我们还要修改492 140 148.
我们将6号文件的484 492 140 148全部修改与1号文件一致

bbed连接1号文件进行查看1号文件信息:

BBED> set filename '/oracle/app/oradata/prod/system01.dbf'BBED> p kcvfhckp
struct kcvfhckp, 36 bytes                   @484     struct kcvcpscn, 8 bytes                 @484     ub4 kscnbas                           @484      0x00110679ub2 kscnwrp                           @488      0x0000ub4 kcvcptim                             @492      0x3ec81979ub2 kcvcpthr                             @496      0x0001union u, 12 bytes                        @500     struct kcvcprba, 12 bytes             @500     ub4 kcrbaseq                       @500      0x00000011ub4 kcrbabno                       @504      0x00000002ub2 kcrbabof                       @508      0x0010ub1 kcvcpetb[0]                          @512      0x02ub1 kcvcpetb[1]                          @513      0x00ub1 kcvcpetb[2]                          @514      0x00ub1 kcvcpetb[3]                          @515      0x00ub1 kcvcpetb[4]                          @516      0x00ub1 kcvcpetb[5]                          @517      0x00ub1 kcvcpetb[6]                          @518      0x00ub1 kcvcpetb[7]                          @519      0x00BBED> p kcvfhcpc
ub4 kcvfhcpc                                @140      0x00000074BBED> p kcvfhccc
ub4 kcvfhccc                                @148      0x000000731号文件实际存储的值为:484 0x00110679 -> 79061100492 0x3ec81979-> 7919c83e140 0x00000074-> 74000000148 0x00000073 -> 73000000

bbed连接目标6号文件,进行修改:

BBED> set filename '/oracle/app/oradata/prod/bbed01.dbf'FILENAME        /oracle/app/oradata/prod/bbed01.dbfBBED> p kcvfhckp
struct kcvfhckp, 36 bytes                   @484     struct kcvcpscn, 8 bytes                 @484     ub4 kscnbas                           @484      0x00110654ub2 kscnwrp                           @488      0x0000ub4 kcvcptim                             @492      0x3ec8194cub2 kcvcpthr                             @496      0x0001union u, 12 bytes                        @500     struct kcvcprba, 12 bytes             @500     ub4 kcrbaseq                       @500      0x0000000aub4 kcrbabno                       @504      0x0000a894ub2 kcrbabof                       @508      0x0010ub1 kcvcpetb[0]                          @512      0x02ub1 kcvcpetb[1]                          @513      0x00ub1 kcvcpetb[2]                          @514      0x00ub1 kcvcpetb[3]                          @515      0x00ub1 kcvcpetb[4]                          @516      0x00ub1 kcvcpetb[5]                          @517      0x00ub1 kcvcpetb[6]                          @518      0x00ub1 kcvcpetb[7]                          @519      0x00现将6号数据文件偏移量484 492 500 140 148全部修改与1号文件一致BBED> modify /x  79061100 offset 484
BBED> modify /x  7919c83e offset 492
BBED> modify /x  74000000 offset 140
BBED> modify /x  73000000 offset 148修改后:
BBED>  p kcvfhckp
struct kcvfhckp, 36 bytes                   @484     struct kcvcpscn, 8 bytes                 @484     ub4 kscnbas                           @484      0x00110679ub2 kscnwrp                           @488      0x0000ub4 kcvcptim                             @492      0x3ec81979ub2 kcvcpthr                             @496      0x0001union u, 12 bytes                        @500     struct kcvcprba, 12 bytes             @500     ub4 kcrbaseq                       @500      0x0000000aub4 kcrbabno                       @504      0x0000a894ub2 kcrbabof                       @508      0x0010ub1 kcvcpetb[0]                          @512      0x02ub1 kcvcpetb[1]                          @513      0x00ub1 kcvcpetb[2]                          @514      0x00ub1 kcvcpetb[3]                          @515      0x00ub1 kcvcpetb[4]                          @516      0x00ub1 kcvcpetb[5]                          @517      0x00ub1 kcvcpetb[6]                          @518      0x00ub1 kcvcpetb[7]                          @519      0x00BBED> p kcvfhcpc
ub4 kcvfhcpc                                @140      0x00000074BBED> p kcvfhccc
ub4 kcvfhccc                                @148      0x00000073BBED> sum apply
Check value for File 0, Block 1:
current = 0xab75, required = 0xab75

再次查看SCN信息:

SQL> select file#,checkpoint_change# from v$datafile_header;FILE# CHECKPOINT_CHANGE#
---------- ------------------1            11157692            11157693            11157694            11157695            11157696            11157696 rows selected.SQL>  select file#,checkpoint_change#,last_change# from v$datafile;FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------1            11157692            11157693            11157694            11157695            11157696            1115769

尝试open打开数据库:

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01122: database file 6 failed verification check
ORA-01110: data file 6: '/oracle/app/oradata/prod/bbed01.dbf'
ORA-01207: file is more recent than control file - old control file重建控制文件:
SQL> alter database backup controlfile to trace as '/home/oracle/ctl.txt';
Database altered.[oracle@server1 ~]$ vim ctl.sql
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS  ARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 100MAXINSTANCES 8MAXLOGHISTORY 292
LOGFILEGROUP 1 '/oracle/app/oradata/prod/redo01.log'  SIZE 50M BLOCKSIZE 512,GROUP 2 '/oracle/app/oradata/prod/redo02.log'  SIZE 50M BLOCKSIZE 512,GROUP 3 '/oracle/app/oradata/prod/redo03.log'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE'/oracle/app/oradata/prod/system01.dbf','/oracle/app/oradata/prod/sysaux01.dbf','/oracle/app/oradata/prod/undotbs01.dbf','/oracle/app/oradata/prod/users01.dbf','/oracle/app/oradata/prod/example01.dbf','/oracle/app/oradata/prod/bbed01.dbf'
CHARACTER SET ZHS16GBKSQL> shutdown immediate;
SQL> @ctl.sql
Control file created.SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/oracle/app/oradata/prod/system01.dbf'SQL> recover database;
Media recovery complete.
SQL> alter database open;
Database altered.数据库成功启动。
SQL> select count(*) from t1;COUNT(*)
----------173914

恢复成功

本次修改了offset 484 492 140 148

其他有关bbed的案例:

Oracle BBED工具介绍与安装

Oracle BBED利用copy命令恢复已删除的记录

Oracle BBED修改数据块进而修改数据

Oracle BBED全库跳过丢失的归档继续恢复

Oracle BBED单个数据文件跳过丢失的归档继续恢复

Oracle BBED单个数据文件跳过所有归档恢复

Oracle BBED将offline的数据文件改为online案例

Oracle BBED单个数据文件跳过所有归档恢复相关推荐

  1. oracle数据库单个数据文件的大小限制

    之前没有仔细想过这个问题,因为总是不会用到,也没有犯过类似错误. 顺便提一下学习方法吧. 卤肉的学习方法是:常用知识点,熟悉理论并反复做实验,深入理解:不常用的知识点,相关内容都了解大概,遇到问题时想 ...

  2. BBED修改数据文件的SCN

    BBED修改数据文件的SCN 1.编译BBED make: *** No rule to make target `ins_rdbms.mk'. Stop. [oracle@linux2 oracle ...

  3. oracle表空间文件离线,oracle 表空间 数据文件 笔记

    数据文件命令 Enabling and Disabling Automatic Extension for a Datafile: ALTER TABLESPACE users ADD DATAFIL ...

  4. oracle 磁盘不分区吗,LINUX停ORACLE软件、数据文件等所在的磁盘分区空间不足的解决思路...

    LINUX下ORACLE软件.数据文件等所在的磁盘分区空间不足的解决思路 虚拟机中的ORACLE运行的久了,归档.数据文件不断增长,原来安装ORACLE的分区空间不足. 此时可以重新向虚拟机增加一块硬 ...

  5. oracle表独立数据文件,oracle表空间及数据文件

    1. Oracle 的逻辑结构 数据库的物理结构是由数据库的操作系统文件所决定,每一个 Oracle 数据库是由三种类型的文件组成:数据文件.日志文件和控制文件.数据库的文件为数据库信息提供真正的物理 ...

  6. oracle 文件大小为零,windows Oracle数据文件大小为0的恢复case

    本站文章除注明转载外,均为本站原创: 转载自love wife love life -Roger 的Oracle技术博客 本文链接地址: windows Oracle数据文件大小为0的恢复case 一 ...

  7. oracle 表空间的数据文件丢失或损坏的恢复

    表空间的数据文件丢失或损坏的恢复 select ts#,file#,name from v$datafile; 查看表空间和编号 删除一个表空间文件 此时关闭数据库 再开启时发现系统提醒缺少文件 使用 ...

  8. Oracle单个数据文件超过32G后需要扩容

    表空间数据文件容量与DB_BLOCK_SIZE的设置有关,而这个参数在创建数据库实例的时候就已经指定.DB_BLOCK_SIZE参数可以设置为4K.8K.16K.32K.64K等几种,Oracle的物 ...

  9. oracle 如何添加数据文件,Oracle教程 误添加数据文件删除方法

    如果是在Oracle10g之前,删除一个表空间中的数据文件后,其文件在数据库数据字典中会仍然存在,除非你删除表空间,否则文件信息不会清除. 但是从Oracle10gR2开始,Oracle允许我们彻底删 ...

最新文章

  1. python scrapy 抓取脚本之家文章(scrapy 入门使用简介)
  2. dosubmit 成功不成功_供卵试管不成功的原因是什么?一般几次成功?
  3. 锁相放大器sr830_各位谁会用Stanford SR830啊,我都快被这个锁相放大器折腾死了!!!!-北京搜狐焦点...
  4. 阿里大数据中台12年建设经验的精华总结!一次性说清!
  5. appcrash事件怎么解决_突发事件中身心容易紧张焦虑,该如何控制心理压力与情绪?...
  6. Python之数据分析(Numpy数据可视化:等高线图、热力图、饼图)
  7. 【机房收费系统C#版】——导出Excel
  8. QQ空间过滤器 更新记录 (最新版本 2.3)
  9. 信鸽推送接收通知点击打开相应Activity
  10. matlab 画三维图像
  11. 阅读“变形计”:一场偶然与非偶然的相遇
  12. day4-反爬和正则
  13. 第一章 【数据分析师---数据可视化1】 matplotlib 静态图,无互动
  14. POJ 2503 Babelfish(map)
  15. ZONe Energy Programming Contest E - Sneaking (最短路)
  16. python解常微分方程龙格库_数值常微分方程-欧拉法与龙格-库塔法
  17. mac book 华为C8815不能debug
  18. 数据预处理之scaling
  19. 用Python批量下载DACC的MODIS数据
  20. 计算机一级扫描件,学院年终科研成果统计提交成果扫描件要求

热门文章

  1. oracle的show语句,Oracle查询语句应用经验总结
  2. 合肥学院计算机专业大二课程,合肥学院12软件工程大二上课程表
  3. 设置日期格式为ISO8601格式
  4. 无需安装其他软件就快速剪裁规定像素文件大小的照片
  5. 服务器和客户端程序(流星程序集之五)
  6. 淘宝特价版新上线新品孵化活动,详细内容介绍[全平台插旗备注接口]
  7. 快递单号查询API接口对接Java源码示例_快递鸟
  8. GMQ致力于为用户提供更多符合当代需求的应用
  9. 计算机财务管理递延年金,递延年金,你真的搞懂了吗?
  10. 小鳄鱼和一年以上余额组合调仓说明