无备份 如何利用RMAN恢复Oracle数据库详解

在这里我们将介绍Oracle下利用RMAN恢复数据库的相关操作,数据库频道向您推荐《Oracle 11g新特性与应用详解》。

数据文件丢失, 没有备份, 拥有文件创建以来的全部归档,使用RMAN恢复, 报错RMAN-06102: no channel to restore a backup or copy of log thread 1 seq 726 scn 1757142927; 使用sqlplus恢复, 执行 ‘Alter Database recover datafile ‘ Fails with ORA-279

总结: RMAN备份没有使用catalog, controlfile默认保留7天的备份/归档信息,v$archived_log没有记录足够多的归档信息, 所以报RMAN-06102, 需要通过CATALOG命令注册.

SQLPLUS 执行 ‘Alter Database recover datafile ‘ Fails with ORA-279 因为9.2.0.6版本使用这个命令不能自动执行recover. 用户版本9.2.0.1也遇到同样的问题, 使用RECOVER DATAFILE即可.
处理步骤:

1. 生成controlfile 备份到文本ora9roro_ora_479268.trc

2. 查询该文件创建时间为Feb 21 11:10:24 2006 (查询alert.log)

  1. Tue Feb 21 11:10:24 2006  
  2. CREATE TABLESPACE tzgl DATAFILE 'tzgl' SIZE 100M  
  3. Tue Feb 21 11:10:29 2006  
  4. Completed: CREATE TABLESPACE tzgl DATAFILE 'tzgl' SIZE 100M  
  5. Tue Feb 21 21:58:23 2006  
  6. Thread 1 advanced to log sequence 277  
  7. Current log# 3 seq# 277 mem# 0: /oradata/ora9roro/redo03.log  
  8. Tue Feb 21 21:58:23 2006 

3. 用户说没有备份(没有确实检查是否有备份),创建空文件,因为有全部的归档文件存在,考虑建空文件, 使用归档文件恢复.

  1. alter database create datafile '/oracle/product/9.2.0/dbs/tzgl' as '/oracle/product/9.2.0/dbs/tzgl'; 

或者就写alter database create datafile 12 as ‘/oracle/product/9.2.0/dbs/tzgl’;
该文件file#=12.

4.rman target /
 

  1. rman> recover datafile 12; 失败  
  2. archive log thread 1 sequence 1116 is already on disk as file /oradata/ora9roro/archive/1_1116.dbf  
  3. archive log thread 1 sequence 1117 is already on disk as file /oradata/ora9roro/archive/1_1117.dbf  
  4. archive log thread 1 sequence 1118 is already on disk as file /oradata/ora9roro/archive/1_1118.dbf  
  5. ...  
  6. RMAN-06102: no channel to restore a backup or copy of log thread 1 seq 728 scn 1757357012  
  7. RMAN-06102: no channel to restore a backup or copy of log thread 1 seq 727 scn 1757357009  
  8. RMAN-06102: no channel to restore a backup or copy of log thread 1 seq 726 scn 1757142927 

5. 检查归档文件是否存在, 发现从1_1.dbf直到现在, 所有的ARCHIVELOGS都存在.但RMAN-06102错误信息表明controlfile并没有记录下所有的归档信息.查看参数control_file_record_keep_time 为默认值7. 所以只保留7天的备份信息.

调整control_file_record_keep_time=365以保证以后的备份可以保留更长的时间.

6. 企图注册归档文件到controlfile. 但不支持, 只针对standby controlfile.
 

  1. alter database register logfile '/oradata/ora9roro/archive/1_726.dbf';  
  2. ERROR at line 1:  
  3. ORA-01665: controlfile is not a standby controlfile 

7. 尝试通过sqlplus 恢复, 也失败. —但这里并没有查看原因, 想当然认为rman恢复不行,sqlplus 执行也不行. 在step 16找到了原因.

  1. SQL> conn / as sysdba  
  2. Connected.  
  3. SQL> alter database recover datafile 12;  
  4. alter database recover datafile 12  
  5. *  
  6. ERROR at line 1:  
  7. ORA-00279: change 1181419363 generated at 02/21/2006 11:10:29 needed for thread  
  8. 1  
  9. ORA-00289: suggestion : /oradata/ora9roro/archive/1_276.dbf  
  10. ORA-00280: change 1181419363 for thread 1 is in sequence #276 

8. 验证问题是否出在归档文件, 尝试移动/oradata/ora9roro/archive/1_276.dbf到其他目录, 然后进行恢复alter database recover datafile 12;

错误同上.所以, 不是归档文件本身故障的问题. 继续查无法读取归档文件的原因.

9. 查看是否重建过controlfile或open resetlogs操作.

从2006年2月21日开始,有没有做过重建controlfile或open resetlogs之类的操作?

  1. select RESETLOGS_TIME from v$database;  
  2. RESETLOGS  
  3. --------- 

16-APR-05

结果表示, 没有resetlog过, 也没有重建过controlfile

10.查看v$bakcup_piece, v$backup_datafile发现有记录, 是2006年12月29日的备份记录,备份到带库.

原来并非像用户所说没有备份

