oracle 11.2.4联机文档,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端口。主机名IP地址描述

主数据库环境crmdb1192.168.56.210公网IP地址

192.168.56.216DG专署IP地址

crmdb2192.168.56.211公网IP地址

192.168.56.217DG专署IP地址

备数据库环境crmdg1192.168.56.220公网IP地址

192.168.56.225DG专署IP地址址

crmdg2192.168.56.221公网IP地址

192.168.56.226DG专署IP地址数据库类型主机名DB_UNIQUE_NAMEINSTANCE_NAMENet Service Name

主库crmdb1crmdbcrmdb1CRMDB_DG

crmdb2crmdb2

备库crmdg1crmdgcrmdb1CRMDG_DG

crmdb2crmdb2

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

2Active 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;

3Active DataGuard实施准备

为便于主备库切换时,应用可以进行快速切换,主备库数据库实例名名称相同。

3.1配置DG专用监听

3.1.1创建LISTENER_DG

通过grid登录主/备数据库各节点主机,创建LISTENER_DG监听器。主/备数据库主机清单见:IP地址规划。

主库配置文件(crmdb1/crmdb2主机):

[grid@crmdb1 ~]$cd $ORACLE_HOME/network/admin

[grid@crmdb1 admin]$cp listener.ora listener.ora.`date +%Y%m%d`

[grid@crmdb1 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主机):

[grid@crmdg1 ~]$cd $ORACLE_HOME/network/admin

[grid@crmdg1 admin]$cp listener.ora listener.ora.`date +%Y%m%d`

