[20210225]控制文件序列号满的恢复.txt --//继续昨天的测试,今天主要是测试恢复. --//我想给自己增加一点点难度,就是使用noresetlogs打开,因为这样重建的控制文件要读取redo,数据文件重新 --//回填一些信息,实际上resetlogs也类似,但是noresetlogs回填的控制文件seq很大,一样打不开数据库. --//也就是必须提到我前面要修改的数据文件以及redo文件的几个偏移位置. 1.环境: SCOTT@book> @ ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production --//首先做一个冷备份便于重复测试: $ cp /mnt/ramdisk/book/*.* /u01/tmp/ */ 2.首先注意要修改的位置: $ seq 6 | xargs -IQ echo "p dba Q,1 kcvfh.kcvfhhdr.kccfhcsq" | rlbbed| grep kccfhcsq BBED> ub4 kccfhcsq @40 0xffffffff BBED> ub4 kccfhcsq @40 0xffffffff BBED> ub4 kccfhcsq @40 0xffffffff BBED> ub4 kccfhcsq @40 0xffffffff BBED> ub4 kccfhcsq @40 0xffffffff BBED> ub4 kccfhcsq @40 0xffffffff --//数据文件块1的偏移40的位置. $ seq 501 503 | xargs -IQ echo "dump /v dba Q,1 offset 36 count 8" | rlbbed | grep 00900100 f8ffffff 00900100 l ........ fcffffff 00900100 l ........ fcffffff 00900100 l ........ --//redo文件的位置. $ echo 15,17,281,319 | tr ',' '\n' | xargs -IQ echo -e 'set dba 101,Q\ndump /v offset 8 count 8' | rlbbed | grep -C2 "\-\-" BBED> File: /mnt/ramdisk/book/control01.ctl (101) Block: 15 Offsets: 8 to 15 Dba:0x1940000f ----------------------------------------------------------------------------------------------------------- ffffffff ffff0104 l ........ -- BBED> File: /mnt/ramdisk/book/control01.ctl (101) Block: 17 Offsets: 8 to 15 Dba:0x19400011 ----------------------------------------------------------------------------------------------------------- ffffffff ffff0104 l ........ -- BBED> File: /mnt/ramdisk/book/control01.ctl (101) Block: 281 Offsets: 8 to 15 Dba:0x19400119 ----------------------------------------------------------------------------------------------------------- 85ffffff ffff0104 l ........ -- BBED> File: /mnt/ramdisk/book/control01.ctl (101) Block: 319 Offsets: 8 to 15 Dba:0x1940013f ----------------------------------------------------------------------------------------------------------- 83ffffff ffff0104 l ........ --//控制文件的位置,以上内容是昨天的分析.控制文件的修改比较麻烦我重建使用noresetlogs建立,主要这样修改我不确定这样操作是否 --//会遗漏. 3.修改脚本准备: $ seq 6 | xargs -IQ echo -e "assign dba Q,1 kcvfh.kcvfhhdr.kccfhcsq=0x77770000\nsum apply dba Q,1" assign dba 1,1 kcvfh.kcvfhhdr.kccfhcsq=0x77770000 sum apply dba 1,1 assign dba 2,1 kcvfh.kcvfhhdr.kccfhcsq=0x77770000 sum apply dba 2,1 assign dba 3,1 kcvfh.kcvfhhdr.kccfhcsq=0x77770000 sum apply dba 3,1 assign dba 4,1 kcvfh.kcvfhhdr.kccfhcsq=0x77770000 sum apply dba 4,1 assign dba 5,1 kcvfh.kcvfhhdr.kccfhcsq=0x77770000 sum apply dba 5,1 assign dba 6,1 kcvfh.kcvfhhdr.kccfhcsq=0x77770000 sum apply dba 6,1 --//手工执行如上命令.如果不想手工执行,必须在第2行加上Y,这样可以通过管道执行. $ cat aa.txt assign dba 1,1 kcvfh.kcvfhhdr.kccfhcsq=0x77770000 Y sum apply dba 1,1 assign dba 2,1 kcvfh.kcvfhhdr.kccfhcsq=0x77770000 sum apply dba 2,1 assign dba 3,1 kcvfh.kcvfhhdr.kccfhcsq=0x77770000 sum apply dba 3,1 assign dba 4,1 kcvfh.kcvfhhdr.kccfhcsq=0x77770000 sum apply dba 4,1 assign dba 5,1 kcvfh.kcvfhhdr.kccfhcsq=0x77770000 sum apply dba 5,1 assign dba 6,1 kcvfh.kcvfhhdr.kccfhcsq=0x77770000 sum apply dba 6,1 --//修改redo文件: $ seq 501 503 | xargs -IQ echo -e "modify /x 77770000 dba Q,1 offset 36\nsum apply dba Q,1" modify /x 77770000 dba 501,1 offset 36 sum apply dba 501,1 modify /x 77770000 dba 502,1 offset 36 sum apply dba 502,1 modify /x 77770000 dba 503,1 offset 36 sum apply dba 503,1 --//我按照输出修改如下: $ cat bb.txt modify /x 17770000 dba 501,1 offset 36 Y sum apply dba 501,1 modify /x 57770000 dba 502,1 offset 36 sum apply dba 502,1 modify /x 37777000 dba 503,1 offset 36 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sum apply dba 503,1 --//注:下划线的地方我修改错误. 4.建立建立控制文件脚本: --//这个过程略,在mount阶段(不能使用当前的控制文件,可以使用备份的控制文件),执行alter database backup controlfile to trace. --//也可以手工建立: $ cat /tmp/aa.txt STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "BOOK" NORESETLOGS FORCE LOGGING ARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/mnt/ramdisk/book/redo01.log' SIZE 50M BLOCKSIZE 512, GROUP 2 '/mnt/ramdisk/book/redo02.log' SIZE 50M BLOCKSIZE 512, GROUP 3 '/mnt/ramdisk/book/redo03.log' SIZE 50M BLOCKSIZE 512 -- STANDBY LOGFILE -- GROUP 4 '/mnt/ramdisk/book/redostb01.log' SIZE 50M BLOCKSIZE 512, -- GROUP 5 '/mnt/ramdisk/book/redostb02.log' SIZE 50M BLOCKSIZE 512, -- GROUP 6 '/mnt/ramdisk/book/redostb03.log' SIZE 50M BLOCKSIZE 512, -- GROUP 7 '/mnt/ramdisk/book/redostb04.log' SIZE 50M BLOCKSIZE 512 DATAFILE '/mnt/ramdisk/book/system01.dbf', '/mnt/ramdisk/book/sysaux01.dbf', '/mnt/ramdisk/book/undotbs01.dbf', '/mnt/ramdisk/book/users01.dbf', '/mnt/ramdisk/book/example01.dbf', '/mnt/ramdisk/book/tea01.dbf' CHARACTER SET ZHS16GBK ; 5.开始恢复: $ cat aa.txt | rlbbed $ cat bb.txt | rlbbed --//输出略. --//检查: $ seq 6 | xargs -IQ echo "p dba Q,1 kcvfh.kcvfhhdr.kccfhcsq" | rlbbed| grep kccfhcsq BBED> ub4 kccfhcsq @40 0x77770000 BBED> ub4 kccfhcsq @40 0x77770000 BBED> ub4 kccfhcsq @40 0x77770000 BBED> ub4 kccfhcsq @40 0x77770000 BBED> ub4 kccfhcsq @40 0x77770000 BBED> ub4 kccfhcsq @40 0x77770000 $ seq 501 503 | xargs -IQ echo "dump /v dba Q,1 offset 36 count 8" | rlbbed | grep 00900100 17770000 00900100 l .w...... 57770000 00900100 l Ww...... 37777000 00900100 l 7wp..... ~~~~~~~~~~ --//这里输入错误. --//建立控制文件. SYS@book> @ /tmp/aa.txt ORACLE instance started. Total System Global Area 643084288 bytes Fixed Size 2255872 bytes Variable Size 205521920 bytes Database Buffers 427819008 bytes Redo Buffers 7487488 bytes Control file created. $ dbv file=/mnt/ramdisk/book/control01.ctl blocksize=16384 DBVERIFY: Release 11.2.0.4.0 - Production on Thu Feb 25 09:19:00 2021 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. DBVERIFY - Verification starting : FILE = /mnt/ramdisk/book/control01.ctl DBVERIFY - Verification complete Total Pages Examined : 614 Total Pages Processed (Data) : 0 Total Pages Failing (Data) : 0 Total Pages Processed (Index): 0 Total Pages Failing (Index): 0 Total Pages Processed (Other): 29 Total Pages Processed (Seg) : 0 Total Pages Failing (Seg) : 0 Total Pages Empty : 585 Total Pages Marked Corrupt : 0 Total Pages Influx : 0 Total Pages Encrypted : 0 Highest block SCN : 2004287491 (65535.2004287491) --//2004287491 = 0x77770003. --//昏后面的3从哪里跑出来的,估计哪里搞错了. BBED> dump /v dba 101,1 Offset 40 count 8 File: /mnt/ramdisk/book/control01.ctl (101) Block: 1 Offsets: 40 to 47 Dba:0x19400001 ----------------------------------------------------------------------------------------------------------- 04007777 66020000 l ..wwf... <32 bytes per line> --//昏前面的修改错误.大小头问题搞晕了.bbed的修改应该是0x00007777,所以做这类恢复工作要小心小心在小心.前面的检查也没注意. --//还有就是redo修改脚本也存在错误. $ cat aa.txt assign dba 1,1 kcvfh.kcvfhhdr.kccfhcsq=0x00007777 Y sum apply dba 1,1 assign dba 2,1 kcvfh.kcvfhhdr.kccfhcsq=0x00007777 sum apply dba 2,1 assign dba 3,1 kcvfh.kcvfhhdr.kccfhcsq=0x00007777 sum apply dba 3,1 assign dba 4,1 kcvfh.kcvfhhdr.kccfhcsq=0x00007777 sum apply dba 4,1 assign dba 5,1 kcvfh.kcvfhhdr.kccfhcsq=0x00007777 sum apply dba 5,1 assign dba 6,1 kcvfh.kcvfhhdr.kccfhcsq=0x00007777 sum apply dba 6,1 $ cat aa.txt | rlbbed $ seq 6 | xargs -IQ echo "p dba Q,1 kcvfh.kcvfhhdr.kccfhcsq" | rlbbed| grep kccfhcsq BBED> ub4 kccfhcsq @40 0x00007777 BBED> ub4 kccfhcsq @40 0x00007777 BBED> ub4 kccfhcsq @40 0x00007777 BBED> ub4 kccfhcsq @40 0x00007777 BBED> ub4 kccfhcsq @40 0x00007777 BBED> ub4 kccfhcsq @40 0x00007777 --//建立控制文件的步骤从来. SYS@book> @ /tmp/aa.txt ORACLE instance started. Total System Global Area 643084288 bytes Fixed Size 2255872 bytes Variable Size 205521920 bytes Database Buffers 427819008 bytes Redo Buffers 7487488 bytes Control file created. $ dbv file=/mnt/ramdisk/book/control01.ctl blocksize=16384 DBVERIFY: Release 11.2.0.4.0 - Production on Thu Feb 25 09:28:18 2021 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. DBVERIFY - Verification starting : FILE = /mnt/ramdisk/book/control01.ctl DBVERIFY - Verification complete Total Pages Examined : 614 Total Pages Processed (Data) : 0 Total Pages Failing (Data) : 0 Total Pages Processed (Index): 0 Total Pages Failing (Index): 0 Total Pages Processed (Other): 29 Total Pages Processed (Seg) : 0 Total Pages Failing (Seg) : 0 Total Pages Empty : 585 Total Pages Marked Corrupt : 0 Total Pages Influx : 0 Total Pages Encrypted : 0 Highest block SCN : 7370554 (65535.7370554) --//7370554 = 0x70773a BBED> dump /v dba 101,1 Offset 40 count 8 File: /mnt/ramdisk/book/control01.ctl (101) Block: 1 Offsets: 40 to 47 Dba:0x19400001 ----------------------------------------------------------------------------------------------------------- 3b777000 66020000 l ;wp.f... <32 bytes per line> --//先不管它,.看看是否可以open. --//昏事后仔细检查我前面的脚本写成如下: modify /x 37777000 dba 503,1 offset 36 --//多写了一个7.颠倒就是0x00707737 = 7370551,这样比较接近了. SYS@book> alter database open ; alter database open * ERROR at line 1: ORA-01113: file 1 needs media recovery ORA-01110: data file 1: '/mnt/ramdisk/book/system01.dbf' SYS@book> recover database ; Media recovery complete. SYS@book> alter database open ; Database altered. SYS@book> select CONTROLFILE_SEQUENCE# from v$database; CONTROLFILE_SEQUENCE# --------------------- 7370584 --//OK恢复成功. 5.重来: --//从冷备份恢复. SYS@book> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. $ /bin/cp /u01/tmp/* /mnt/ramdisk/book/ */ $ cat aa.txt assign dba 1,1 kcvfh.kcvfhhdr.kccfhcsq=0x00007777 Y sum apply dba 1,1 assign dba 2,1 kcvfh.kcvfhhdr.kccfhcsq=0x00007777 sum apply dba 2,1 assign dba 3,1 kcvfh.kcvfhhdr.kccfhcsq=0x00007777 sum apply dba 3,1 assign dba 4,1 kcvfh.kcvfhhdr.kccfhcsq=0x00007777 sum apply dba 4,1 assign dba 5,1 kcvfh.kcvfhhdr.kccfhcsq=0x00007777 sum apply dba 5,1 assign dba 6,1 kcvfh.kcvfhhdr.kccfhcsq=0x00007777 sum apply dba 6,1 $ cat bb.txt modify /x 17770000 dba 501,1 offset 36 Y sum apply dba 501,1 modify /x 57770000 dba 502,1 offset 36 sum apply dba 502,1 modify /x 37770000 dba 503,1 offset 36 sum apply dba 503,1 --//其它步骤忽略. $ dbv file=/mnt/ramdisk/book/control01.ctl blocksize=16384 2>&1 | grep Highest Highest block SCN : 30586 (65535.30586) --//30586 = 0x777a,这样与我的测试接近了. SYS@book> alter database open ; alter database open * ERROR at line 1: ORA-01113: file 1 needs media recovery ORA-01110: data file 1: '/mnt/ramdisk/book/system01.dbf' SYS@book> recover database ; Media recovery complete. SYS@book> alter database open ; Database altered. SYS@book> select CONTROLFILE_SEQUENCE# from v$database; CONTROLFILE_SEQUENCE# --------------------- 30616 --//30616= 0x7798. RMAN> list incarnation ; using target database control file instead of recovery catalog List of Database Incarnations DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time ------- ------- -------- ---------------- --- ---------- ---------- 1 1 BOOK 1337401710 CURRENT 925702 2015-11-24 09:11:12 --//没有生成新的incarnation 6.收尾: --//执行如下,里面的脚本选择性执行: -- Configure RMAN configuration record 1 VARIABLE RECNO NUMBER; EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON'); -- Configure RMAN configuration record 2 VARIABLE RECNO NUMBER; EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('DEVICE TYPE','DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET'); -- Configure RMAN configuration record 3 VARIABLE RECNO NUMBER; EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('DEFAULT DEVICE TYPE TO','DISK'); -- Commands to re-create incarnation table -- Below log names MUST be changed to existing filenames on -- disk. Any one log file from each branch can be used to -- re-create incarnation records. -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/archivelog/book/1_1_824297850.dbf'; -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/archivelog/book/1_1_896605872.dbf'; -- Recovery is required if any of the datafiles are restored backups, -- or if the last shutdown was not normal or immediate. RECOVER DATABASE -- All logs need archiving and a log switch is needed. ALTER SYSTEM ARCHIVE LOG ALL; -- Database can now be opened normally. ALTER DATABASE OPEN; -- Commands to add tempfiles to temporary tablespaces. -- Online tempfiles have complete space information. -- Other tempfiles may require adjustment. ALTER TABLESPACE TEMP ADD TEMPFILE '/mnt/ramdisk/book/temp01.dbf' REUSE; -- End of tempfile additions. -- -- -- ---------------------------------------------------------- -- The following script can be used on the standby database -- to re-populate entries for a standby controlfile created -- on the primary and copied to the standby site. ---------------------------------------------------------- ALTER DATABASE ADD STANDBY LOGFILE '/mnt/ramdisk/book/redostb01.log' SIZE 50M BLOCKSIZE 512 REUSE; ALTER DATABASE ADD STANDBY LOGFILE '/mnt/ramdisk/book/redostb02.log' SIZE 50M BLOCKSIZE 512 REUSE; ALTER DATABASE ADD STANDBY LOGFILE '/mnt/ramdisk/book/redostb03.log' SIZE 50M BLOCKSIZE 512 REUSE; ALTER DATABASE ADD STANDBY LOGFILE '/mnt/ramdisk/book/redostb04.log' SIZE 50M BLOCKSIZE 512 REUSE; 7.总结: --//有点乱,但是记录我整个操作过程.我之所以这样写,便于以后回忆总结,也避免一些低级错误. --//建议遇到这类文件选择重建控制文件选择resetlogs,不建议像我这样操作,我自不过当作练刀过程. 8.补充说明: --//前面我提到的rlbbed我建立的bash shell函数,你可以使用别名代替,效果一样的. $ export RLWRAP=$(which rlwrap) $ type rlbbed rlbbed is a function rlbbed () { cd /home/oracle/bbed; $RLWRAP -s 9999 -c -r -i -f /usr/local/share/rlwrap/bbed $ORACLE_HOME/bin/bbed parfile=bbed.par cmdfile=cmd.par } --//关于bbed配置看相关文档. $ cat cmd.par set count 64 set width 160 $ cat bbed.par blocksize=8192 listfile=$HOME/bbed/filelist.txt mode=edit PASSWORD=blockedit SPOOL=Y --//filelist.txt文件通过select file#||' '||name c100 from v$dbfile order by file#;生成.我增加了控制文件以及redo文件. --//还有临时文件. $ cat filelist.txt | grep -v "#" 4 /mnt/ramdisk/book/users01.dbf 1 /mnt/ramdisk/book/system01.dbf 2 /mnt/ramdisk/book/sysaux01.dbf 3 /mnt/ramdisk/book/undotbs01.dbf 5 /mnt/ramdisk/book/example01.dbf 6 /mnt/ramdisk/book/tea01.dbf 101 /mnt/ramdisk/book/control01.ctl 102 /mnt/ramdisk/book/control02.ctl 201 /mnt/ramdisk/book/temp01.dbf 501 /mnt/ramdisk/book/redo01.log 502 /mnt/ramdisk/book/redo02.log 503 /mnt/ramdisk/book/redo03.log 504 /mnt/ramdisk/book/redostb01.log
[20210225]控制文件序列号满的恢复.txt
来源:这里教程网
时间:2026-03-03 16:28:34
作者:
编辑推荐:
- [20210225]控制文件序列号满的恢复.txt03-03
- 记一次utlrp.sql脚本执行引发的结果03-03
- RMAN备份相关知识与技能总结03-03
- 群控的原理03-03
- oracle审计导致system表空间爆满的处理方法03-03
- Rax App 研发框架背后的思考03-03
- 源码级别人话说:Virtual DOM和DOM diff算法03-03
- 批量杀执行某条sql的session03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 记一次utlrp.sql脚本执行引发的结果
记一次utlrp.sql脚本执行引发的结果
26-03-03 - Rax App 研发框架背后的思考
Rax App 研发框架背后的思考
26-03-03 - 源码级别人话说:Virtual DOM和DOM diff算法
源码级别人话说:Virtual DOM和DOM diff算法
26-03-03 - oracle uncatalog数据库备份文件
oracle uncatalog数据库备份文件
26-03-03 - 记一次expdp导出任务中某张大表报错问题的解决过程
记一次expdp导出任务中某张大表报错问题的解决过程
26-03-03 - 数据库redolog切换频率统计分析
数据库redolog切换频率统计分析
26-03-03 - 【TUNE_ORACLE】Oracle索引设计思想(一)索引片和匹配列概述
- redolog内容分析
redolog内容分析
26-03-03 - 【TUNE_ORACLE】Oracle Hint之概念与用法
【TUNE_ORACLE】Oracle Hint之概念与用法
26-03-03 - 【BUILD_ORACLE】Oracle 19c RAC搭建(四)Grid软件安装
