primary
ALTER DATABASE FORCE LOGGING;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE FLASHBACK ON;
1.pfile and standby log
alter system set db_unique_name='dg01' ;
alter system set log_archive_config='DG_CONFIG=(dg01,dg02)';
alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/fast_recovery_area VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dg01' ;
alter system set log_archive_dest_2='SERVICE=dg02 ASYNC LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dg02';
alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE ;
alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE ;
alter system set fal_server="dg02" ;
alter system set standby_file_management=AUTO ;
alter system set EMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE;
alter system set LOG_ARCHIVE_FORMAT=%t_%s_%r.arc ;
alter database add standby logfile group 6 size 50m;
alter database add standby logfile group 7 size 50m;
alter database add standby logfile group 8 size 50m;
alter database add standby logfile group 9 size 50m;
alter database add standby logfile group 10 size 50m;
create pfile = '/u01/app/oracle/product/11.2.0/dbhome_1/initdg01.ora' from spfile;
2,orapwd密码文件
primary
orapwd file=$ORACLE_HOME/dbs/orapwdg01 password=oracle entries=10 ignoreCase=y
在standby重建密码文件
orapwd file=$ORACLE_HOME/dbs/orapwdg02 password=oracle entries=10 ignoreCase=y
3,listener
primary
vi /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg01)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dg01)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = dg01)
)
)
standby
vi /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg02)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dg02)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = dg02)
)
)
ADR_BASE_LISTENER = /u01/app/oracle
4,tnsname
primary
vi /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
dg01 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.42.216)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dg01)
)
)
dg02 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.42.217)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dg02)
)
)
standby
vi /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
dg01 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.42.216)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dg01)
)
)
dg02 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.42.217)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dg02)
)
)
5,standby上创建相应目录
rm -R /u01/app/oracle/admin
mkdir -p /u01/app/oracle/admin/dg/adump
chown -R oracle:oinstall /u01/app/oracle/admin/dg/adump
mkdir -p /u01/app/oracle/fast_recovery_area/dg
chown -R oracle:oinstall /u01/app/oracle/fast_recovery_area/dg
rm -R /u01/app/oracle/oradata
mkdir -p /u01/app/oracle/oradata/dg
chown -R oracle:oinstall /u01/app/oracle/oradata/dg
6,在dg01上执行duplicate standby
#duplicate.sql
duplicate target database
for standby
from active database
dorecover NOFILENAMECHECK
spfile
parameter_value_convert 'dg01','dg02'
set db_file_name_convert='dg01','dg02'
set log_file_name_convert='dg01','dg02'
set db_unique_name='dg02'
set log_archive_config='DG_CONFIG=(dg01,dg02)';
set log_archive_dest_1='location=/u01/app/oracle/fast_recovery_area VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dg02'
set log_archive_dest_2='SERVICE=dg01 ASYNC LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dg01'
set standby_file_management='AUTO'
set fal_server='dg01'
set control_files = '/u01/app/oracle/oradata/dg/control01.ctl'
set LOG_ARCHIVE_DEST_STATE_1=ENABLE ;
set LOG_ARCHIVE_DEST_STATE_2=ENABLE ;
rman target / auxiliary sys/oracle@dg02 cmdfile=duplicate.sql;
standby执行接收日志
ALTER DATABASE FORCE LOGGING;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE FLASHBACK ON;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE THROUGH ALL SWITCHOVER DISCONNECT USING CURRENT LOGFILE;
7,日志传送状态检查
7.1 在primary,standby查看当前database_role,PROTECTION_MODE
SQL> select PROTECTION_MODE,PROTECTION_LEVEL,flashback_on,database_role,open_mode,force_logging from v$database;
PROTECTION_MODE PROTECTION_LEVEL FLASHBACK_ON DATABASE_ROLE OPEN_MODE FOR
-------------------- -------------------- ------------------ ---------------- -------------------- ---
MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE YES PHYSICAL STANDBY READ ONLY YES
7.2 在standby察看v$managed_standby RFS(Remote File Service) 接收日志情况和 MRP 应用日志同步主库
SQL> select process,client_process,sequence#,status,delay_mins from v$managed_standby;
PROCESS CLIENT_P SEQUENCE# STATUS DELAY_MINS
--------- -------- ---------- ------------ ----------
ARCH ARCH 0 CONNECTED 0
ARCH ARCH 23 CLOSING 0
ARCH ARCH 0 CONNECTED 0
ARCH ARCH 29 CLOSING 0
RFS LGWR 30 IDLE 0
RFS ARCH 0 IDLE 0
RFS UNKNOWN 0 IDLE 0
RFS UNKNOWN 0 IDLE 0
MRP0 N/A 30 APPLYING_LOG 0
7.3查看v$dataguard_status 备庫接收应用日志过程
SQL> SELECT MESSAGE FROM V$DATAGUARD_STATUS;
MESSAGE
--------------------------------------------------------------------------------
ARC0: Archival started
ARC1: Archival started
ARC2: Archival started
ARC1: Becoming the 'no FAL' ARCH
ARC1: Becoming the 'no SRL' ARCH
ARC2: Becoming the heartbeat ARCH
ARC2: Becoming the active heartbeat ARCH
RFS[1]: Assigned to RFS process 4942
RFS[2]: Assigned to RFS process 4944
RFS[3]: Assigned to RFS process 4946
ARC1: Beginning to archive thread 1 sequence 23 (1166228-1196722)
MESSAGE
--------------------------------------------------------------------------------
ARC1: Completed archiving thread 1 sequence 23 (0-0)
ARC3: Archival started
Primary database is in MAXIMUM PERFORMANCE mode
RFS[4]: Assigned to RFS process 4950
RFS[5]: Assigned to RFS process 4954
ARC3: Beginning to archive thread 1 sequence 29 (1207710-1215098)
ARC3: Completed archiving thread 1 sequence 29 (0-0)
Attempt to start background Managed Standby Recovery process
MRP0: Background Managed Standby Recovery process started
Managed Standby Recovery starting Real Time Apply
Media Recovery Log /u01/app/oracle/fast_recovery_area/1_23_902222236.dbf
MESSAGE
--------------------------------------------------------------------------------
Media Recovery Log /u01/app/oracle/fast_recovery_area/1_24_902222236.dbf
Media Recovery Log /u01/app/oracle/fast_recovery_area/1_25_902222236.dbf
Media Recovery Log /u01/app/oracle/fast_recovery_area/1_26_902222236.dbf
Media Recovery Log /u01/app/oracle/fast_recovery_area/1_27_902222236.dbf
Media Recovery Log /u01/app/oracle/fast_recovery_area/1_28_902222236.dbf
Media Recovery Log /u01/app/oracle/fast_recovery_area/1_29_902222236.dbf
Media Recovery Waiting for thread 1 sequence 30 (in transit)
7.4查看primary,standby是否同步
primary
SQL> select archived_thread#,archived_seq#,applied_thread#,applied_seq# from v$archive_dest_status;
ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_THREAD# APPLIED_SEQ#
---------------- ------------- --------------- ------------
1 29 0 0
1 29 1 22
......................................
0 0 0 0
0 0 0 0
standby
SQL> select archived_thread#,archived_seq#,applied_thread#,applied_seq# from v$archive_dest_status;
ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_THREAD# APPLIED_SEQ#
---------------- ------------- --------------- ------------
1 29 0 0
0 0 0 0
0 0 0 0
...........................................
0 0 0 0
1 29 1 29
7.5查看v$archived_log 看已经归档的redo
SQL>select REGISTRAR,CREATOR,THREAD#,APPLIED,sequence#,first_change#,next_change#, COMPLETION_TIME from v$archived_log;
REGISTR CREATOR THREAD# APPLIED SEQUENCE# FIRST_CHANGE# NEXT_CHANGE# COMPLETIO
------- ------- ---------- --------- ---------- ------------- ------------ ---------
SRMN SRMN 1 YES 9 1114185 1114323 27-JAN-16
RFS ARCH 1 YES 22 1165874 1166228 28-JAN-16
RFS ARCH 1 YES 10 1114323 1115222 28-JAN-16
RFS ARCH 1 YES 13 1129941 1129944 28-JAN-16
......................................................
RFS ARCH 1 YES 27 1202931 1207474 01-FEB-16
RFS ARCH 1 YES 28 1207474 1207710 01-FEB-16
RFS ARCH 1 YES 25 1196964 1202706 01-FEB-16
RFS ARCH 1 IN-MEMORY 29 1207710 1215098 01-FEB-16
7.6查看v$log_history 看已用的redo
SQL> select thread#,sequence#,first_change#,next_change# from v$log_history;
THREAD# SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- ------------- ------------
1 1 995548 998731
1 2 998731 1007950
...................................
1 28 1207474 1207710
1 29 1207710 1215098
7.7查看v$archive_dest_status ,v$archive_gap 看主备是否有gap
priamry
SQL> select status,gap_status from v$archive_dest_status where dest_id=2;
STATUS GAP_STATUS
--------- -----------
VALID NO GAP
standby
SQL> select * from v$archive_gap;
no rows selected
7.8查看standby_log
SQL> select group#,sequence#,archived,status from v$standby_log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------
7 30 YES ACTIVE
8 0 NO UNASSIGNED
9 0 YES UNASSIGNED
10 0 YES UNASSIGNED
11 0 YES UNASSIGNED
7.9查看v$log情况
select group#, sequence#, bytes, status from v$log;
GROUP# SEQUENCE# BYTES STATUS
---------- ---------- ---------- ----------------
1 0 52428800 UNUSED
2 29 52428800 CLEARING
3 30 52428800 CURRENT
8.主备切换
手动切换
primary
alter database commit to switchover to physical standby with session shutdown;
启动primary到standby mount状态。
shutdown immediate;
conn / as sysdba
startup nomount;
alter database mount standby database;
select open_mode, database_role from v$database;
Standby端进行角色切换。
alter database commit to switchover to primary with session shutdown;
alter database open;
select recid, sequence#, STANDBY_DEST, ARCHIVED, APPLIED from v$archived_log;
select open_mode, database_role from v$database;
primary
alter database recover managed standby database cancel;
alter database recover managed standby database using current logfile disconnect from session;
alter database open;
/*
alter database recover managed standby database cancel;
shutdown immediate
startup
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE THROUGH ALL SWITCHOVER DISCONNECT USING CURRENT LOGFILE;
*/
9,配置DG_BROKER 自动切换
primary :alter system set dg_broker_start=true;
standby :alter system set dg_broker_start=true;
dgmgrl sys/oracle@dg01
create configuration DG as primary database is dg01 connect identifier is dg01;
add database dg02 as connect identifier is dg02 maintained as physical;
enable configuration;
show configuration;
show configuration verbose;
switchover to dg02;
switchover to dg01;
enable fast_start failover;
start observer;
[oracle@dg01 fast_recovery_area]$ ps -ef | grep pmon
oracle 2752 1 0 11:22 ? 00:00:00 ora_pmon_dg01
oracle 4143 26661 0 12:18 pts/4 00:00:00 grep pmon
kill -9 2752
自动切换
more detail see:http://docs.oracle.com/cd/E11882_01/server.112/e41134/toc.htm