Oracle Data Guard 为企业数据库提供了最有效和最全面的数据可用性、数据保护和灾难恢复解决方案。它集成管理、监视和自动化软件基础架构来创建和维护一个或多个同步备用数据库,从而保护数据不受故障、灾难、错误和损坏的影响。本文主要描述了在同一主机下如何配置Oracle Data Guard。
有关DG的相关概念,可参考:Oracle Data Guard Concepts and Administration
有关配置DG的参数描述,可参考:
1、创建DG的大致流程
a、主库启用归档与强制日志模式
b、主库配置redo传输服务(即相关参数配置)
c、主库及备库配置监听
d、为备库创建目录
e、配置备库密码文件及参数文件
f、复制数据文件,日志文件,备份控制文件到备库
g、启动备库并校验结果
2、演示创建物理备库
--演示环境
[oracle@linux3 ~]$ cat /etc/issue
Enterprise Linux Enterprise Linux Server release 5.5 (Carthage)
Kernel r on an m
[oracle@linux3 ~]$ sqlplus -v
SQL*Plus: Release 11.2.0.1.0 Production
--主库:sybo3
--备库: sybo5
--配置物理standby,使用最佳性能模式
a、主库前期准备
--查看主库的归档模式,如果为非归档模式应先切换到归档模式
--关于如何切换到归档模式可以参考:Oracle 归档日志 http://blog.csdn.net/robinson_0612/article/details/5784713
sys@SYBO3> select name,log_mode from v$database;
NAME LOG_MODE
--------- ------------
SYBO3 ARCHIVELOG
--为备库准备pfile文件
sys@SYBO3> create pfile=/u01/oracle/db_1/dbs/initsybo5.ora from spfile;
--使主库处于强制日志模式
sys@SYBO3> alter database force logging;
sys@SYBO3> select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
--为主库添加standby redo log,简要描述一下standby redo log的作用
--实际上就是与主库接收到的重做日志相对应,也就是说备库调用RFS进程将从主库接收到的重做日志按顺序写入到standby logfile
--在主库创建standby logfile是便于发生角色转换后备用
--sandby redo log创建原则:
--a)、确保standby redo log的大小与主库online redo log的大小一致
--b)、如主库为单实例数据库:standby redo log组数=主库日志组总数+1
--c)、如果主库是RAC数据库:standby redo log组数=(每线程的日志组数+1)*最大线程数
--d)、不建议复用standby redo log,避免增加额外的I/O以及延缓重做传输
sys@SYBO3> alter database add standby logfile ('/u01/database/sybo3/redo/standby_redo01.log') size 50m;
sys@SYBO3> alter database add standby logfile ('/u01/database/sybo3/redo/standby_redo02.log') size 50m;
sys@SYBO3> alter database add standby logfile ('/u01/database/sybo3/redo/standby_redo03.log') size 50m;
sys@SYBO3> alter database add standby logfile ('/u01/database/sybo3/redo/standby_redo04.log') size 50m;
b、修改主库参数文件
--使用下面的命令修改主库参数(此时主库应当使用spfile启动参数)
[oracle@linux3 ~]$ more ch_sp_sybo3.sql
--Add below item when DB acts as primary role
alter system set db_unique_name='sybo3' scope=spfile;
alter system set log_archive_config='DG_CONFIG=(sybo3,sybo5)';
alter system set log_archive_dest_1='LOCATION=/u01/database/sybo3/arch db_unique_name=sybo3 valid_for=(ALL_LOGFILES,ALL_ROLES)';
alter system set log_archive_dest_2='SERVICE=sybo5 ASYNC db_unique_name=sybo5 valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE)';
alter system set log_archive_dest_state_1=enable;
alter system set log_archive_dest_state_2=enable;
alter system set log_archive_max_processes=4;
alter system set remote_login_passwordfile='EXCLUSIVE' scope=spfile;
--Add below item when DB turn to standby role
alter system set db_file_name_convert='sybo5','sybo3' scope=spfile;
alter system set log_file_name_convert='sybo5','sybo3' scope=spfile;
alter system set standby_file_management='AUTO';
alter system set fal_server='sybo5';
alter system set fal_client='sybo3';
sys@SYBO3> @ch_sp_sybo3
sys@SYBO3> shutdown immediate;
c、配置主备库监听
--为主库和备库配置监听,整个DG的redo传输服务,都依赖于Oracle Net,因此需要为主备库配置监听
--配置方法多种多样,可用netmgr,netca,以及直接编辑listener.ora 与tnsnames.ora文件
--下面是配置之后的listener.ora 与tnsnames.ora文件内容
[oracle@linux3 ~]$ more /u01/oracle/db_1/network/admin/listener.ora
# listener.ora Network Configuration File: /u01/oracle/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER_SYBO5 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = sybo5.orasrv.com)
(ORACLE_HOME = /u01/oracle/db_1)
(SID_NAME = sybo5)
)
)
SID_LIST_LISTENER_SYBO3 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = sybo3.orasrv.com)
(ORACLE_HOME = /u01/oracle/db_1)
(SID_NAME = sybo3)
)
)
LISTENER_SYBO5 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linux3.orasrv.com)(PORT = 1532))
)
ADR_BASE_LISTENER_SYBO5 = /u01/oracle
LISTENER_SYBO3 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linux3.orasrv.com)(PORT = 1531))
)
ADR_BASE_LISTENER_SYBO3 = /u01/oracle
[oracle@linux3 ~]$ more /u01/oracle/db_1/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/oracle/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
SYBO5 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.25)(PORT = 1532))
)
(CONNECT_DATA =
(SERVICE_NAME = SYBO5.ORASRV.COM)
)
)
SYBO3 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.25)(PORT = 1531))
)
(CONNECT_DATA =
(SERVICE_NAME = SYBO3.ORASRV.COM)
)
)
--启动监听器并测试
[oracle@linux3 ~]$ lsnrctl start LISTENER_SYBO3
[oracle@linux3 ~]$ lsnrctl start LISTENER_SYBO5
[oracle@linux3 ~]$ tnsping sybo3
[oracle@linux3 ~]$ tnsping sybo5
d、为备库创建目录
--为备库创建相应的文件夹
[oracle@linux3 database]$ more sybo5.sh
#!/bin/sh
mkdir -p /u01/database
mkdir -p /u01/database/sybo5/adump
mkdir -p /u01/database/sybo5/controlf
mkdir -p /u01/database/sybo5/fra
mkdir -p /u01/database/sybo5/oradata
mkdir -p /u01/database/sybo5/redo
mkdir -p /u01/database/sybo5/dpdump
mkdir -p /u01/database/sybo5/pfile
mkdir -p /u01/database/sybo5/arch
[oracle@linux3 database]$ ./sybo5.sh