这篇文章将为大家详细讲解有关rman备份发生sysaux表空间丢失该怎么办,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

今天突发奇想,想玩一下rman这个命令,自己虚拟机好久都没有备份了,所以就来个全备,果不其然给了我一个报错。

RMAN>backupStartingbackupat20-OCT-16allocatedchannel:ORA_DISK_1channelORA_DISK_1:SID=134devicetype=DISKRMAN-06169:couldnotreadfileheaderfordatafile2errorreason1RMAN-00571:===========================================================RMAN-00569:===============ERRORMESSAGESTACKFOLLOWS===============RMAN-00571:===========================================================RMAN-03002:failureofbackupcommandat10/20/201605:19:19RMAN-06056:couldnotaccessdatafile2

然后进入数据库开始查询为什么不能备份

SQL>selectfile#,namefromv$datafile;FILE#----------NAME--------------------------------------------------------------------------------1/u01/oracle/product/oradata/wrc/system01.dbf2/u01/oracle/product/11.2.0/db_1/dbs/MISSING000023/u01/oracle/product/oradata/wrc/undotbs01.dbfFILE#----------NAME--------------------------------------------------------------------------------4/u01/oracle/product/oradata/wrc/users01.dbf5/u01/oracle/product/11.2.0/db_1/dbs/MISSING000056/u01/oracle/product/11.2.0/db_1/dbs/MISSING000066rowsselected.SQL>selectTS#,namefromv$tablespace;TS#NAME----------------------------------------0SYSTEM2UNDOTBS14USERS1SYSAUX3TEMP6EXAMPLE7RMAN

发现这两个命令不能告诉我到底哪个表空间丢失了,后来上网查资料

SQL>selecta.file#,a.name,b.namefromv$datafilea,v$tablespacebwherea.ts#=b.ts#2;FILE#NAMENAME----------------------------------------------------------------------1/u01/oracle/product/oradata/wrSYSTEMc/system01.dbf2/u01/oracle/product/11.2.0/db_SYSAUX1/dbs/MISSING000023/u01/oracle/product/oradata/wrUNDOTBS1c/undotbs01.dbf4/u01/oracle/product/oradata/wrUSERSc/users01.dbfFILE#NAMENAME----------------------------------------------------------------------5/u01/oracle/product/11.2.0/db_EXAMPLE1/dbs/MISSING000056/u01/oracle/product/11.2.0/db_RMAN1/dbs/MISSING000066rowsselected.

一查询丢失三个文件,然后就开始想办法解决

rman这个表空间是最好删的,但是不要忘记删的时候要

includingcontentsanddatafiles

然后后来开始删除example这个表空间,这个显示有index以及关系所以不能删除,当时找了下确实有对象,删除所有对象再删除这个表空间应该也是可以的,最后到了sysaux这个表空间,sysaux这个表空间虽然是系统表空间,system表空间的辅助表空间,例如存放一些报告信息等,基本不会对性能有啥影像。

第一种方式

SQL>droptablespacesysauxincludingcontentsanddatafiles;droptablespacesysauxincludingcontentsanddatafiles*ERRORatline1:ORA-13501:CannotdropSYSAUXtablespace

第二种方式

SQL>alterdatabasedatafile2offlinedrop2;Databasealtered.SQL>selecta.file#,a.name,b.namefromv$datafilea,v$tablespacebwherea.ts#=b.ts#;FILE#----------NAME--------------------------------------------------------------------------------NAME------------------------------1/u01/oracle/product/oradata/orcl/system01.dbfSYSTEM2/u01/oracle/product/oradata/orcl/sysaux01.dbfSYSAUXFILE#----------NAME--------------------------------------------------------------------------------NAME------------------------------3/u01/oracle/product/oradata/orcl/undotbs01.dbfUNDOTBS14/u01/oracle/product/oradata/orcl/users01.dbfFILE#----------NAME--------------------------------------------------------------------------------NAME------------------------------USERS5/u01/oracle/product/oradata/orcl/example01.dbfEXAMPLE

可以看出来明显都是没有删掉的,这个时候开始思考这个sysaux是不是写入控制文件,所以你不管怎么删都是删不掉,后来就开始想通过初始化控制文件,看能不能成功。

先创建脚本

