oracle特殊恢复-bbed修改某个数据文件头
数据文件头中的scn要与控制文件中的scn一致,数据库才可以open,在open过程中我们可以通过bbed来修改某个数据文件头的scn,来欺骗oracle,来open库。
1、环境如下
使用Oracle 11gR2进行测试,具体版本为11.2.0.4
SYS@xbtstSQL>selectfile#,name,checkpoint_change#,checkpoint_timefromv$datafile;FILE#NAMECHECKPOINT_CHANGE#CHECKPOINT_TIME---------------------------------------------------------------------------------------1/dbdata/oradata/xbtst/system01.dbf12330662016-11-1011:23:442/dbdata/oradata/xbtst/sysaux01.dbf12330662016-11-1011:23:443/dbdata/oradata/xbtst/undotbs01.dbf12330662016-11-1011:23:444/dbdata/oradata/xbtst/users01.dbf12330662016-11-1011:23:445/dbdata/oradata/xbtst/moe01.dbf12330662016-11-1011:23:44
2、模拟某个数据文件在问题
shutdown immediate数据库,然后拷贝moe01.dbf这个数据文件,然后打开数据库,做日志切换,然后shutdown immediate,再把之前的拷贝替换现在的moe01.dbf数据文件
SYS@xbtstSQL>shutdownimmediateDatabaseclosed.Databasedismounted.ORACLEinstanceshutdown.[oracle@tstdb-25-220xbtst]$cpmoe01.dbfmoe01.dbf.bak[oracle@tstdb-25-220xbtst]$ll总用量3872076-rw-r-----.1oracleoinstall974848011月1009:48control01.ctl-rw-r-----.1oracleoinstall974848011月1009:48control02.ctl-rw-r-----.1oracleoinstall107375001611月1009:48moe01.dbf-rw-r-----.1oracleoinstall107375001611月1011:23moe01.dbf.bak-rw-r-----.1oracleoinstall5242931211月913:13redo01.log-rw-r-----.1oracleoinstall5242931211月922:00redo02.log-rw-r-----.1oracleoinstall5242931211月1009:48redo03.log-rw-r-----.1oracleoinstall58721075211月1009:48sysaux01.dbf-rw-r-----.1oracleoinstall80741171211月1009:48system01.dbf-rw-r-----.1oracleoinstall3041689611月922:00temp01.dbf-rw-r-----.1oracleoinstall13108019211月1009:48undotbs01.dbf-rw-r-----.1oracleoinstall11141939211月1009:48users01.dbfSYS@xbtstSQL>startupORACLEinstancestarted.TotalSystemGlobalArea2455228416bytesFixedSize2255712bytesVariableSize620758176bytesDatabaseBuffers1811939328bytesRedoBuffers20275200bytesDatabasemounted.Databaseopened.SYS@xbtstSQL>altersystemswitchlogfile;Systemaltered.SYS@xbtstSQL>altersystemswitchlogfile;Systemaltered.SYS@xbtstSQL>altersystemswitchlogfile;Systemaltered.SYS@xbtstSQL>shutdownimmediateDatabaseclosed.Databasedismounted.ORACLEinstanceshutdown.[oracle@tstdb-25-220xbtst]$cpmoe01.dbfmoe01.dbf.bak.f[oracle@tstdb-25-220xbtst]$cpmoe01.dbf.bakmoe01.dbf启动数据库报错SYS@xbtstSQL>startupORACLEinstancestarted.TotalSystemGlobalArea2455228416bytesFixedSize2255712bytesVariableSize620758176bytesDatabaseBuffers1811939328bytesRedoBuffers20275200bytesDatabasemounted.ORA-01113:file5needsmediarecoveryORA-01110:datafile5:'/dbdata/oradata/xbtst/moe01.dbf'SYS@xbtstSQL>recoverdatafile5;ORA-00279:change1233063generatedat11/10/201609:48:02neededforthread1ORA-00289:suggestion:/apps/oracle/11.2.0/db_1/dbs/arch2_24_925478204.dbfORA-00280:change1233063forthread1isinsequence#24Specifylog:{<RET>=suggested|filename|AUTO|CANCEL}autoORA-00308:cannotopenarchivedlog'/apps/oracle/11.2.0/db_1/dbs/arch2_24_925478204.dbf'ORA-27037:unabletoobtainfilestatusLinux-x86_64Error:2:NosuchfileordirectoryAdditionalinformation:3ORA-00308:cannotopenarchivedlog'/apps/oracle/11.2.0/db_1/dbs/arch2_24_925478204.dbf'ORA-27037:unabletoobtainfilestatusLinux-x86_64Error:2:NosuchfileordirectoryAdditionalinformation:3
3、场景模拟出来了,下面是修复过程
使用BBED,将文件头的SCN等关键信息修改到与控制文件control file相匹配即可
SYS@xbtstSQL>selectfile#,CHECKPOINT_CHANGE#fromv$datafile;FILE#CHECKPOINT_CHANGE#----------------------------1123369221233692312336924123369251233692SYS@xbtstSQL>selectCHECKPOINT_CHANGE#fromv$database;CHECKPOINT_CHANGE#------------------1233692SYS@xbtstSQL>selectfile#,recover,fuzzy,CHECKPOINT_CHANGE#fromv$datafile_header;FILE#RECFUZCHECKPOINT_CHANGE#----------------------------------1NONO12336922NONO12336923NONO12336924NONO12336925YESNO1233063
控制文件中datafile5的scn是:1233692,而数据文件头中的scn是:1233063
使用bbed将datafile5的数据文件头对应的SCN修改为与其他文件相同,我们先看一下users01.dbf这个文件的文件头
BBED>setfilename'/dbdata/oradata/xbtst/users01.dbf'FILENAME/dbdata/oradata/xbtst/users01.dbfBBED>setblock1BLOCK#1BBED>mapFile:/dbdata/oradata/xbtst/users01.dbf(0)Block:1Dba:0x00000000------------------------------------------------------------DataFileHeaderstructkcvfh,860bytes@0ub4tailchk@8188
因为我们要修改数据文件头,因此我们需要关注四个偏移量offset点,分别为484、492、140和148
1、datafile 的file header 存储在第一个block里
2、Oracle considers four attributes of this data structure when determining if a datafile is sync with the other data files of the database:(不同oracle版本offset可能不同)
(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错误
下面我们看下这几个offset
BBED>setoffset484OFFSET484BBED>dumpFile:/dbdata/oradata/xbtst/users01.dbf(0)Block:1Offsets:484to995Dba:0x00000000------------------------------------------------------------------------1cd3120000000000bd384937010000001b00000030010000100051f20200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d000d000d0001000000000000000000000000000200000103000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000<32bytesperline>BBED>setoffset492OFFSET492BBED>dumpFile:/dbdata/oradata/xbtst/users01.dbf(0)Block:1Offsets:492to1003Dba:0x00000000------------------------------------------------------------------------bd384937010000001b00000030010000100051f20200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d000d000d00010000000000000000000000000002000001030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000<32bytesperline>BBED>setoffset140OFFSET140BBED>dumpFile:/dbdata/oradata/xbtst/users01.dbf(0)Block:1Offsets:140to651Dba:0x00000000------------------------------------------------------------------------7800000014ff4737770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000005005553455253000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ac92131010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cd3120000000000bd384937010000001b00000030010000100051f20200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d000d000d000100<32bytesperline>BBED>setoffset148OFFSET148BBED>dumpFile:/dbdata/oradata/xbtst/users01.dbf(0)Block:1Offsets:148to659Dba:0x00000000------------------------------------------------------------------------770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000005005553455253000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ac92131010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cd3120000000000bd384937010000001b00000030010000100051f20200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d000d000d0001000000000000000000<32bytesperline>
其中,位于484和488偏移量的是数据文件对应的SCN编号。在Oracle内部,SCN是使用wrap*4*1024*1024*1024+base来进行标示的。通常我们看到的数据库wrap都是0。位于492偏移量的是最后一次检查点对应的时间信息。位于140和148偏移量的是检查点次数。这些信息都是会由于时间推动和检查点动作引起变化,我们严格情况下,需要保证文件头块的信息和控制文件信息一致。
另外一点,由于Linux是Little字节系统,要关注写入时候的格式问题。最简单的方式是dump一下偏移量,看看是怎么保存的。
BBED>dumpFile:/dbdata/oradata/xbtst/users01.dbf(0)Block:1Offsets:484to995Dba:0x00000000------------------------------------------------------------------------1cd3120000000000bd384937010000001b00000030010000100051f20200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
然后我们修改moe01.dbf的文件头(修改这几个offset,我这里只修改了484、492就可以open库了)
BBED>setfilename'/dbdata/oradata/xbtst/moe01.dbf'FILENAME/dbdata/oradata/xbtst/moe01.dbfBBED>setblock1BLOCK#1BBED>setmodeeditMODEEditBBED>setoffset484OFFSET484BBED>dumpFile:/dbdata/oradata/xbtst/moe01.dbf(0)Block:1Offsets:484to995Dba:0x00000000------------------------------------------------------------------------a7d01200000000005220493701000000180000004d8d0000100051f20200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d000d000d0001000000000000000000000000000200400100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000<32bytesperline>BBED>m/x1cd31200484Warning:contentsofpreviousBIFILEwillbelost.Proceed?(Y/N)yFile:/dbdata/oradata/xbtst/moe01.dbf(0)Block:1Offsets:484to995Dba:0x00000000------------------------------------------------------------------------1cd31200000000005220493701000000180000004d8d0000100051f20200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d000d000d0001000000000000000000000000000200400100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000<32bytesperline>BBED>m/xbd384937492BBED-00209:invalidnumber(bd384937)BBED>m/xbd38492File:/dbdata/oradata/xbtst/moe01.dbf(0)Block:1Offsets:492to1003Dba:0x00000000------------------------------------------------------------------------bd38493701000000180000004d8d0000100051f20200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d000d000d00010000000000000000000000000002004001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000<32bytesperline>BBED>m/x4937494File:/dbdata/oradata/xbtst/moe01.dbf(0)Block:1Offsets:494to1005Dba:0x00000000------------------------------------------------------------------------493701000000180000004d8d0000100051f20200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d000d000d000100000000000000000000000000020040010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000<32bytesperline>BBED>sumapplyCheckvalueforFile0,Block1:current=0x1683,required=0x1683BBED>verifyDBVERIFY-VerificationstartingFILE=/dbdata/oradata/xbtst/moe01.dbfBLOCK=1DBVERIFY-VerificationcompleteTotalBlocksExamined:1TotalBlocksProcessed(Data):0TotalBlocksFailing(Data):0TotalBlocksProcessed(Index):0TotalBlocksFailing(Index):0TotalBlocksEmpty:0TotalBlocksMarkedCorrupt:0TotalBlocksInflux:0Message531notfound;product=RDBMS;facility=BBED
这时我们再次查看各个数据文件头的scn,发现scn一致了
SYS@xbtstSQL>selectfile#,recover,fuzzy,CHECKPOINT_CHANGE#fromv$datafile_header;FILE#RECFUZCHECKPOINT_CHANGE#----------------------------------1NONO12336922NONO12336923NONO12336924NONO12336925YESNO1233692
试着open库
SYS@xbtstSQL>alterdatabaseopen2;alterdatabaseopen*ERRORatline1:ORA-01113:file5needsmediarecoveryORA-01110:datafile5:'/dbdata/oradata/xbtst/moe01.dbf'SYS@xbtstSQL>recoverdatafile5;Mediarecoverycomplete.SYS@xbtstSQL>alterdatabaseopen;Databasealtered.
看一下alert文件
ALTERDATABASERECOVERdatafile5MediaRecoveryStartSerialMediaRecoverystartedMediaRecoveryComplete(xbtst)Completed:ALTERDATABASERECOVERdatafile5ThuNov1013:47:242016alterdatabaseopenThuNov1013:47:252016Thread1openedatlogsequence27Currentlog#3seq#27mem#0:/dbdata/oradata/xbtst/redo03.logSuccessfulopenofredothread1MTTRadvisoryisdisabledbecauseFAST_START_MTTR_TARGETisnotsetThuNov1013:47:252016SMON:enablingcacherecovery[20910]SuccessfullyonlinedUndoTablespace2.Undoinitializationfinishedserial:0start:3710149144end:3710149224diff:80(0seconds)Verifyingfileheadercompatibilityfor11gtablespaceencryption..Verifying11gfileheadercompatibilityfortablespaceencryptioncompletedSMON:enablingtxrecoveryDatabaseCharactersetisAL32UTF8NoResourceManagerplanactivereplication_dependency_trackingturnedoff(noasyncmultimasterreplicationfound)StartingbackgroundprocessQMNCThuNov1013:47:252016QMNCstartedwithpid=20,OSid=21409Completed:alterdatabaseopen
在本次恢复过程中,recover是可行的,原因是该库并没做过resetlog,如果datafile是在 resetlog之前就已经offline的数据文件,那recover是不可行的。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。