[grid@crmdg1 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资源

主库:

[grid@crmdb1 ~]$srvctl add listener -l LISTENER_DG -p TCP:1525

[grid@crmdb1 ~]$srvctl start listener -l LISTENER_DG -ncrmdb1

[grid@crmdb2 ~]$srvctl start listener -l LISTENER_DG -ncrmdb2

备库:

[grid@crmdg1 ~]$srvctl add listener -l LISTENER_DG -p TCP:1525

[grid@crmdg1 ~]$srvctl start listener -l LISTENER_DG -ncrmdg1

[grid@crmdg2 ~]$srvctl start listener -l LISTENER_DG -ncrmdg2

3.2配置TNS别名

该配置主备库相同。

[oracle@crmdb1 ~]$cd $ORACLE_HOME/network/admin

[oracle@crmdb1 admin]$cp tnsnames.ora tnsnames.ora.`date +%Y%m%d`

[oracle@crmdb1 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节点上。

[oracle@crmdb1 ~]$cd $ORACLE_HOME/dbs

--1. ftp到各节点,使用主机名便于整理脚本,实际操作需要主机ip地址

[oracle@crmdb1 dbs]$scp orapwcrmdb1 crmdb2:`pwd`#复制口令文件到crmdb2

[oracle@crmdb1 dbs]$scp orapwcrmdb1 crmdg1:`pwd`#复制口令文件到crmdg1

[oracle@crmdb1 dbs]$scp orapwcrmdb1 crmdg2:`pwd`#复制口令文件到crmdg2

--2. 修改口令文件名称

[oracle@crmdb2 dbs]$mv orapwcrmdb1 orapwcrmdb2#在节点crmdb2操作

[oracle@crmdg2 dbs]$mv orapwcrmdb1 orapwcrmdb2#在节点crmdg2操作

--3. 修改口令文件权限(实际通过oracle用户进行ftp不需要进行该操作)

[oracle@crmdb2 dbs]$chown oracle:oinstall orapwcrmdb2#在节点crmdb1操作

[oracle@crmdg1 dbs]$chown oracle:oinstall orapwcrmdb1#在节点crmdg1操作

[oracle@crmdg2 dbs]$chown oracle:oinstall orapwcrmdb2#在节点crmdg2操作

3.4测试TNS配置有效性

所有主机进行连通性测试。

[oracle@crmdb1 ~]$tnsping CRMDB_DG

[oracle@crmdb1 ~]$tnsping CRMDG_DG

[oracle@crmdb1 ~]$sqlplus sys/oracle@CRMDB_DG as sysdba

[oracle@crmdb1 ~]$sqlplus sys/oracle@CRMDG_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=+CRMDBARCHVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=crmdb';

alter system set LOG_ARCHIVE_DEST_2='SERVICE=CRMDG_DGLGWR 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日志文件大小与联机日志文件大小一致;

将主库生成的参数文件复制一份,作为备库参数文件的模版进行修改。

[oracle@crmdb1 ~]$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=+CRMDGARCHVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=crmdg'

*.log_archive_dest_2='SERVICE=CRMDB_DGLGWR 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)上进行创建。

[oracle@crmdg1 ~]$mkdir -p /oracle/app/oracle/admin/crmdg/adump

4.5DG参数检查脚本

SETLINESIZE160;

COLNAMEFORA30;

COLVALUEFORA80;

SELECTINST_ID,NAME,VALUE

FROMGV$PARAMETER

WHERE(NAMEIN('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(NAMELIKE'log_archive_dest%'ANDUPPER(VALUE) !=UPPER('ENABLE'))

ORDERBYNAME, INST_ID;

5备库初始化

5.1设置备库ORACLE_SID环境变量

设置备库各节点环境变量参数ORACLE_SID与主库各节点一致。

[oracle@crmdg1 ~]$cat /home/oracle/.bash_profile | grep ORACLE_SID

5.2启动备库数据库实例到NOMOUNT状态

将前面编辑的crmdg.standby文件,传输到备库各节点。启动备库实例到NOMOUNT状态。

[oracle@crmdg1 ~]$sqlplus / as sysdba

SQL>startup nomount pfile='/home/oracle/crmdg.standby';

[oracle@crmdg2 ~]$sqlplus / as sysdba

SQL>startup nomount pfile='/home/oracle/crmdg.standby';

5.3测试主/备库数据库连接状态

主备库所有节点都进行测试操作。

[oracle@crmdb1 ~]$sqlplus sys/oracle@CRMDG_DG as sysdba

[oracle@crmdb1 ~]$sqlplus sys/oracle@CRMDB_DG as sysdba

5.4执行DUPLICATE操作复制数据库

rman target sys/oracle@crmdb_dg auxiliary sys/oracle@crmdg_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完成参数文件调整工作

[oracle@crmdg1 ~]$ sqlplus / as sysdba

--1. 查看当前的控制文件参数

SQL>show parameter control_files;

SQL>shutdown immediate;

--2. 编辑创建备库参数文件,用新的控制文件替换旧的控制文件信息

[oracle@crmdg1 ~]$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文件,连接到新的参数文件

[oracle@crmdg1 ~]$cd $ORACLE_HOME/dbs

[oracle@crmdg1 dbs]$rm spfilecrmdb1.ora

[oracle@crmdg1 dbs]$vi initcrmdb1.ora

spfile='+CRMDGDATA/crmdg/spfilecrmdb.ora'

5.5.2备库节点2完成pfile文件创建工作

[oracle@crmdg2 ~]$cd $ORACLE_HOME/dbs

[oracle@crmdg2 dbs]$vi initcrmdb2.ora

spfile='+CRMDGDATA/crmdg/spfilecrmdb.ora'

5.6将备库加入到crs资源

[oracle@crmdg1 ~]$srvctl add database -d crmdg -n crmdb -o $ORACLE_HOME

[oracle@crmdg1 ~]$srvctl add instance -d crmdg -i crmdb1 -n crmdg1

[oracle@crmdg1 ~]$srvctl add instance -d crmdg -i crmdb2 -n crmdg2

5.7启动备库

[oracle@crmdg1 ~]$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 DATABASEPARALLEL 8USING 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备库测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值