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_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_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="CAP"','LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=FSRENCAP'; --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'
***
--修改備庫
[oracle@renCAP ~]$ scp fsrenpfile.ora [email protected]:/home/oracle/
[oracle@renCAP dbs]$ scp orapwfsren [email protected]:$ORACLE_HOME/dbs
cp $ORACLE_HOME/dbs/orapwfsren $ORACLE_HOME/dbs/orapwfsrendg
修改實例名(服務名)
alter system set FAL_SERVER=CAP; ---備庫tnsname
alter system set FAL_CLIENT=CAPDG ; --主庫tnsname(當前所在的庫)
[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 ACTIVATE STANDBY DATABASE;
alter database recover managed standby database disconnect from session;
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;