1. 打开主库force logging:
SQL> ALTER DATABASE FORCE LOGGING;
查看主库当前是否为force logging:
SQL> select force_logging from v$database;
FOR
---
YES
2. 修改主库的初始化参数如下:
alter system set LOG_ARCHIVE_DEST_1='LOCATION=+FRADG VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=sfdb';
alter system set log_archive_config='DG_CONFIG=(sfdb,sfdb_dg)';
alter system set log_archive_dest_2='service=sfdb_dg LGWR ASYNC valid_for=(online_logfiles,primary_role) db_unique_name=sfdb_dg';
alter system set log_archive_dest_state_1='enable';
alter system set log_archive_dest_state_2='enable';
alter system set fal_server=wdsfdb_dg;
alter system set fal_client=sfdb1 sid='sfdb1';
alter system set fal_client=sfdb2 sid='sfdb2';
alter system set standby_file_management=auto;
--alter system set db_file_name_convert='/oradata/sfdb/','+DATADG/sfdb/DATAFILE/'; ----先不用设置
--alter system set log_file_name_convert='/oradata/sfdb/','+DATADG/sfdb/ONLINELOG/'; ----先不用设置
10. 在备库测试与AUXILIARY实例的连接和与主库的连接,如果连接成功,继续执行下面的步骤,
很多时候duplicate命令失败都是由于连接失败导致的。
$ sqlplus sys/oracle@orabak as sysdba
$ sqlplus sys/oracle@orcl as sysdba
11. 创建备库
在duplicate命令中指定关键字'FOR STANDBY'和'FROM ACTIVE DATABASE'表示从一个active的数据库来复制创建物理备库
参数'DORECOVER'表示duplicate命令会执行recover动作,否则duplicate命令只执行restore,
备库与主库不同的初始化参数,需要在duplicate命令中特殊指定,这样创建备库的spfile时就会用指定的值替换主库的参数值,
主库与备库的数据文件的路径不同,因此设置参数'DB_FILE_NAME_CONVERT'
以下红色部分可以直接先在备库spfile中设定好,就可以不用加红色部分语句。
%
rman target sys/t***** AUXILIARY SYS/xxxxxxx@zzfw_dg
RMAN>
DUPLICATE TARGET DATABASE
FOR STANDBY
FROM ACTIVE DATABASE
DORECOVER
spfile
set cluster_database="false"
set diagnostic_dest='/oracle/app'
set memory_target='30400m'
set REMOTE_LISTENER=''
set audit_trail='db','EXTENDED'
set audit_file_dest='/oracle/app/admin/zfw/adump'
set db_name=wizfw'
set db_unique_name='twfw_dg'
set fal_client='zfw_dg'
set fal_server='zfw1','zfw2'
set log_archive_config='DG_CONFIG=(zfw,zfw_dg)'
set log_archive_dest_1='LOCATION=/oradata/wzfw/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=zfw_dg'
set log_archive_dest_2='SERVICE=wfw LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=zfw'
set DB_FILE_NAME_CONVERT='+wZFWDATA/wzfw/DATAFILE/','/oradata/zfw/'
set LOG_FILE_NAME_CONVERT='+wZFWDATAwfw/ONLINELOG/','/oradata/zfw/'
set STANDBY_FILE_MANAGEMENT='AUTO'
set CONTROL_FILES='/oradata/zzfw/control01.ctl','/oradata/zfw/control02.ctl'
NOFILENAMECHECK;
Recovery Manager: Release 11.2.0.4.0 - Production on Fri Dec 4 15:03:18 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database:zDBID=48060323)
connected to auxiliary database: z (not mounted)
RMAN> DUPLICATE TARGET DATABASE
2> FOR STANDBY
3> FROM ACTIVE DATABASE
4> DORECOVER
5> NOFILENAMECHECK;
Starting Duplicate Db at 04-DEC-15
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=1045 device type=DISK
contents of Memory Script:
{
backup as copy reuse
targetfile '/oracle/app/oracle/product/11.2.0/db_1/dbs/ozidsfdb1' auxiliary format
'/oracle/app/product/11.2.0.4/db1/dbs/orzdsfdb' ;
}
executing Memory Script
Starting backup at 04-DEC-15
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1969 instance=fdb2 device type=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 12/04/2015 15:03:28
RMAN-05501: aborting duplication of target database
RMAN-03015: error occurred in stored script Memory Script
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 12/04/2015 15:03:28
ORA-19505: failed to identify file "/oracle/app/oracle/product/11.2.0/db_1/dbs/wwdsfdb1"
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Starting restore at 04-DEC-15
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 04-DEC-15
contents of Memory Script:
{
sql clone 'alter database mount standby database';
}
executing Memory Script
sql statement: alter database mount standby database
RMAN-05529: WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to disk group only.
contents of Memory Script:
{
set newname for tempfile 1 to
"+datadg";
switch clone tempfile all;
set newname for datafile 1 to
"/oradata/wdb/system.257.896526381";
这个问题是参数中少写临时表空间的转换参数:
*.db_file_name_convert='+DATADG/wb/tempfile/','/oradata/wfdb/'
加入该参数后,将变成这样:
set newname for tempfile 1 to
"/oradata/wfdb/temp.263.804695143";