SELECTd.VALUE||'/'||LOWER(RTRIM(i.INSTANCE,CHR(0)))||'_ora_'||p.spid||'.trc'trace_file_nameFROM(SELECTp.spidFROMv$mystatm,v$sessions,v$processpWHEREm.statistic#=1ANDs.SID=m.SIDANDp.addr=s.paddr)p,(SELECTt.INSTANCEFROMv$threadt,v$parametervWHEREv.NAME='thread'AND(v.VALUE=0ORt.thread#=TO_NUMBER(v.VALUE)))i,(SELECTVALUEFROMv$parameterWHERENAME='user_dump_dest')d/

在Linux下执行该脚本

SQL>@gettrcnameTRACE_FILE_NAME---------------------------------------------------------------------------------------------------/opt/oracle/admin/eygle/udump/eygle_ora_8415.trcalterdatabasebackupcontrolfiletotrace;

通过看这个eygle_ora_8415.trc文件,编辑重新创建控制文件

STARTUPNOMOUNTCREATECONTROLFILEREUSEDATABASE"ORCL"RESETLOGSnoARCHIVELOGMAXLOGFILES5MAXLOGMEMBERS3MAXDATAFILES100MAXINSTANCES1MAXLOGHISTORY1168LOGFILEGROUP1'/u01/oracle/product/oradata/wrc/redo01.log'SIZE50MBLOCKSIZE512,GROUP2'/u01/oracle/product/oradata/wrc/redo02.log'SIZE50MBLOCKSIZE512,GROUP3'/u01/oracle/product/oradata/wrc/redo03.log'SIZE50MBLOCKSIZE512,GROUP4'/u01/oracle/product/oradata/wrc/redo04.rdo'SIZE50MBLOCKSIZE512--STANDBYLOGFILEDATAFILE'/u01/oracle/product/oradata/wrc/system01.dbf','/u01/oracle/product/11.2.0/db_1/dbs/sysaux02.dbf','/u01/oracle/product/oradata/wrc/undotbs01.dbf','/u01/oracle/product/oradata/wrc/users01.dbf','/u01/oracle/product/11.2.0/db_1/dbs/sysaux03.dbf','/u01/oracle/product/11.2.0/db_1/dbs/sysaux04.dbf'CHARACTERSETZHS16GBK;

进入sqlplus跑这个脚本,然后开始进行数据库的恢复,突然发现又来个错误

SQL>RECOVERDATABASEORA-00283:recoverysessioncanceledduetoerrorsORA-01610:recoveryusingtheBACKUPCONTROLFILEoptionmustbedoneSQL>alterdatabasearchivelog;Databasealtered.

1. recover database using backup controlfile

如果丢失当前控制文件,用冷备份的控制文件恢复的时候,用来告诉oracle,不要以controlfile中的scn作为恢复的终点;

2. recover database until cancel

如果丢失current/active redo的时候,手动指定终点。

3. recover database using backup controlfile until cancel;

如果丢失当前controlfile并且current/active redo都丢失,会先去自动应用归档日志,可以实现最大的恢复;

4. recover database until cancel using backup controlfile;

结果如下:

如果控制文件丢失,restore备份的控制文件后,则必须使用using backup controlfile选项。而until cancel则是不完全恢复,即current/active redo丢失,或者从restore数据库后某个归档文件缺失,则终止。

结论:

1、适用于restore旧的控制文件,且归档日志和cuurrent/active redo都没有丢失情况。如果一切归档日志和在线日志完好,可以不丢失数据。类似于recover database

2、当前控制文件未丢失(不需要restore旧的控制文件),此时有归档日志或者current/active log有丢失情况下,则终止。最大可能恢复数据

3、4:我在oracle 10.2.0.4环境下测试效果是相同的,即适用于restore旧的控制文件,在恢复到控制文件备份那刻后,系统会提示应用控制文件备份后的归档日志,如果没有则停止。也是最大可能的恢复数据。

SQL>alterdatabasearchivelog;Databasealtered.SQL>recoverdatabaseusingbackupcontrolfileuntilcancel;ORA-00279:change1995899generatedat10/20/201607:46:55neededforthread1ORA-00289:suggestion:/u01/oracle/product/flash_recovery_area/ORCL/archivelog/2016_10_20/o1_mf_1_47_%u_.arcORA-00280:change1995899forthread1isinsequence#47Specifylog:{<RET>=suggested|filename|AUTO|CANCEL}/u01/oracle/product/oradata/wrc/redo04.rdoORA-00310:archivedlogcontainssequence45;sequence47requiredORA-00334:archivedlog:'/u01/oracle/product/oradata/wrc/redo04.rdo'SQL>/u01/oracle/product/oradata/wrc/redo04.rdoSP2-0734:unknowncommandbeginning"/u01/oracl..."-restoflineignored.SQL>recoverdatabaseusingbackupcontrolfileuntilcancel;ORA-00279:change1995899generatedat10/20/201607:46:55neededforthread1ORA-00289:suggestion:/u01/oracle/product/flash_recovery_area/ORCL/archivelog/2016_10_20/o1_mf_1_47_%u_.arcORA-00280:change1995899forthread1isinsequence#47Specifylog:{<RET>=suggested|filename|AUTO|CANCEL}/u01/oracle/product/oradata/wrc/redo03.logLogapplied.Mediarecoverycomplete.

发现control file里面找不到sequence#47,然后只能一个一个redo日志的位置来试,最后成功了

SQL>alterdatabaseopen;alterdatabaseopen*ERRORatline1:ORA-01589:mustuseRESETLOGSorNORESETLOGSoptionfordatabaseopenSQL>alterdatabaseopenresetlogs;Databasealtered.

最后开启数据库,需要制定是resetlogs还是noresetlogs模式下,但是发现还是不行,sysaux还是依旧存在,说明sysaux丢失是不能挽救的,需要重新创库。

关于rman备份发生sysaux表空间丢失该怎么办就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。