oracle 11g active dataguard 搭建
1.修改参数
1>新添加dg备库
检查主库配置
SQL> select DBID,NAME,DATABASE_ROLE,PROTECTION_MODE,SWITCHOVER_STATUS,DATAGUARD_BROKER,GUARD_STATUS,DB_UNIQUE_NAME from v$database;
DBID NAME DATABASE_ROLE PROTECTION_MODE SWITCHOVER_STATUS DATAGUAR GUARD_S DB_UNIQUE_NAME
---------- --------- ---------------- -------------------- -------------------- -------- ------- ------------------------------
387098034 FSRENCAP PRIMARY MAXIMUM PERFORMANCE NOT ALLOWED DISABLED NONE fsrenCAP
检查源端参数
show parameter archive
show parameter dg
show parameter db_name
show parameter db_unique_name
2>修改参数
archive log list;
ALTER DATABASE FORCE LOGGING;
--主备修改以下参数
alter system set DB_NAME=FSRENCAP scope=spfile; --数据库名要统一
alter system set DB_UNIQUE_NAME=FSRENCAP scope=spfile; --数据库唯一名要不一致
alter system set LOG_ARCHIVE_DEST_1='LOCATION=/arch/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=FSRENCAP';--设置主库归档目录
alter system set LOG_ARCHIVE_DEST_2='service="CAPDG"','LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=FSRENCAP'; --service为备库(相对)的tnsname,指向备库
alter system set FAL_SERVER=CAPDG; ---备库tnsname
alter system set FAL_CLIENT=CAP ; --主库tnsname(当前所在的库)
alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=spfile;
alter system set service_names=fsrenCAP;
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(fsren,fsrendg)' ; --主备库实例名相同不需要更改
alter system set log_archive_dest_state_1='enable';
alter system set log_archive_dest_state_2='enable';
alter system set dg_broker_start=true;
dg备库
alter system set DB_NAME=FSRENCAP scope=spfile; --数据库名要统一
alter system set DB_UNIQUE_NAME=FSRENCAPDG scope=spfile; --数据库唯一名要不一致
alter system set LOG_ARCHIVE_DEST_1='LOCATION=/arch/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=FSRENCAPDG';--设置备库归档目录
alter system set LOG_ARCHIVE_DEST_2='service="CAP"','LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=FSRENCAPDG'; --service为备库(相对)的tnsname,指向备库
alter system set FAL_SERVER=CAP; ---备库tnsname
alter system set FAL_CLIENT=CAPDG ; --主库tnsname(当前所在的库)
alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=spfile;
alter system set service_names=FSRENCAPDG;
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(fsren,fsrendg)' ; --主备库实例名相同不需要更改
alter system set log_archive_dest_state_1='enable';
alter system set log_archive_dest_state_2='enable';
alter system set dg_broker_start=true;
**主备库文件位置不一致需更改以下参数:
*.db_file_name_convert='/u01/oracle/oradata/KCARDPRD/datafile','/oradata01/kcardprd/kcardprd_data','/raid5/KCARDPRD/datafile','/oradata01/kcardprd/kcardprd_data','/raid10/KCARDPRD/datafile','/oradata01/kcardprd/kcardprd_data','/u01/oracle/oradata/SKCARDPRD/datafile','/oradata01/kcardprd/kcardprd_data'
#db_file_name_convert中临时文件的路径也需要转换
*.log_file_name_convert='/u01/oracle/oradata/KCARDPRD/onlinelog','/oradata01/kcardprd/kcardprd_data'
***
--传输spfile 密码文件。创建相关目录。
[oracle@renCAP ~]$ scp fsrenpfile.ora oracle@10.140.100.50:/home/oracle/
[oracle@renCAP dbs]$ scp orapwfsren oracle@10.140.100.50:$ORACLE_HOME/dbs
cp $ORACLE_HOME/dbs/orapwfsren $ORACLE_HOME/dbs/orapwfsrendg
[oracle@renCAPdg ~]$ mkdir -p /opt/app/oracle/admin/fsrenCAP/adump
[oracle@renCAPdg ~]$ mkdir -p /opt/app/oracle/admin/fsrenCAP/bdump
[oracle@renCAPdg ~]$ mkdir -p /opt/app/oracle/admin/fsrenCAP/cdump
[oracle@renCAPdg ~]$ mkdir -p /opt/app/oracle/admin/fsrenCAP/ddump
2.创建tns链路
cap =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =10.140.100.13)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fsrenCAP)
)
)
capdg =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =10.140.100.50)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fsrenCAP)
)
)
--备库listener.ora
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=/opt/app/oracle/product/11.2/db_2)
(PROGRAM=extproc)
)
(SID_DESC=
(GLOBAL_DBNAME=fsrenCAP)
(ORACLE_HOME=/opt/app/oracle/product/11.2/db_2)
(SID_NAME=fsrendg)
)
)
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.140.100.50)(PORT=1521))
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))
)
)
tnsping cap
tnsping capdg
3.启动实例
[oracle@renCAPdg dbs]$ export ORACLE_SID=fsrendg
[oracle@renCAPdg dbs]$ sqlplus / as sysdba
SQL> startup pfile='/home/oracle/fsrenpfile.ora' nomount;
主库执行复制数据
rman target sys/oracle@cap auxiliary sys/oracle@capdg
duplicate target database for standby from active database nofilenamecheck dorecover;
--若之前有不完全恢复,则此次回复是从上次恢复点进行恢复,需要指定从0级开始恢复
list incarnation;
incarnation 1;
然后再执行duplicate
----基于scn同步数据
参考文档:Steps to perform for Rolling Forward a Physical Standby Database using RMAN Incremental Backup. (Doc ID 836986.1)
数据量大开启块跟踪
alter database enable block change tracking using file '/raid5/KCARDPRD/rman_change_track.f';
查看是否生效
col status format a8
col filename format a60
select status, filename from v$block_change_tracking;
--查看scn号
可以通过v$datafile_header查数据文件头部最小scn确认需要怎么恢复
目标端找文件头最小scn号
set pagesize 2000
set linesize 200
col min_changescn for 999999999999999
select min(checkpoint_change#) min_changescn from v$datafile_header
where file# not in (select file# from v$datafile where enabled = 'READ ONLY');
MIN_CHANGESCN
----------------
12702406
rman target / log=/home/oracle/backup_20190501.log<<EOF
run
{configure controlfile autobackup on;
sql 'alter system switch logfile';
BACKUP INCREMENTAL FROM SCN 12702406 DATABASE FORMAT '/data/fsren_%d_%u.bak' tag 'FORSTANDBY';
}
备份完后复制到目标端应用
注册备份信息,并且恢复
rman target /
CATALOG START WITH '/data/';
RECOVER DATABASE NOREDO;
从源端获取最新的控制文件
BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/data/ForStandbyCTRL_20190501.bck';
目标端恢复控制文件
SHUTDOWN IMMEDIATE ;
STARTUP NOMOUNT;
RESTORE STANDBY CONTROLFILE FROM '/data/ForStandbyCTRL_20190501.bck';
alter database mount;
此时源端还留有目标端所需归档文件,可以开启dg同步追归档
4.创建 standby redo(主备库)
ALTER DATABASE ADD STANDBY LOGFILE ('/data/fsrenCAP/standredo01.log') SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE ('/data/fsrenCAP/standredo03.log') SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE ('/data/fsrenCAP/standredo02.log') SIZE 500M;
5.激活备库--生成redolog
alter database recover managed standby database disconnect from session;
alter database open ;
6.主备切换
(主)
select open_mode,database_role,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ WRITE PRIMARY RESOLVABLE GAP
alter database commit to switchover to physical standby with session shutdown;
shutdown immediate
startup mount
--应用日志
alter database recover managed standby database disconnect from session;
select open_mode,database_role,switchover_status from v$database;
(备)
recover managed standby database disconnect from session;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
alter database open;
-------回切------
(主)
ALTER DATABASE COMMIT TO SWITCHOVER TOPHYSICAL STANDBY WITH SESSION SHUTDOWN;
shutdown immediate;
startup mount;
--应用日志
alter database recover managed standby database disconnect from session;
(备)
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN
startup open;
select open_mode,database_role,switchover_status from v$database;