root身份查看
#crontab -l找到备份,每天执行,可是查看/tmp/bkdb_$dt.log文件, 最后一次成功备份是bkdb_200612250100.log

  1. 0 1 * * * /usr/tivoli/tsm/client/oracle/orabackup.sh >/dev/null#  
  2. # cat /usr/tivoli/tsm/client/oracle/orabackup.sh  
  3. export dt=`date +%Y%m%d%H%M`  
  4. su - oracle -c "rman target / nocatalog cmdfile /oracle/sched/bkdb.scr msglog /tmp/bkdb_$dt.log"  
  5.  
  6. /oracle/sched/bkdb.scr备份脚本内容: bkdb_200612290100.log  
  7. RUN{  
  8. ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE' parms =  
  9. 'ENV=(TDPO_OPTFILE=/usr/tivoli/tsm/client/oracle/bin64/tdpo.opt)';  
  10. BACKUP  
  11. FORMAT 'df_T%T_s%s_p%p_t%t'  
  12. FILESPERSET 2  
  13. DATABASE;  
  14. RELEASE CHANNEL ch00;  

11. 尝试恢复:

  1. RMAN> RUN{  
  2. ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE' parms =  
  3. 'EN2> 3> V=(TDPO_OPTFILE=/usr/tivoli/tsm/client/oracle/bin64/tdpo.opt)';  
  4. 4> restore datafile 12;  
  5. 5> release channel ch00  
  6. 6> ;  
  7. 7> }  
  8.  
  9. using target database controlfile instead of recovery catalog  
  10. allocated channel: ch00  
  11. channel ch00: sid=11 devtype=SBT_TAPE 
  12. channel ch00: Tivoli Data Protection for Oracle: version 5.2.0.0  
  13.  
  14. Starting restore at 07-APR-08  
  15.  
  16. channel ch00: starting datafile backupset restore  
  17. channel ch00: specifying datafile(s) to restore from backup set  
  18. restoring datafile 00012 to /oracle/product/9.2.0/dbs/tzgl  
  19. released channel: ch00  
  20. RMAN-00571: ===========================================================  
  21. RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============  
  22. RMAN-00571: ===========================================================  
  23. RMAN-03002: failure of restore command at 04/07/2008 14:20:09  
  24. ORA-19501: read error on file "df_T20061229_s2660_p1_t610419667", blockno 1 (blocksize=512)  
  25. ORA-27190: skgfrd: sbtread2 returned error  
  26. ORA-19511: Error received from media manager layer, error text:  
  27. ANS1314E (RC14) File data currently unavailable on server 

12. 带库有问题, 或者数据已经被覆写. 所以, 不再考虑使用备份做恢复.

13. 查看v$recover_file, v$recovery_log, v$log_history,看系统状态,信息存储在recover.lst中

  1. set pagesize 20000  
  2. set linesize 180  
  3. set pause off  
  4. set serveroutput on  
  5. set feedback on  
  6. set echo on  
  7. set numformat 999999999999999  
  8. Spool recover.lst  
  9. select substr(name, 1, 50), status from v$datafile;  
  10. select file#,substr(name,1,50), recover, fuzzy, to_char(checkpoint_time,'dd/mm/yyyy:hh24:mi:ss') ckpt_time, checkpo  
  11. int_change#, resetlogs_change#, to_char(resetlogs_time,'dd/mm/yyyy HH24:MI:SS')  
  12. tm from v$datafile_header;  
  13. select * from v$backup;  
  14. select name, open_mode, checkpoint_change#, ARCHIVE_CHANGE# from v$database;  
  15. select GROUP#,THREAD#,SEQUENCE#,MEMBERS,ARCHIVED,STATUS,FIRST_CHANGE# from v$log;  
  16. select GROUP#,substr(member,1,60) from v$logfile;  
  17. select * from v$log_history;  
  18. select * from v$recover_file;  
  19. select * from v$recovery_log;  
  20. select HXFIL File_num,substr(HXFNM,1,40) File_name,FHTYP Type,HXERR Validity,  
  21. FHSCN SCN, FHTNM TABLESPACE_NAME,FHSTA status ,FHRBA_SEQ Sequence   
  22. from X$KCVFH;  
  23. spool off 

14恢复方案:

  1. 1. alter database create datafile 12 as '/oracle/product/9.2.0/dbs/tzgl'; ----ÒѾ­×öÁËin step3  
  2. 2. recover datafile 12;  
  3. 3. now start applying archives from the time of creation of datafile.  
  4. 4. once the archives are applied and redo logs are applied, you can issue the command, "alter database open". 

15. 注册归档文件到controlfile (和catalog db 可选)
 

  1. rman target /  
  2. RMAN> list archivelog all; --[1_1116.dbf, 1_1164.dbf]  
  3. RMAN> CATALOG ARCHIVELOG '/oradata/ora9roro/archive/1_1.dbf'; ---添加到v$archived_log  
  4. RMAN> list archivelog all; --多显示1_1.dbf记录  
  5. Key Thrd Seq S Low Time Name  
  6. ------- ---- ------- - --------- ----  
  7. 1165 1 1 A 16-APR-05 /oradata/ora9roro/archive/1_1.dbf 

16. 在step7中登陆sqlplus恢复失败, 查原因:

  1. metalink<352617.1> 'Alter Database recover datafile ' Fails with ORA-279  
  2. Noticable difference between 9.2.0.6 and other versions is that the "recover datafile" syntax does not auotmatically   
  3. perform auto recover, Oracle prompts for each log. On other versions this is not the case.  
  4. This is reported as Bug: 4178579 - ALTER DATABASE RECOVER DATAFILE IS BROKEN IN 9.2.0.6 

解决方法:

  1. Use different syntax:  
  2. recover datafile x   
  3. recover automatic datafile x  
  4. alter database recover automatic datafile x  

或者打补丁:Apply 9.2.0.7.0 patchset
不过, 在网上看到有人在10.2.0.2也遇到这样的问题。

【编辑推荐】

  1. Oracle 11g R2恢复管理器RMAN的增强
  2. Oracle 11g 新特性- RMAN
  3. Oracle 恢复管理器 (RMAN) 的功能
  4. 深入Oracle 11g分区功能
  5. Oracle 11g R2中新特性一览

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/240147.html<

(0)
管理的头像管理
上一篇2025-04-23 17:54
下一篇 2025-04-23 17:55

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注