如何从备份集中恢复归档日志

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从备份集中恢复归档日志相关的知识,希望对你有一定的参考价值。

这一类的操作是因为丢失了所有的控制文件,而RMAN的备份信息又存储在控制文件之中。
  
  所以只能使用DMBS_BACKUP_RESTORE从备份集中恢复数据文件、归档日志等进行恢复。
  
  本例示范如何恢复归档日志文件,恢复数据文件的例子参考:应对RMAN-06026错误,使用dbms_backup_restore进行恢复
  
  SQL> DECLARE
   2  devtype varchar2(256);
   3  done boolean;
   4  BEGIN
   5  devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'t1');
   6  sys.dbms_backup_restore.restoreSetArchivedLog(destination=>'D:\oracle\oradata\eygle\archive');
   7  sys.dbms_backup_restore.restoreArchivedLog(thread=>1,sequence=>6);
   8  sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:\oracle\oradata\eygle\bak\ARCH_EYGLE_20050702_7',params=>null);
   9  sys.dbms_backup_restore.deviceDeallocate;
  10 END;
  11 /
  
  PL/SQL procedure successfully completed.
  
  执行不完全恢复以后,resetlogs打开数据库:
  
  SQL> recover database using backup controlfile until cancel;
  ORA-00279: change 459405 generated at 07/02/2005 23:58:32 needed for thread1
  ORA-00289: suggestion : D:\ORACLE\ORADATA\EYGLE\ARCHIVE\ARC16.ARC
  ORA-00280: change 459405 for thread 1 is in sequence #6
  
  Specify log: =suggested | filename | AUTO | CANCEL
  
  ORA-00279: change 459428 generated at 07/02/2005 23:59:32 needed for thread1
  ORA-00289: suggestion : D:\ORACLE\ORADATA\EYGLE\ARCHIVE\ARC17.ARC
  ORA-00280: change 459428 for thread 1 is in sequence #7
  ORA-00278: log file 'D:\ORACLE\ORADATA\EYGLE\ARCHIVE\ARC16.ARC' no longer needed for this recovery
  
  Specify log: =suggested | filename | AUTO | CANCEL
  
  ORA-00279: change 459516 generated at 07/03/2005 00:02:40 needed for thread1
  ORA-00289: suggestion : D:\ORACLE\ORADATA\EYGLE\ARCHIVE\ARC18.ARC
  ORA-00280: change 459516 for thread 1 is in sequence #8
  ORA-00278: log file 'D:\ORACLE\ORADATA\EYGLE\ARCHIVE\ARC17.ARC' no longer needed for this recovery
  
  Specify log: =suggested | filename | AUTO | CANCEL
  
  ORA-00328: archived log ends at change 456840, need later change 459516
  ORA-00334: archived log: 'D:\ORACLE\ORADATA\EYGLE\ARCHIVE\ARC18.ARC'
  
  SQL> recover database using backup controlfile until cancel;
  ORA-00279: change 459516 generated at 07/03/2005 00:02:40 needed for thread1
  ORA-00289: suggestion : D:\ORACLE\ORADATA\EYGLE\ARCHIVE\ARC18.ARC
  ORA-00280: change 459516 for thread 1 is in sequence #8
  
  Specify log: =suggested | filename | AUTO | CANCEL
  cancel
  Media recovery cancelled.
  SQL> alter database open resetlogs;
  
  Database altered.
  
  SQL>
参考技术A 备份和恢复的过程不需要停止数据库。 不同的问题,不同的恢复步骤这样恢复的话,rman会应用你备份的所有归档日志。你2点到10点归档日志是自动

如何正确删除Oracle 归档日志文件

当Oracle中的归档日志空间满时,则需要把它清空,否则将会影响数据库正常运行,

将无法正常登入ORACLE,需要删除一部分归档日志才能正常登入ORACLE。

一、首先删除归档日志物理文件,归档日志一般都是位于archive目录下,在Oracle 10g中AIX系统下文件格式为“1_17884_XXX.dbf”,建议操作前先对数据库进行备份,删除时至少保留最近几天的日志用于数据库恢复。

二、把归档日志的物理文件删除后,我们就可以正常登入ORACLE了,但是还没完全把归档日志删除干净,ORACLE的controlfile中仍然记录着这些archivelog的信息,在oracle的OEM管理器中有可视化的日志展现出,当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,接下去我们要做的就是这个工作。


1.指定数据库实例

登录数据库

2.连接数据库

>RMAN TARGET / --由于没有使用catalog 只能nocatalog方式登录

3.查看归档日志的状态

RMAN> list archivelog all;--显示全部的归档日志信息

4.手工删除归档日志文件

RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE ‘SYSDATE-7‘;

说明:
SYSDATA-7,表明当前的系统时间7天前,before关键字表示在7天前的归档日志,如果使用了闪回功能,也会删除闪回的数据。
同样道理,也可以删除从7天前到现在的全部日志,不过这个命令要考虑清楚,做完这个删除,最好马上进行全备份数据库
DELETE ARCHIVELOG from TIME ‘SYSDATE-7‘; 删除从7天前到现在的全部日志,慎用
UNIX/LINUX下也可以通过FIND找到7天前的归档数据,使用EXEC子操作删除
find /oraarchive -xdev -mtime +7 -name "*.dbf" -exec rm -f {} ;
这样做仍然会在RMAN里留下未管理的归档文件
仍需要在RMAN里执行下面2条命令
crosscheck archivelog all;
delete expired archivelog all;
5、再次进行手工全库备份

backup database

同时备份控制文件、参数文件、归档日志

6、在使用report obsolete命令报告过期备份

7、再使用delete obsolete命令删除过期备份,若不能删除,可以再加一个参数 force强制删除


本文出自 “我主梁缘” 博客,请务必保留此出处http://xiaocao13140.blog.51cto.com/6198256/1970940

以上是关于如何从备份集中恢复归档日志的主要内容,如果未能解决你的问题,请参考以下文章

如何查看rman备份集的归档日志信息

根据备份文件和 oplog恢复数据到某个时间点,为啥报不能恢复

Oracle - 备份与恢复

dataguard主库删除归档日志后从库恢复的方法

练习设置日志归档模式

Oracle 开启归档日志以及关闭归档日志