♣
题目部分
在Oracle中,如果主库丢失归档文件,那么物理DG如何恢复?
♣
答案部分
面试DBA岗位,面试官对于DG环境常常会问到,若是主库丢失了归档文件,而这些归档文件还未来得及传递到备库,则物理备库是否只能通过重建的方式来恢复呢?这道面试题是作者亲身经历,当时以为只能重建备库,但最后经过查找文档找到了解决办法,可以通过对主库进行基于SCN的增量备份来恢复物理DG。
全过程简单有如下几个步骤:
第一步,主库创建基于SCN的增量备份:
首先要知道误删除或者丢失的归档日志是从哪个SCN开始的。视图V$ARCHIVED_LOG的FIRST_CHANGE#列能够查到归档日志对应的起始SCN。可以使用如下SQL查询最小的SCN:
1SELECT(SELECTMIN(D.CHECKPOINT_CHANGE#)FROMV$DATAFILED)DATAFILE_SCN,2(SELECTMIN(D.CHECKPOINT_CHANGE#)FROMV$DATAFILE_HEADERDWHEREROWNUM=1)DATAFILE_HEADER_SCN,3(SELECTCURRENT_SCNFROMV$DATABASE)CURRENT_SCN,4(SELECTMIN(B.NEXT_CHANGE#)FROMV$ARCHIVED_LOGB5WHEREB.SEQUENCE#IN(968,644)--这里修改成丢失的归档号6ANDRESETLOGS_CHANGE#=(SELECTD.RESETLOGS_CHANGE#FROMV$DATABASED))NEXT_CHANGE#7FROMDUAL;
若最小的SCN为750983,则在主库上使用BACKUP ... INCREMENTAL FROM SCN为主库做一个增量备份,这个操作会将整个库中SCN大于750983的BLOCK全备份出来,SQL如下:
1RUN{2ALLOCATECHANNELD1TYPEDISK;3ALLOCATECHANNELD2TYPEDISK;4ALLOCATECHANNELD3TYPEDISK;5ALLOCATECHANNELD4TYPEDISK;6BACKUPASCOMPRESSEDBACKUPSETINCREMENTALFROMSCN750983DATABASEFORMAT'/ARCHIVE/STANDBY_NEW_%D_%T_%U.BAK'INCLUDECURRENTCONTROLFILEFORSTANDBYFILESPERSET=5TAG'FORSTANDBYNEW';7RELEASECHANNELD1;8RELEASECHANNELD2;9RELEASECHANNELD3;10RELEASECHANNELD4;11}12listbackupsetofcontrolfile;--找到控制文件的备份集文件名
第二步,将备份的文件复制到备库端的空目录下
第三步,恢复备库的控制文件
在使用RMAN恢复备库的控制文件之前,需要将原来的控制文件进行手工的冷备并且记录下原来的控制文件中记录的数据文件的名称:
1SELECT''''||NAME||''';'FROMV$DATAFILE;--记录备库数据文件原名称及路径2startupforcenomount3cp+DATA/oranlhr/controlfile/control01.ctl+DATA/oranlhr/controlfile/control01.ctl_bk4restorestandbycontrolfilefrom'/home/oracle/bak/standby_TESTDG_0525_19t3q9sb_1_1.bak';5select'alterdatabaserenamefile'''||NAME||'''TO'FROMV$datafile;--查询恢复控制文件后备库数据文件的名称
第四步,在备库执行RECOVER操作:
1ALTERDATABASEMOUNT;2CATALOGSTARTWITH'/ARCHIVE/';34listincarnationofdatabase;5resetdatabasetoincarnation1;--应该和主库保持一致67--重命名备库的数据文件8altersystemsetstandby_file_management=manualsid='*';9alterdatabaserenamefile'+DATADG/testdg/datafile/system.274.976812987'TO'+DATADG/testdgphy/datafile/system.261.976877439';10......11alterdatabaserenamefile'+DATADG/testdg/datafile/undotbs2.286.976813901'TO'+DATADG/testdgphy/datafile/undotbs2.257.976877619';12altersystemsetstandby_file_management=autosid='*';1314--最后执行恢复操作15RECOVERDATABASENOREDO;
最后开启备库的实时应用进程,并且查询备库的日志应用情况:
1ALTERDATABASERECOVERMANAGEDSTANDBYDATABASEUSINGCURRENTLOGFILEDISCONNECTFROMSESSION;23COLNAMEFORA1004SETLINESIZE9999PAGESIZE99995COLNEXT_CHANGE#FOR9999999999999996SELECTTHREAD#,NAME,SEQUENCE#,ARCHIVED,APPLIED,A.NEXT_CHANGE#7FROMV$ARCHIVED_LOGA8WHEREA.SEQUENCE#>=(SELECTMAX(B.SEQUENCE#)-39FROMV$ARCHIVED_LOGB10WHEREB.THREAD#=A.THREAD#11ANDB.RESETLOGS_CHANGE#=A.RESETLOGS_CHANGE#12ANDB.RESETLOGS_CHANGE#=13(SELECTD.RESETLOGS_CHANGE#FROMV$DATABASED)14ANDB.APPLIED='YES'15GROUPBYB.THREAD#)16ORDERBYA.THREAD#,A.SEQUENCE#;
若需要恢复的文件比较多,则可以使用如下的SQL来查询恢复的进度:
1SELECTA.USERNAME,2(SELECTUPPER(NB.OSUSER)FROMV$SESSIONNBWHERENB.SID=A.SID)OSUSER,3(SELECTNB.SID||','||NB.SERIAL#||','||PR.SPID4FROMV$PROCESSPR,V$SESSIONNB5WHERENB.PADDR=PR.ADDR6ANDNB.SID=A.SID7ANDNB.SERIAL#=A.SERIAL#)SESSION_INFO,8A.TARGET,9A.OPNAME,10TO_CHAR(A.START_TIME,'YYYY-MM-DDHH24:MI:SS')START_TIME,11ROUND(A.SOFAR*100/A.TOTALWORK,2)||'%'ASPROGRESS,12(A.TIME_REMAINING)TIME_REMAINING,13(A.SOFAR||':'||A.TOTALWORK)SOFAR_TOTALWORK,14(A.ELAPSED_SECONDS)ELAPSED_SECONDS,15MESSAGEMESSAGE,16(SELECTNB.EVENTFROMV$SESSION_WAITNBWHERENB.SID=A.SID)WAIT_EVENT,17(SELECTNB.STATUSFROMV$SESSIONNBWHERENB.SID=A.SID)STATUS18FROMV$SESSION_LONGOPSA19WHEREA.TIME_REMAINING<>020ORDERBYSTATUS,A.TIME_REMAININGDESC,A.SQL_ID,A.SID;
在主库归档日志丢失无法同步到备库时,可以利用增量scn来备份主库的方式,从而避免重建standby。由于丢失了归档,所以最后需要对数据库进行一次全备。
在整个恢复过程中需要注意的几点:
①若备库是rac,或者asm存储,则在还原控制文件后需要把控制文件中的数据文件重命名为备库的原数据文件名称才可以执行恢复操作。
②在执行RECOVER DATABASE NOREDO前,应该让备库和主库都处于同一个incarnation,否则会报如下的错误,并且不能启用备库的实时日志应用功能:
1SYS@DGPHY1>alterdatabaseopen;2alterdatabaseopen3*4ERRORatline1:5ORA-10458:standbydatabaserequiresrecovery6ORA-01152:file1wasnotrestoredfromasufficientlyoldbackup7ORA-01110:datafile1:'+DATADG/testdgphy/datafile/system.261.976877439'
&说明:
有关具体的解决过程案例可以参考我的BLOG:/26736162/viewspace-2087473/、/26736162/viewspace-1780863/
本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
---------------优质麦课------------
详细内容可以添加麦老师微信或QQ私聊。
About Me:小麦苗
●本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:/26736162/abstract/1/
●本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
●版权所有,欢迎分享本文,转载请保留出处
●QQ:646634621 QQ群:618766405
●提供OCP、OCM和高可用部分最实用的技能培训
●题目解答若有不当之处,还望各位朋友批评指正,共同进步
DBA宝典
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。