11.2.0.3.0下DATAGUARD搭建

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


请使用浏览器的分享功能分享到微信等