1.环境介绍
hostname
ip
db_name
db_unique_name
node1
192,168,11,11
ORCL
ORCLH1
node2
192,168,11,12
ORCL
ORCLH2
2.DG部署
2.1.主库开启归档,强制日志
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog; --开启归档
SQL> alter database force logging; --开启强制日志
SQL> alter database open;
SQL> archive log list;
SQL> select force_logging from v$database;
2.2.主库添加Standby Redo Log
SQL> select * from v$logfile;
SQL> select * from v$log;
--新增一组大小为50M的Standby Redo,这里的group号不得与Online redo重复
SQL> alter database add standby logfile group 41 '/u01/app/oracle/oradata/orcl/standby01.log' size 50M;
SQL> alter database add standby logfile group 42 '/u01/app/oracle/oradata/orcl/standby02.log' size 50M;
SQL> alter database add standby logfile group 43 '/u01/app/oracle/oradata/orcl/standby03.log' size 50M;
SQL> alter database add standby logfile group 44 '/u01/app/oracle/oradata/orcl/standby04.log' size 50M;
2.3.从主库创建pfile文件,复制到备库
SQL>create pfile='/home/oracle/initORCL.ora' from spfile ;
[oracle@node2 ~]$ scp /home/oracle/initORCL.ora node2:/home/oracle
2.4.设置主库初始化参数
SQL> alter system set fal_server='ORCLH2' scope=spfile ;
SQL> alter system set log_archive_config='dg_config=(ORCLH1,ORCLH2)' scope=spfile ;
SQL> alter system set log_archive_dest_1='location=/home/oracle/arc1 valid_for=(all_logfiles, all_roles) db_unique_name=ORCLH1' scope=spfile ;
SQL> alter system set log_archive_dest_2='service=ORCLH2 lgwr async valid_for=(online_logfile,primary_role) db_unique_name=ORCLH2' scope=spfile ;
SQL> alter system set log_archive_dest_state_1=ENABLE scope=spfile ;
SQL> alter system set log_archive_dest_state_2=ENABLE scope=spfile ;
SQL> alter system set standby_file_management='AUTO' scope=spfile ;
SQL> alter system set db_file_name_convert='/u01/app/oracle/oradata/ORCL','/u01/app/oracle/oradata/ORCL','/u01/app/oracle/oradata/ORCL/ORCL/datafile','/u01/app/oracle/oradata/ORCL/ORCL/datafile' scope=spfile ;
SQL> alter system set log_file_name_convert='/u01/app/oracle/oradata/ORCL','/u01/app/oracle/oradata/ORCL' scope=spfile ;
重启数据库
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP
2.5.复制主库的密码文件到备库
[oracle@node1 ~]$ scp /u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwORCL node2:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/
2.6.创建备库相应的目录结构
[oracle@node2 ~]$ mkdir -p /u01/app/oracle/oradata/ORCL/ORCL/datafile/
[oracle@node2 ~]$ mkdir /home/oracle/arc1
[oracle@node2 ~]$ mkdir -p /u01/app/oracle/oradata/ORCL
[oracle@node2 ~]$ mkdir -p /u01/app/oracle/admin/ORCL/adump
2.7.配置主库和备库的监听和TNS
====配备库置静态监听====
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = node2)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCLH2)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = ORCL)
)
)
======配置TNS(主备都配置)======
vi /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
ORCLH1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.11)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLH1)
)
)
ORCLH2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.12)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLH2)
)
)
2.8.修改备库参数、创建备库实例并启动nomount
[oracle@node2 ~]$ vi /home/oracle/intiORCL.ora
fal_server='ORCLH1'
log_archive_config='dg_config=(ORCLH1,ORCLH2)'
log_archive_dest_1='location=/home/oracle/arc1 valid_for=(all_logfiles, all_roles) db_unique_name=ORCLH2'
log_archive_dest_2='service=ORCLH1 lgwr async valid_for=(online_logfile,primary_role) db_unique_name=ORCLH1'
log_archive_dest_state_1=ENABLE
log_archive_dest_state_2=ENABLE
standby_file_management='AUTO'
db_file_name_convert='/u01/app/oracle/oradata/ORCL','/u01/app/oracle/oradata/ORCL','/u01/app/oracle/oradata/ORCL/ORCL/datafile','/u01/app/oracle/oradata/ORCL/ORCL/datafile'
log_file_name_convert='/u01/app/oracle/oradata/ORCL','/u01/app/oracle/oradata/ORCL'
[oracle@node2 ~]$ sqlplus / as sysdba
SQL> create spfile from pfile = '/home/oracle/intiORCL.ora';
SQL> startup nomount
2.9.RMAN复制主库到备库
[oracle@node2 admin]$ rman target sys/oracle@orclh1 auxiliary sys/oracle@orclh2
RMAN> duplicate target database for standby from active database nofilenamecheck;
复制完成后,查看备库库状态
SQL> select status from v$instance ;
STATUS
------------
MOUNTED
2.10.在备库开启实时日志应用
SQL> alter database recover managed standby database cancel;
SQL> alter database recover managed standby database using current logfile disconnect;
2.11.主备库状态查询
查看数据库状态
SQL> select SWITCHOVER_STATUS,DATABASE_ROLE from v$database ;
SWITCHOVER_STATUS DATABASE_ROLE
-------------------- ----------------
NOT ALLOWED PHYSICAL STANDBY
查看进程状态
SQL> select PROCESS,CLIENT_PROCESS, SEQUENCE#,STATUS from v$managed_standby;
PROCESS CLIENT_P SEQUENCE# STATUS
--------- -------- ---------- ------------
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
ARCH ARCH 8 CLOSING
ARCH ARCH 9 CLOSING
MRP0 N/A 10 APPLYING_LOG
RFS UNKNOWN 0 IDLE
RFS ARCH 0 IDLE
RFS UNKNOWN 0 IDLE
RFS LGWR 10 IDLE
SQL> select INST_ID, dbid,name,DB_UNIQUE_NAME,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status from gv$database;
COL NAME FOR A80
SET LINESIZE 9999 PAGESIZE 9999
SELECT A.THREAD#, A.NAME, A.SEQUENCE#, A.APPLIED, A.FIRST_TIME
FROM V$ARCHIVED_LOG A,
(SELECT NB.THREAD#,NB.RESETLOGS_CHANGE#,NB.DEST_ID,(MAX(NB.SEQUENCE#) - 3) MAX_SEQUENCE#
FROM V$ARCHIVED_LOG NB
WHERE NB.APPLIED = 'YES'
and NB.DEST_ID in (SELECT NB.DEST_ID FROM V$ARCHIVE_DEST_STATUS NB where STATUS <>'INACTIVE')
GROUP BY NB.THREAD#,NB.RESETLOGS_CHANGE#,NB.DEST_ID) B
WHERE B.THREAD# = A.THREAD#
AND B.RESETLOGS_CHANGE# = A.RESETLOGS_CHANGE#
AND A.DEST_ID=B.DEST_ID
AND A.SEQUENCE# >= MAX_SEQUENCE#
AND A.STANDBY_DEST = (SELECT CASE WHEN NB.DATABASE_ROLE LIKE '%STANDBY%' THEN 'NO' ELSE 'YES' END FROM V$DATABASE NB)
ORDER BY A.THREAD#, A.SEQUENCE#;
DG保护模式
1.最大性能模式max performance-默认
这种保护模式(默认)提供了可能的最高级别的数据保护,而不影响主数据库的性能。
这是通过允许事务在恢复该事务所需重做数据在写到本地联机重做日志后立即提交而实现的。
主数据库的重做数据流也写到至少一个备数据库,但是那个重做流相对于创建重做数据的事务是异步写的。
当所用的网络连接有足够的带宽,这种模式提供了近似于最大可用性模式的数据保护级别,并且对主数据库性能的影响最小。
2.最大可用性模式max availability
这种保护模式提供了可能的最高级别的数据保护,而不用与主数据库的可用性相折衷。与最大保护模式相同,在恢复事务所需的重做写到本地联机重做日志和至少一个事务一致性备数据库上的备重做日志之前,事务将不会提交。与最大保护模式不同的是,如果故障导致主数据库无法写重做流到异地备重做日志时,主数据库不会关闭。替代地,主数据库以最大性能模式运行直到故障消除,并且解决所有重做日志文件中的中断。当所有中断解决之后,主数据库自动继续以最大可用性模式运行。
这种模式确保如果主数据库故障,但是只有当第二次故障没有阻止完整的重做数据集从主数据库发送到至少一个备数据库时,不发生数据丢失。
3.最大保护模式max protection
这种保护模式确保如果主数据库故障不会发生数据丢失。要提供这种级别的保护,恢复每个事务所需的重做数据必须在事务提交之前同时写到本地联机重做日志和至少一个备数据库上的备重做日志。要确保不发生数据丢失,如果故障导致主数据库无法写重做流到至少一个事务一致性备数据库的备重做日志时,主数据库会关闭。
===查看保护模式===
SQL> select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL,OPEN_MODE from v$database ;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE
---------------- -------------------- -------------------- --------------------
PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE MOUNTED
===切换保护模式===
SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {PROTECTION | AVAILABILITY | PERFORMANCE }