Oracle 11.2.0.4 RAC Standby实施手册
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 11.2.0.4 RAC Standby实施手册相关的知识,希望对你有一定的参考价值。
Oracle RAC Standby实施手册
目录
1 实施环境规划
DataGuard三种保护模式:最大化保护、最大有效性、最大性能。为了降低对主数据库的影响,以下采用最大性能模式进行DataGuard配置。
DataGuard配置中备数据库类型主要有三种:逻辑备数据库、物理备数据库和基于快照的备数据库,以下采用物理备数据库方式进行DataGuard配置。
DataGuard配置中的主数据库和备数据库之间数据同步是通过TCP/IP网络通信实现的,为了尽可能降低网络带宽的竞争和对现有应用程序性能问题,建议在主数据库主机和备数据库主机之间构建专属于DataGuard的网络,即需要添加新的网卡等硬件资源搭建专属于DataGuard的网络。
另外,建议在主数据库和备数据库上创建专属于DataGuard的数据库监听器,如listener_dg,监听端口为1525,如果主数据库和备数据库在不同网段上且存在防火墙,需要在防火墙上开通1525端口。
1.1 IP地址规划
主机名 | IP地址 | 描述 | |
主数据库环境 | crmdb1 | 192.168.56.210 | 公网IP地址 |
192.168.56.216 | DG专署IP地址 | ||
crmdb2 | 192.168.56.211 | 公网IP地址 | |
192.168.56.217 | DG专署IP地址 | ||
备数据库环境 | crmdg1 | 192.168.56.220 | 公网IP地址 |
192.168.56.225 | DG专署IP地址址 | ||
crmdg2 | 192.168.56.221 | 公网IP地址 | |
192.168.56.226 | DG专署IP地址 |
1.2 归档配置相关参数
数据库类型 | 主机名 | DB_UNIQUE_NAME | INSTANCE_NAME | Net Service Name |
主库 | crmdb1 | crmdb | crmdb1 | CRMDB_DG |
crmdb2 | crmdb2 | |||
备库 | crmdg1 | crmdg | crmdb1 | CRMDG_DG |
crmdb2 | crmdb2 |
1.3 主库软件环境信息
为便于管理,主备库软件环境信息配置一致。
主库软件环境信息 | |
数据库sys用户密码 | 主数据库和备数据库密码必须一致,设置为oracle |
Grid和数据库版本 | 11.2.0.4 |
ORACLE_SID环境变量 | crmdb1和crmdb2 |
GRID软件ORACLE_BASE目录 | /oracle/app/oracle |
GRID软件ORACLE_HOME目录 | /grid/app/11.2.0.4/grid |
DB软件ORACLE_BASE目录 | /oracle/app/oracle |
DB软件ORACLE_HOME目录 | /oracle/app/oracle/product/11.2.0.4/db_1 |
DG专署监听器 | LISTENER_DG |
DG专署监听器端口 | 1525 |
初始化参数 | DB_NAME=crmdb |
DB_UNIQUE_NAME=crmdb | |
COMPATIBLE主数据库和备数据库必须一致 | |
归档模式 | 归档模式 |
归档目录 | +CRMDBARCH |
1.4 备库软件环境信息
备库软件环境信息 | |
数据库sys用户密码 | 主数据库和备数据库密码必须一致,设置为oracle |
Grid和数据库版本 | 11.2.0.4 |
ORACLE_SID环境变量 | crmdb1和crmdb2 |
GRID软件ORACLE_BASE目录 | /oracle/app/oracle |
GRID软件ORACLE_HOME目录 | /grid/app/11.2.0.4/grid |
DB软件ORACLE_BASE目录 | /oracle/app/oracle |
DB软件ORACLE_HOME目录 | /oracle/app/oracle/product/11.2.0.4/db_1 |
DG专署监听器 | LISTENER_DG |
DG专署监听器端口 | 1525 |
初始化参数 | DB_NAME=crmdb |
DB_UNIQUE_NAME=crmdg | |
COMPATIBLE主数据库和备数据库必须一致 | |
归档模式 | 归档模式 |
归档目录 | +CRMDGARCH |
2 Active DataGuard实施条件
实施Active DataGuard的前提条件如下:
1. 主数据库主机和备数据库主机硬件平台一致,如都为Linux 主机;
2. 主数据库和备数据库软件版本一致且都为11.2.0.4;
3. 备数据库数据库存储空间大小不小于主数据库数据库存储空间大小;
$ asmcmd
ASMCMD> lsdg
4. 主数据库数据库运行正常且工作在archivelog模式下;
$ sqlplus / as sysdba
--1. 修改并检查归档参数
SQL> alter system set log_archive_dest_1='location=+CRMDBARCH';
SQL> show parameter log_archive_dest_1;
SQL> show parameter log_archive_format;
--2. 关闭主库两各节点
SQL> shutdown immediate;
--3. 启动一各节点进行启用归档操作
SQL> startup mount;
SQL> alter database ARCHIVELOG;
SQL> alter database open;
--4. 启动另外一各节点
SQL> startup;
--5. 测试归档配置结果
SQL> alter system archive log current;
5. 主数据库数据库需要启动force logging功能;
$ sqlplus / as sysdba
SQL> select FORCE_LOGGING from v$database;
SQL> alter database force logging;
6. 主数据库和备数据库sys用户的密码一样,并且密码文件必须存在且主数据库初始化参数remote_login_passwordfile必须设置为EXCLUSIVE;
3 Active DataGuard实施准备
为便于主备库切换时,应用可以进行快速切换,主备库数据库实例名名称相同。
3.1 配置DG专用监听
3.1.1 创建LISTENER_DG
通过grid登录主/备数据库各节点主机,创建LISTENER_DG监听器。主/备数据库主机清单见:IP地址规划。
主库配置文件(crmdb1/crmdb2主机):
[[email protected] ~]$ cd $ORACLE_HOME/network/admin
[[email protected] admin]$ cp listener.ora listener.ora.`date +%Y%m%d`
[[email protected] admin]$ vi listener.ora
# ADD FOR DG
LISTENER_DG =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.216)(PORT = 1525))
)
)
SID_LIST_LISTENER_DG =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = crmdb)
(ORACLE_HOME = /oracle/app/oracle/product/11.2.0.4/db_1)
(SID_NAME = crmdb1)
)
)
红色部分内容描述:
LISTENER_DG:DG专用监听器名称
192.168.56.216:crmdb1 节点DG专署监听IP地址
1525:DG专署监听端口
crmdb:DB_UNIQUE_NAME初始化参数值
crmdb1:当前主机ORACLE_SID或INSTANCE_NAME
备库配置文件(crmdg1/crmdg2主机):
[[email protected] ~]$ cd $ORACLE_HOME/network/admin
[[email protected] admin]$ cp listener.ora listener.ora.`date +%Y%m%d`
[[email protected] admin]$ vi listener.ora
# ADD FOR DG
LISTENER_DG =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.225)(PORT = 1525))
)
)
SID_LIST_LISTENER_DG =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = crmdg)
(ORACLE_HOME = /oracle/app/oracle/product/11.2.0.4/db_1)
(SID_NAME = crmdb1)
)
)
红色部分内容描述:
LISTENER_DG:DG专用监听器名称
192.168.56.225:crmdg1 节点DG专署监听IP地址,该参数各主机不同
1525:DG专署监听端口
crmdg:DB_UNIQUE_NAME初始化参数值,该参数主备库不同
crmdb1:当前主机ORACLE_SID或INSTANCE_NAME,该参数集群中各节点不同
3.1.2 将监听加入到crs资源
主库:
[[email protected] ~]$ srvctl add listener -l LISTENER_DG -p TCP:1525
[[email protected] ~]$ srvctl start listener -l LISTENER_DG -n crmdb1
[[email protected] ~]$ srvctl start listener -l LISTENER_DG -n crmdb2
备库:
[[email protected] ~]$ srvctl add listener -l LISTENER_DG -p TCP:1525
[[email protected] ~]$ srvctl start listener -l LISTENER_DG -n crmdg1
[[email protected] ~]$ srvctl start listener -l LISTENER_DG -n crmdg2
3.2 配置TNS别名
该配置主备库相同。
[[email protected] ~]$ cd $ORACLE_HOME/network/admin
[[email protected] admin]$ cp tnsnames.ora tnsnames.ora.`date +%Y%m%d`
[[email protected] admin]$ vi tnsnames.ora
CRMDB_DG =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.216)(PORT = 1525))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.217)(PORT = 1525))
(CONNECT_DATA =
(SERVICE_NAME = CRMDB)
)
)
CRMDG_DG =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.225)(PORT = 1525))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.226)(PORT = 1525))
(CONNECT_DATA =
(SERVICE_NAME = CRMDG)
)
)
注意:
备库的SERVICE_NAME是CRMDG,但ORACLE_SID中配置为crmdb1/crmdb2。
3.3 同步口令文件
如果需要修改sys用户的密码,则在节点crmdb1执行以下命令后再将数据库密码文件ftp到其他crmdb2、crmdg1和crmdg2节点上。
[[email protected] ~]$ cd $ORACLE_HOME/dbs
--1. ftp到各节点,使用主机名便于整理脚本,实际操作需要主机ip地址
[[email protected] dbs]$ scp orapwcrmdb1 crmdb2:`pwd` #复制口令文件到crmdb2
[[email protected] dbs]$ scp orapwcrmdb1 crmdg1:`pwd` #复制口令文件到crmdg1
[[email protected] dbs]$ scp orapwcrmdb1 crmdg2:`pwd` #复制口令文件到crmdg2
--2. 修改口令文件名称
[[email protected] dbs]$ mv orapwcrmdb1 orapwcrmdb2 #在节点crmdb2操作
[[email protected] dbs]$ mv orapwcrmdb1 orapwcrmdb2 #在节点crmdg2操作
--3. 修改口令文件权限(实际通过oracle用户进行ftp不需要进行该操作)
[[email protected] dbs]$ chown oracle:oinstall orapwcrmdb2 #在节点crmdb1操作
[[email protected] dbs]$ chown oracle:oinstall orapwcrmdb1 #在节点crmdg1操作
[[email protected] dbs]$ chown oracle:oinstall orapwcrmdb2 #在节点crmdg2操作
3.4 测试TNS配置有效性
所有主机进行连通性测试。
[[email protected] ~]$ tnsping CRMDB_DG
[[email protected] ~]$ tnsping CRMDG_DG
[[email protected] ~]$ sqlplus sys/[email protected]_DG as sysdba
[[email protected] ~]$ sqlplus sys/[email protected]_DG as sysdba
4 配置数据库参数
DB_UNIQUE_NAME,INSTANCE_NAME,Net Service Name相关参数配置,参考归档配置相关参数。
4.1 主库参数调整
SQL> show parameter spfile;
--1. 备份主库参数文件
SQL> create pfile='/home/oracle/crmdb.pfile' from spfile;
--2. 修改主库参数文件
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(crmdb,crmdg)';
alter system set LOG_ARCHIVE_DEST_1='LOCATION=+CRMDBARCH VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=crmdb';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=CRMDG_DG LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=crmdg';
alter system set FAL_SERVER=CRMDG_DG;
alter system set STANDBY_FILE_MANAGEMENT=AUTO;
alter system set LOG_ARCHIVE_MAX_PROCESSES=4;
alter system set DB_FILE_NAME_CONVERT='+CRMDGDATA/crmdg/','+CRMDBDATA/crmdb/' scope=spfile;
alter system set LOG_FILE_NAME_CONVERT='+CRMDGDATA/crmdg/','+CRMDBDATA/crmdb/' scope=spfile;
--3. 重启主库进行验证
SQL> shutdown immediate;
SQL> startup;
--4. 生成当前主库参数文件,用于备库参数文件模版
SQL> create pfile='/home/oracle/crmdb.primary' from spfile;
*.audit_file_dest='/oracle/app/oracle/admin/crmdb/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='11.2.0.4.0'
*.control_files='+CRMDBDATA/crmdb/controlfile/current.256.960630751'
*.db_block_size=8192
*.db_create_file_dest='+CRMDBDATA'
*.db_domain=''
*.db_name='crmdb'
*.diagnostic_dest='/oracle/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=crmdbXDB)'
*.open_cursors=300
*.pga_aggregate_target=1073741824
*.processes=1500
*.remote_listener='crmdb-scan:1521'
*.remote_login_passwordfile='exclusive'
*.sessions=1655
*.sga_target=4294967296
crmdb1.instance_number=1
crmdb2.instance_number=2
crmdb1.thread=1
crmdb2.thread=2
crmdb1.undo_tablespace='UNDOTBS1'
crmdb2.undo_tablespace='UNDOTBS2'
*.fal_server='CRMDG_DG'
*.log_archive_config='DG_CONFIG=(crmdb,crmdg)'
*.log_archive_dest_1='LOCATION=+CRMDBARCH VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=crmdb'
*.log_archive_dest_2='SERVICE=CRMDG_DG LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=crmdg'
*.db_file_name_convert='+CRMDGDATA/crmdg/','+CRMDBDATA/crmdb/'
*.log_file_name_convert='+CRMDGDATA/crmdg/','+CRMDBDATA/crmdb/'
*.standby_file_management='AUTO'
4.2 主库创建STANDBY日志
ALTER DATABASE ADD STANDBY LOGFILE thread 1 group 5 ('+CRMDBDATA') SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE thread 1 group 6 ('+CRMDBDATA') SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE thread 1 group 7 ('+CRMDBDATA') SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE thread 2 group 8 ('+CRMDBDATA') SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE thread 2 group 9 ('+CRMDBDATA') SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE thread 2 group 10 ('+CRMDBDATA') SIZE 52428800;
STANDBY 日志文件创建原则:
1. 每个实例的STANDBY日志文件组大于联机日志文件组数;
2. 每个STANDBY日志文件大小与联机日志文件大小一致;
4.3 备库参数调整
将主库生成的参数文件复制一份,作为备库参数文件的模版进行修改。
[[email protected] ~]$ cp crmdb.primary crmdg.standby
--1. DG无关的参数
*.cluster_database=true
*.compatible='11.2.0.4.0'
*.db_block_size=8192
*.db_name='crmdb'
*.diagnostic_dest='/oracle/app/oracle'
*.open_cursors=300
*.pga_aggregate_target=809500672
*.processes=1500
*.sessions=1655
*.sga_target=2428502016
*.log_archive_max_processes=4
*.remote_login_passwordfile='exclusive'
crmdb1.undo_tablespace='UNDOTBS1'
crmdb2.undo_tablespace='UNDOTBS2'
crmdb1.instance_number=1
crmdb2.instance_number=2
*.standby_file_management='AUTO'
--2. 目录相关参数
*.audit_file_dest='/oracle/app/oracle/admin/crmdg/adump'
*.control_files='+CRMDGDATA/crmdg/controlfile/current.260.958853369'
*.db_create_file_dest='+CRMDGDATA'
--3. 网络服务相关参数
*.db_unique_name='crmdg'
*.log_archive_config='DG_CONFIG=(crmdg,crmdb)'
*.fal_server='CRMDB_DG'
*.log_archive_dest_1='LOCATION=+CRMDGARCH VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=crmdg'
*.log_archive_dest_2='SERVICE=CRMDB_DG LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=crmdb'
*.remote_listener='crmdg-cluster01-scan:1521'
*.db_file_name_convert='+CRMDBDATA/crmdb/','+CRMDGDATA/crmdg/'
*.log_file_name_convert='+CRMDBDATA/crmdb/','+CRMDGDATA/crmdg/'
备库参数文件模版:
*.audit_file_dest='/oracle/app/oracle/admin/crmdg/adump'
*.cluster_database=true
*.compatible='11.2.0.4.0'
*.db_block_size=8192
*.db_create_file_dest='+CRMDGDATA'
*.db_name='crmdb'
*.diagnostic_dest='/oracle/app/oracle'
*.open_cursors=300
*.pga_aggregate_target=809500672
*.processes=1500
*.remote_login_passwordfile='exclusive'
*.sessions=1655
*.sga_target=4294967296
*.pga_aggregate_target=1073741824
crmdb1.thread=1
crmdb2.thread=2
crmdb1.instance_number=1
crmdb2.instance_number=2
crmdb1.undo_tablespace='UNDOTBS1'
crmdb2.undo_tablespace='UNDOTBS2'
*.db_unique_name='crmdg'
*.control_files='+CRMDGDATA/crmdg/controlfile/current.260.958853369'
*.log_archive_config='DG_CONFIG=(crmdg,crmdb)'
*.log_archive_dest_1='LOCATION=+CRMDGARCH VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=crmdg'
*.log_archive_dest_2='SERVICE=CRMDB_DG LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=crmdb'
*.remote_listener='crmdg-cluster01-scan:1521'
*.fal_server='CRMDB_DG'
*.standby_file_management='AUTO'
*.db_file_name_convert='+CRMDBDATA/crmdb/','+CRMDGDATA/crmdg/'
*.log_file_name_convert='+CRMDBDATA/crmdb/','+CRMDGDATA/crmdg/'
注意:
问题:control_files 在进行RMAN DUPLICATE完成后,会发生变化,而且DUPLICATE完成后,备库使用的spfile文件包含内存信息,因此无法作为生产spfile文件使用。
建议:将DUPLICATE后的control_files参数替换创建备库时的pfile文件中的control_files参数,并通过该pfile文件,重新创建一个新的spfile文件。
4.4 创建备库所需目录
实例启动时,需要有审计日志目录,该目录需要手工在备库的2个节点(crmdg1/crmdg2)上进行创建。
[[email protected] ~]$ mkdir -p /oracle/app/oracle/admin/crmdg/adump
4.5 DG参数检查脚本
SET LINESIZE 160;
COL NAME FOR A30;
COL VALUE FOR A80;
SELECT INST_ID, NAME, VALUE
FROM GV$PARAMETER
WHERE (NAME IN ('cluster_database',
'db_name',
'db_unique_name',
'dg_broker_start',
'dg_broker_config_file1',
'dg_broker_config_file2',
'fal_client',
'fal_server',
'archive_lag_target',
'log_archive_max_processes',
'log_archive_config',
'log_archive_trace',
'db_file_name_convert',
'log_file_name_convert',
'remote_login_password_file',
'standby_file_management',
'redo_transport_user'))
OR (NAME LIKE 'log_archive_dest%' AND UPPER(VALUE) != UPPER('ENABLE'))
ORDER BY NAME, INST_ID;
5 备库初始化
5.1 设置备库ORACLE_SID环境变量
设置备库各节点环境变量参数ORACLE_SID与主库各节点一致。
[[email protected] ~]$ cat /home/oracle/.bash_profile | grep ORACLE_SID
5.2 启动备库数据库实例到NOMOUNT状态
将前面编辑的crmdg.standby文件,传输到备库各节点。启动备库实例到NOMOUNT状态。
[[email protected] ~]$ sqlplus / as sysdba
SQL> startup nomount pfile='/home/oracle/crmdg.standby';
[[email protected] ~]$ sqlplus / as sysdba
SQL> startup nomount pfile='/home/oracle/crmdg.standby';
5.3 测试主/备库数据库连接状态
主备库所有节点都进行测试操作。
[[email protected] ~]$ sqlplus sys/[email protected]_DG as sysdba
[[email protected] ~]$ sqlplus sys/[email protected]_DG as sysdba
5.4 执行DUPLICATE操作复制数据库
rman target sys/[email protected]_dg auxiliary sys/[email protected]_dg << !
run {
allocate channel ch001 type disk;
allocate channel ch002 type disk;
allocate channel ch003 type disk;
allocate channel ch004 type disk;
allocate auxiliary channel ch005 type disk;
duplicate target database for standby from active database;
release channel ch001;
release channel ch002;
release channel ch003;
release channel ch004;
release channel ch005;
}
!
5.5 创建备库参数文件
5.5.1 备库节点1完成参数文件调整工作
[[email protected] ~]$ sqlplus / as sysdba
--1. 查看当前的控制文件参数
SQL> show parameter control_files;
SQL> shutdown immediate;
--2. 编辑创建备库参数文件,用新的控制文件替换旧的控制文件信息
[[email protected] ~]$ vi crmdg.standby
*.control_files='+CRMDGDATA/crmdg/controlfile/current.256.958853369'
--3. 创建新spfile文件
SQL> create spfile='+CRMDGDATA/crmdg/spfilecrmdb.ora' from pfile='/home/oracle/crmdg.standby';
--4. 创建pfile文件,连接到新的参数文件
[[email protected] ~]$ cd $ORACLE_HOME/dbs
[[email protected] dbs]$ rm spfilecrmdb1.ora
[[email protected] dbs]$ vi initcrmdb1.ora
spfile='+CRMDGDATA/crmdg/spfilecrmdb.ora'
5.5.2 备库节点2完成pfile文件创建工作
[[email protected] ~]$ cd $ORACLE_HOME/dbs
[[email protected] dbs]$ vi initcrmdb2.ora
spfile='+CRMDGDATA/crmdg/spfilecrmdb.ora'
5.6 将备库加入到crs资源
[[email protected] ~]$ srvctl add database -d crmdg -n crmdb -o $ORACLE_HOME
[[email protected] ~]$ srvctl add instance -d crmdg -i crmdb1 -n crmdg1
[[email protected] ~]$ srvctl add instance -d crmdg -i crmdb2 -n crmdg2
5.7 启动备库
[[email protected] ~]$ srvctl start database -d crmdg
5.8 启动Active DataGuard
1. 用户oracle登陆crmdg1主机取消归档日志文件追加
SQL> alter database recover managed standby database cancel;
2. 用户oracle登陆crmdg1主机以real-time方式同步主数据库
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE PARALLEL 8 USING CURRENT LOGFILE DISCONNECT FROM SESSION;
SQL> SELECT OPEN_MODE FROM GV$DATABASE;
3. 观察日志追加状态
SQL> SELECT thread#,max(sequence#) from v$archived_log where applied='YES' GROUP BY THREAD#;
SQL> select * from v$archive_gap;
6 备库测试
以上是关于Oracle 11.2.0.4 RAC Standby实施手册的主要内容,如果未能解决你的问题,请参考以下文章
我的淘宝:Ubuntu 16.04.2上安装 Oracle 11.2.0.4 RAC
rhel7.4安装oracle 11G 11.2.0.4.0 RAC
我的淘宝:Ubuntu 12.04.5上安装 Oracle 11.2.0.4 RAC