本文将描述由于standby_file_management和db_file_name_convert设置不当导致数据文件无法添加的故障处理过程。[@more@]
1.故障再现1)主库创建新的表空间tbs_sec1SQL> create tablespace tbs_sec1 datafile '/u01/app/oracle/oradata/secdb/tbs_sec1.dbf' size 10m;Tablespace created.2)手工切换日志SQL> alter system switch logfile;System altered.3)此时在备库alert中记录中便可以查看到如下报错内容Tue Aug 10 16:16:21 2010RFS[2]: No standby redo logfiles createdRFS[2]: Archived Log: '/u01/app/oracle/flash_recovery_area/SECDG/archivelog/2010_08_10/o1_mf_1_10_6622ponv_.arc'Tue Aug 10 16:16:22 2010Media Recovery Log /u01/app/oracle/flash_recovery_area/SECDG/archivelog/2010_08_10/o1_mf_1_10_6622ponv_.arcFile #6 added to control file as 'UNNAMED00006' becausethe parameter STANDBY_FILE_MANAGEMENT is set to MANUALThe file should be manually created to continue.Errors with log /u01/app/oracle/flash_recovery_area/SECDG/archivelog/2010_08_10/o1_mf_1_10_6622ponv_.arcMRP0: Background Media Recovery terminated with error 1274Tue Aug 10 16:16:22 2010Errors in file /u01/app/oracle/admin/secdg/bdump/secdg_mrp0_15738.trc:ORA-01274: cannot add datafile '/u01/app/oracle/oradata/secdb/tbs_sec1.dbf' - file could not be createdSome recovered datafiles maybe left media fuzzyMedia recovery may continue but open resetlogs may failTue Aug 10 16:16:24 2010Errors in file /u01/app/oracle/admin/secdg/bdump/secdg_mrp0_15738.trc:ORA-01274: cannot add datafile '/u01/app/oracle/oradata/secdb/tbs_sec1.dbf' - file could not be createdTue Aug 10 16:16:24 2010MRP0: Background Media Recovery process shutdown (secdg)对应的trace文件中记录的报错内容大同小异。2.故障原因问题是由于没有正确设置standby_file_management和db_file_name_convert参数导致的。但此时,在已经出现问题的前提下修改这个参数,已经于事无补。SQL> alter system set db_file_name_convert='/u01/app/oracle/oradata/secdb/','/u01/app/oracle/oradata/SECDG/datafile/' scope=spfile;System altered.SQL> shutdown immediate;ORA-01109: database not openDatabase dismounted.SQL> startup nomount;ORACLE instance started.Total System Global Area 314572800 bytesFixed Size 1219184 bytesVariable Size 96470416 bytesDatabase Buffers 213909504 bytesRedo Buffers 2973696 bytesSQL> alter database mount standby database;Database altered.SQL> alter database recover managed standby database disconnect from session;Database altered.此时alert中仍然会记录如下报错信息Tue Aug 10 16:24:36 2010alter database recover managed standby database disconnect from sessionTue Aug 10 16:24:36 2010Attempt to start background Managed Standby Recovery process (secdg)MRP0 started with pid=23, OS id=16942Tue Aug 10 16:24:36 2010MRP0: Background Managed Standby Recovery process started (secdg)Managed Standby Recovery not using Real Time ApplyMRP0: Background Media Recovery terminated with error 1111Tue Aug 10 16:24:41 2010Errors in file /u01/app/oracle/admin/secdg/bdump/secdg_mrp0_16942.trc:ORA-01111: name for data file 6 is unknown - rename to correct fileORA-01110: data file 6: '/u01/app/oracle/product/10.2.0/db_1/dbs/UNNAMED00006'ORA-01157: cannot identify/lock data file 6 - see DBWR trace fileORA-01111: name for data file 6 is unknown - rename to correct fileORA-01110: data file 6: '/u01/app/oracle/product/10.2.0/db_1/dbs/UNNAMED00006'Tue Aug 10 16:24:41 2010Errors in file /u01/app/oracle/admin/secdg/bdump/secdg_mrp0_16942.trc:ORA-01111: name for data file 6 is unknown - rename to correct fileORA-01110: data file 6: '/u01/app/oracle/product/10.2.0/db_1/dbs/UNNAMED00006'ORA-01157: cannot identify/lock data file 6 - see DBWR trace fileORA-01111: name for data file 6 is unknown - rename to correct fileORA-01110: data file 6: '/u01/app/oracle/product/10.2.0/db_1/dbs/UNNAMED00006'Tue Aug 10 16:24:41 2010MRP0: Background Media Recovery process shutdown (secdg)Tue Aug 10 16:24:42 2010Completed: alter database recover managed standby database disconnect from sessi on可见,问题依旧!3.处理方法在这种故障场景下,我们可以通过调整数据文件的方法在备库端进行处理。SQL> select name from v$datafile;NAME----------------------------------------------------------------------/u01/app/oracle/oradata/SECDG/datafile/o1_mf_system_661zb5rh_.dbf/u01/app/oracle/oradata/SECDG/datafile/o1_mf_undotbs_661zc97r_.dbf/u01/app/oracle/oradata/SECDG/datafile/o1_mf_sysaux_661zd3d0_.dbf/u01/app/oracle/oradata/SECDG/datafile/o1_mf_tbs_1_661zdwb9_.dbf/u01/app/oracle/product/10.2.0/db_1/dbs/UNNAMED000066 rows selected.SQL> alter database create datafile '/u01/app/oracle/product/10.2.0/db_1/dbs/UNNAMED00006' as '/u01/app/oracle/oradata/SECDG/datafile/tbs_sec1.dbf';Database altered.此时,对应的数据文件已经处于正确的状态,该问题已经得到比较圆满的处理。4.杜绝出现该问题的方法防止该问题出现的的根本方法是在创建物理DataGuard的过程中就将standby_file_management、db_file_name_convert及log_file_name_convert参数设置正确。1)调整standby_file_management参数为AUTOSQL> alter system set standby_file_management=auto;System altered.2)设置db_file_name_convert参数SQL> alter system set db_file_name_convert='/u01/app/oracle/oradata/secdb/','/u01/app/oracle/oradata/SECDG/datafile/' scope=spfile;3)设置log_file_name_convert参数SQL> alter system set log_file_name_convert='/u01/app/oracle/oradata/secdb/','/u01/app/oracle/oradata/SECDG/datafile/' scope=spfile;5.小结关于物理DataGuard的配置,每一个参数都要细细揣摩。针对文中提到的故障一旦出现,会给我们带来很多不必要的麻烦。无论使用Grid Control还是通过脚本来创建物理DataGuard,创建完毕之后建议对数据库的每个参数做最终的检验和确认。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1933/viewspace-1049312/
,如需转载,请注明出处,否则将追究法律责任。