DB_UNIQUE_NAME=primary
LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)'
LOG_ARCHIVE_DEST_1=
'LOCATION=/arch
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=primary'
LOG_ARCHIVE_DEST_2=
'SERVICE=standby_net LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=standby'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
LOG_FILE_NAME_CONVERT='/arch','/archlog'
FAL_SERVER=standby_net
FAL_CLIENT=primary_net
STANDBY_FILE_MANAGEMENT=AUTO
导出primary参数文件:
create pfile='/tmp/initorcl.ora' from spfile;
创建standby控制文件:
alter database create standby controlfile as '/tmp/standby.ctl';
RMAN copy数据文件出来,并对其打包:
mkdir -p /tmp/oradata/orcl
使用RMAN拷贝数据文件:
select 'copy datafile '||file_id ||' to '|| '''/tmp/oradata/orcl'||substr(file_name,instr(file_name,'/',-1))||'''' ||';' from dba_data_files order by 1;
在RMAN中执行以上语句执行的结果
tar -cvf oradata.tar oradata/
为了方便,拷贝文件至同一目录下:
cp $ORACLE_HOME/dbs/orapworcl $ORACLE_BASE
cp $ORACLE_HOME/dbs/initorcl.ora $ORACLE_BASE
cp /tmp/oradata.tar $ORACLE_BASE
cp /tmp/standby.ctl $ORACLE_BASE
cp /tmp/initorcl.ctl $ORACLE_BASE
Standby备机配置:
ftp至primary,下载所有文件:
ftp> bin
200 Switching to Binary mode.
ftp> cd /u01/app/oracle
ftp> mget oradata.tar
ftp> mget orapworcl
ftp> mget initorcl.ora
ftp> mget standby.ctl
解压oradata.tar:
cp oradata.tar $ORACLE_BASE
cd $ORACLE_BASE
tar -xvf $ORACLE_BASE
使用standby.ctl覆盖oradata中的三个控制文件:
[oracle@standby ~]$ cp standby.ctl /u01/app/oracle/oradata/orcl/control01.ctl
[oracle@standby ~]$ cp standby.ctl /u01/app/oracle/oradata/orcl/control02.ctl
[oracle@standby ~]$ cp standby.ctl /u01/app/oracle/oradata/orcl/control03.ctl
复制口令文件,pfile至dbs目录下:
cd
cp orapworcl $ORACLE_HOME/dbs
cp initorcl.ora $ORACLE_HOME/dbs
编辑从primary上拷贝过来的initorcl.ora文件[黑体为需要修改的地方]:
DB_NAME=orcl
DB_UNIQUE_NAME=standby
LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)'
LOG_ARCHIVE_DEST_1=
'LOCATION=/archlog
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=standby'
LOG_ARCHIVE_DEST_2=
'SERVICE=primary_net LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=primary'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
LOG_FILE_NAME_CONVERT='/arch','/archlog'
FAL_SERVER=primary_net
FAL_CLIENT=standby_net
STANDBY_FILE_MANAGEMENT=AUTO
使参数文件生效:
create spfile from pfile;
创建必要的目录:
mkdir -p /u01/app/oracle/admin/orcl/adump
mkdir -p /u01/app/oracle/admin/orcl/bdump
mkdir -p /u01/app/oracle/admin/orcl/cdump
mkdir -p /u01/app/oracle/admin/orcl/udump
mkdir -p /u01/app/oracle/admin/orcl/dpdump
mkdir -p /archlog
-----------------------------------------------------------------------------------
主备机各自修改listener.ora,并重启监听,使用netca配置tnsname,并在主备机上各自使用sqlplus进行测试。
tnsname(Oracle Net Service Name)的配置:
primary和standby上相同:
primary_net/standby_net[注:Net Service Name和db_unique_name不能相同,否则会包DGID mismatch的错误]
-----------------------------------------------------------------------------------
备机数据库切换至standby角色:
shutdown abort
startup mount;
检查归档传输是否正常
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
测试:
在主备机上分别使用如下命令测试结果是否相同:
select max(sequence#) from v$archived_log;
在备机上使用如下命令测试日志是否被应用:
SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
参考: