1、物理DG搭建
1.1 环境描述:
1.1.1 操作系统:RHEL 6.4 64位
1.1.2 ORACLE 11g 版本: 11.2.0.4
1.1.3 该DG环境中是一个主库带两个备库,其中一个备库的数据文件和联机日志文件与主库路径相同,另一个备库数据文件和联机日志文件与主库路径不同。
1.1.4 在主库上安装ORACLE 数据库软件并创建数据库,在备库上只安装ORACLE 数据库软件不创建数据库。
1.1.5 主库: chicago IP:172.16.30.10
1.1.6 备库一: boston 该备库数据文件和联机日志文件与主库路径一致 IP:172.16.30.11
1.1.7 备库二: lixia 该备库数据文件和联机日志文件与主库不同 IP:172.16.30.11
1.2 主库配置
1.2.1 参数配置
chicago.__db_cache_size=469762048
chicago.__java_pool_size=16777216
chicago.__large_pool_size=33554432
chicago.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
chicago.__pga_aggregate_target=872415232
chicago.__sga_target=738197504
chicago.__shared_io_pool_size=0
chicago.__shared_pool_size=201326592
chicago.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/chicago/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/oradata/chicago/control01.ctl','/u01/app/oracle/fast_recovery_area/chicago/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_name_convert='/u01/app/oracle/oradata/chicago/','/u01/app/oracle/oradata/lixia/'
*.db_name='chicago'
*.db_unique_name='chicago'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4385144832
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=chicagoXDB)'
*.fal_client='CHICAGO'
*.fal_server='LIXIA'
*.log_archive_config='dg_config=(chicago,boston,lixia)'
*.log_archive_dest_1='location=/u01/app/oracle/arch1/lixia/ valid_for=(all_logfiles,all_roles) db_unique_name=lixia'
*.log_archive_dest_2='service=chicago lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=chicago'
*.log_archive_dest_3='service=lixia lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=lixia'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_dest_state_3='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=30
*.log_file_name_convert='/u01/app/oracle/arch1/boston/','/u01/app/oracle/arch1/chicago/','/u01/app/oracle/arch2/boston/','/u01/app/oracle/arch2/chicago/','/u01/app/oracle/arch1/lixia/','/u01/app/oracle/arch1/chicago/','/u01/app/oracle/arch2/lixia/','/u01/app/oracle/arch2/chicago/','/u01/app/oracle/oradata/chicago/','/u01/app/oracle/oradata/lixia/'
*.memory_target=1605369856
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
主库参数文件红色部分表示使用ALTER SYSTEM SET 命令配置的参数。蓝色表示是使用参数文件的默认值,在搭建DG时这个参数需要为该值。
配置参数的命令:
SQL>alter system set db_file_name_convert='/u01/app/oracle/oradata/chicago/','/u01/app/oracle/oradata/lixia/' scope=both;
SQL>alter system set db_name='chicago' scope=both;
SQL>alter system set db_unique_name='chicago' scope=both;
SQL>alter system set fal_client='CHICAGO' scope=both;
SQL>alter system set fal_server='LIXIA' scope=both;
SQL>alter system set log_archive_config='dg_config=(chicago,boston,lixia)' scope=both;
SQL>alter system set log_archive_dest_1='location=/u01/app/oracle/arch1/lixia/ valid_for=(all_logfiles,all_roles) db_unique_name=lixia' scope=both;
SQL>alter system set log_archive_dest_2='service=chicago lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=chicago' scope=both;
SQL> alter system set log_archive_dest_3='service=lixia lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=lixia' both;
SQL> alter system set log_archive_dest_state_1='ENABLE' scope=both;
SQL> alter system set log_archive_dest_state_2='ENABLE' scope=both;
SQL> alter system set log_archive_dest_state_3='ENABLE' scope=both;
SQL> alter system set log_archive_format='%t_%s_%r.arc' scope=both;
SQL> alter system set log_archive_max_processes=30 scope=both;
SQL>alter system set log_file_name_convert='/u01/app/oracle/arch1/boston/','/u01/app/oracle/arch1/chicago/','/u01/app/oracle/arch2/boston/','/u01/app/oracle/arch2/chicago/','/u01/app/oracle/arch1/lixia/','/u01/app/oracle/arch1/chicago/','/u01/app/oracle/arch2/lixia/','/u01/app/oracle/arch2/chicago/','/u01/app/oracle/oradata/chicago/','/u01/app/oracle/oradata/lixia/' scope=both;
1.2.2 允许强制记日志
SQL> alter database force logging;
1.2.3 如果没有口令文件就创建口令文件(ORACLE 11G 默认是有口令文件的不需要创建)
orapwd file=$ORACLE_HOME/dbs/lixiapwd.ora password=123456 entries=10
1.2.4 配置备重做日志
第1步 确保主和备数据库上的日志文件尺寸是相同的。当前备重做日志文件的尺寸必须与当前主数据库联机重做日志文件的尺寸完全符合。例如,如果主数据库使用两个联机重做日志组,其日志文件是200K,则备重做日志组也应
该是200K大小的日志文件。
第2步 确定备重做日志文件组的适当数目。
最少地,配置应该比主数据库上的联机重做日志文件组的数目多一个备重做日志文件组。然而,推荐的备重做日志文件组数目依赖于主数据库上的线程数。使用下面的等式来确定备重做日志文件组的适当数目。(每个线程的日志文件的最大数目+1)×线程最大数目使用这个等式减少了主实例的日志写(LGWR)进程因为在备数据库上无法分配备重做日志文件而被锁住的可能性。例如,如果主数据库每个线程有2个日志文件,并有2个线程,则在备数据库上需要有6个备重做日志文件组。
第3步 检验相关数据库参数和设置。
检验在SQL CREATE DATABASE语句上的MAXLOGFILES和MAXLOGMEMBERS子句使用的值,不会限制你能添加的重做日志文件组和成员。唯一覆盖由MAXLOGFILES和MAXLOGMEMBERS子句指定的限制的方法就是重建主数据库或控制文件。
第4步 创建备重做日志文件组。
SQL>alter database add standby logfile group 4 '/u01/app/oracle/oradata/chicage/redo04.log';
SQL>alter database add standby logfile group 5 '/u01/app/oracle/oradata/chicage/redo05.log';
SQL>alter database add standby logfile group 6 '/u01/app/oracle/oradata/chicage/redo06.log';
第5步 检验备重做日志文件组已创建
要检验备重做日志文件组已创建并正确地运行,在主数据库上调用一个日志切换,然后查询备数据库上的V$STANDBY_LOG视图或V$LOGFILE视图。例如:
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
1.2.5 配置归档
SQL> shutdown immedate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
1.2.6 配置ORACLE 监听器
1.2.6.1 主库listener.ora文件配置
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER=
(SID_LIST=
( SID_DESC=
(GLOBAL_DBNAME=CHICAGO)
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=chicago)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
#(SID_NAME = chicago)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.10)(PORT = 1521))
#(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
1.2.6.2 主库tnsnames.ora文件配置
CHICAGO =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.10)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
#(SID_NAME = chicago)
(SID = chicago)
)
)
BOSTON =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.11)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = boston)
#(SID_NAME = boston)
)
)
LIXIA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.11)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = lixia)
#(SID_NAME = boston)
)
)
1.2.6.3 重新启动ORACLE监听器
[oracle@localhost admin]$ lsnrctl stop
[oracle@localhost admin]$ lsnrctl start
1.3 创建物理备库(lixia)
1.3.1 在备库上创建必须的目录
1.3.2 在主库上创建pfile文件并复制到备库
1.3.3 修改备库pfile文件
1.3.4 把主库的数据文件、联机重做日志、归档日志和密码文件复制到备库
1.3.5 在主库上创建备库控制文件并复制到备库
1.3.6 配置ORACLE 监听器
1.3.7 启动物理备库
1.3.1 在备库上创建必须的目录
使用ORACLE用户创建 $ORACLE_BASE/admin/$ORACLE_SID/adump 目录
1.3.2 在主库上创建pfile文件并复制到备库
SQL>create pfile='/tmp/lixia.ora' from spfile;
[oracle@localhost tmp]$ scp /tmp/lixia.ora oracle@172.16.30.11:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initlixia.ora
1.3.3 修改备库pfile文件
[oracle@localhost dbs]$ vi $ORACLE_HOME/dbs/initlixia.ora
修改后内容如下(红色部分表示修改后的值):
chicago.__db_cache_size=469762048
chicago.__java_pool_size=16777216
chicago.__large_pool_size=33554432
chicago.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
chicago.__pga_aggregate_target=872415232
chicago.__sga_target=738197504
chicago.__shared_io_pool_size=0
chicago.__shared_pool_size=201326592
chicago.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/lixia/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/oradata/lixia/control01.ctl','/u01/app/oracle/fast_recovery_area/lixia/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_name_convert='/u01/app/oracle/oradata/chicago/','/u01/app/oracle/oradata/lixia/'
*.db_name='chicago'
*.db_unique_name='lixia'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4385144832
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=chicagoXDB)'
*.fal_client='LIXIA'
*.fal_server='CHICAGO'
*.log_archive_config='dg_config=(chicago,boston,lixia)'
*.log_archive_dest_1='location=/u01/app/oracle/arch1/lixia/ valid_for=(all_logfiles,all_roles) db_unique_name=lixia'
*.log_archive_dest_2='service=chicago lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=chicago'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=30
*.log_file_name_convert='/u01/app/oracle/arch1/boston/','/u01/app/oracle/arch1/chicago/','/u01/app/oracle/arch2/boston/','/u01/app/oracle/arch2/chicago/','/u01/app/oracle/arch1/lixia/','/u01/app/oracle/arch1/chicago/','/u01/app/oracle/arch2/lixia/','/u01/app/oracle/arch2/chicago/','/u01/app/oracle/oradata/chicago/','/u01/app/oracle/oradata/lixia/'
*.memory_target=1605369856
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
1.3.4 把主库的数据文件、联机重做日志、归档日志和密码文件复制到备库指定的目录(这个过程主库不需要关闭)
[oracle@localhost tmp]$ scp $ORACLE_BASE/oradata/chicago/* oracle@172.16.30.11:/u01/app/oracle/oradata/lixia/
[oracle@localhost tmp]$ scp /u01/app/oracle/arch1/chicago/* oracle@172.16.30.11:/u01/app/oracle/arch1/lixia/
把创密码文件复制到备库
[oracle@localhost tmp]$ scp $ORACLE_HOME/dbs/orapwchicago oracle@172.16.30.11:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwlixia
1.3.5 在主库上创建备库控制文件并复制到备库
SQL>alter database create standby controlfile as '/tmp/lixia.ctl';
[oracle@localhost tmp]$ scp /tmp/lixia.ctl oracle@172.16.30.11:/u01/app/oracle/oradata/lixia/control01.ctl
[oracle@localhost tmp]$ scp /tmp/lixia.ctl oracle@172.16.30.11:/u01/app/oracle/fast_recovery_area/lixia/control02.ctl
1.3.5 配置ORACLE 监听器
1.3.5.1 备库 listener.ora 文件配置
SID_LIST_LISTENER=
(SID_LIST=
( SID_DESC=
(GLOBAL_DBNAME=BOSTON)
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=boston)
)
( SID_DESC=
(GLOBAL_DBNAME=BOSTON)
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=lixia)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.11)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
1.3.5.2 备份库 tnsnames.ora 文件配置
CHICAGO =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.10)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
#(SERVICE_NAME = chicago)
(SID = chicago)
)
)
BOSTON =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.11)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = boston)
)
)
LIXIA=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.30.11)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = lixia)
)
)
1.3.5.3 重启ORACLE 监听器
[oracle@localhost admin]$ lsnrctl stop
[oracle@localhost admin]$ lsnrctl start
1.3.6 启动物理备库
1.3.6.1 启动物理备数据库到MOUNT模式下
SQL> STARTUP MOUNT;
1.3.6.2 启动重做应用
SQL> alter database recover managed standby database disconnect from session;
1.3.6.3 检验物理备数据库正确执行
1.3.6.3.1 在备库上确认现有的归档重做日志
SQL> select sequence#,first_time,next_time from v$archived_log
order by sequence#;
1.3.6.3.2 在主库上切换日志,归档当前联机重做日志
SQL>alter system switch logfile;
1.3.6.3.3 在备库上检查新的重做数据已归档
SQL> select sequence#,first_time,next_time from v$archived_log
order by sequence#;
1.3.6.3.4 检查新归档的重做日志已经应用
SQL>select sequence#,applied from v$archived_log
order by sequence#;
1.3.6.3.5 主库执行:
select process from v$managed_standby;
查看进程,看有没有LNS进程
1.4 查询数据库角色
方法一:查询到 PROCESS字段有RFS、MRP0 进程则数据库为备库
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 0 CONNECTED
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
MRP0 N/A 40 WAIT_FOR_LOG
RFS ARCH 0 IDLE
RFS UNKNOWN 0 IDLE
PROCESS CLIENT_P SEQUENCE# STATUS
--------- -------- ---------- ------------
RFS UNKNOWN 0 IDLE
RFS UNKNOWN 0 IDLE
RFS UNKNOWN 0 IDLE
RFS UNKNOWN 0 IDLE
RFS UNKNOWN 0 IDLE
RFS UNKNOWN 0 IDLE
RFS UNKNOWN 0 IDLE
RFS LGWR 40 IDLE
RFS UNKNOWN 0 IDLE
查询到 PROCESS字段有LNS 进程则数据库为主库
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 39 CLOSING
ARCH ARCH 39 OPENING
ARCH ARCH 38 OPENING
ARCH ARCH 38 CLOSING
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
LNS LNS 40 WRITING
方法二:查询v$DATABASE视图
物理备库查询出的信息
SQL> select DATABASE_ROLE from v$database;
DATABASE_ROLE
----------------
PHYSICAL STANDBY
主库查询的信息
SQL> select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
2、搭建主库(chicago)带一个备库(lixia),备考库(lixia)再带一个备库(boston)
在上面搭建好的一主一备的基础配置,备库(lixia)带备库(boston),下面只给出备库带备库需要修改的参数,其他配置项参考 上面的配置。
注意:数据库的数据文件、联机日志文件、归档日志文件都要从主库(chicago)复制到备库(boston),参数文件从主库(chicago)创建复制到备库(boston)再做相应的修改,备库(boston)的备库控制文件也在主库上创建再复制到备库(boston),从主库(chicago)复制密码文件到备库(boston)。
2.1 配置备库(lixia)。
log_archive_config='dg_config=(chicago,boston,lixia)'
log_archive_dest_3='service=boston arch sync affirm valid_for=(standby_logfiles,standby_role) db_unique_name=boston'
2.2 配置备库(boston)。
fal_client='boston'
fal_server='lixia'