关闭

【ORACLE】RAC+ASM环境下的一主二备的DG搭建

标签: oracleasmdataguard
901人阅读 评论(0) 收藏 举报
分类:

DR环境搭建简易过程

1.实验描述:

    本次实验为在RAC环境下搭建一套一主二备的DG测试环境。

2.环境描述:

 

数据库角色

实例名

数据库版本

IP地址

是否为RAC

是否使用ASM

主库

dgtest1

dgtest2

11.2.0.4

192.168.1.1

192.168.1.2

备库1

dgtest_s1

11.2.0.4

192.168.1.3

备库2

dgtest_s2

11.2.0.4

192.168.1.4

 

3.具题搭建过程

主库开启归档准备

原始测试环境中为RAC环境,且没有开启归档,按以下步骤将主库归档打开。

在数据库中将cluster状态暂时解除。

 

SQL>alter system set cluster_database=false scope=spfile;

 

在操作系统上用srvctl命令停止数据库

 

$srvctl stop database -d dgtest

 

使用sqlplus开启归档以及force logging

 

SQL>startup mount;

SQL>alter database archivelog;

SQL>alter database force logging;

SQL>alter system set cluster_database=true scope=spfile;

SQL>shutdown immediate;

 

在操作系统上用srvctl命令开启数据库

 

$srvctl start database -d dgtest

 

验证cluster状态以及归档状态

 

SQL>show parameter cluster;

......结果.......

 

SQL>archive log list

......结果.......

 

 

Standby Redo log准备

原始测试环境中主库为RAC两节点环境,redo log分为两个Thread,且每个Thread中包含有4组Redo log。

所以需要添加的Standby Redo log需要区分Thread 1和Thread2,并且每一个Thread中包含的Standby redo log都应符合公式 (maximum # of logfiles +1) *maximum # of threads。

 

 

SQL>alter database add standby logfile thread 1 group 9 size 4096M;

SQL>alter database add standby logfile thread 1 group 10 size 4096M;

SQL>alter database add standby logfile thread 1 group 11 size 4096M;

SQL>alter database add standby logfile thread 1 group 12 size 4096M;

SQL>alter database add standby logfile thread 1 group 13 size 4096M;

SQL>alter database add standby logfile thread 2 group 14 size 4096M;

SQL>alter database add standby logfile thread 2 group 15 size 4096M;

SQL>alter database add standby logfile thread 2 group 16 size 4096M;

SQL>alter database add standby logfile thread 2 group 17 size 4096M;

SQL>alter database add standby logfile thread 2 group 18 size 4096M;

 

初始化参数准备

主库上设置的跟DR相关的参数如下:

#############parameterfor primary############

db_unique_name='dgtest'

log_archive_config='DG_CONFIG=(dgtest,dgtest_s1,dgtest_s2)'

 

log_archive_dest_1='

LOCATION=+RECOC1/DGTEST/ARCHIVELOG

VALID_FOR=(ALL_LOGFILES,ALL_ROLES)

DB_UNIQUE_NAME=dgtest'

 

log_archive_dest_2='

SERVICE=dgtest_s1LGWR SYNC

VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)

DB_UNIQUE_NAME=dgtest_s1'

 

log_archive_dest_3='

SERVICE=dgtest_s2LGWR SYNC

VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)

DB_UNIQUE_NAME=dgtest_s2'

 

log_archive_dest_state_1=ENABLE

log_archive_dest_state_2=ENABLE

log_archive_dest_state_3=ENABLE

degtest1.fal_client=dgtest1

degtest2.fal_client=dgtest2

fal_server='dgtest_s1','dgtest_s2'

standby_file_management=AUTO

 

db_file_name_convert=

'/u01/app/oratest/oradata/dgtest_s1/datafile/','+DATAC1/DGTEST/DATAFILE/',

'/u01/app/oratest/oradata/dgtest_s2/datafile/','+DATAC1/DGTEST/DATAFILE/',

'/u01/app/oratest/oradata/dgtest_s1/tempfile/','+DATAC1/DGTEST/TEMPFILE/',

'/u01/app/oratest/oradata/dgtest_s2/tempfile/','+DATAC1/DGTEST/TEMPFILE/'

 

log_file_name_convert=

'/u01/app/oratest/oradata/dgtest_s1/log_group1/','+DATAC1/DGTEST/ONLINELOG/',

'/u01/app/oratest/oradata/dgtest_s1/log_group2/','+RECOC1/DGTEST/ONLINELOG/',

'/u01/app/oratest/oradata/dgtest_s2/log_group1/','+DATAC1/DGTEST/ONLINELOG/',

'/u01/app/oratest/oradata/dgtest_s2/log_group2/','+RECOC1/DGTEST/ONLINELOG/'

 

注:db_file_name_convert和log_file_name_convert参数需要按实际情况来更改

 

 

 

 

 

将主库上的pfile文件复制到备库系统,手工设置相应参数。

备库上需要删除的参数如下:

dgtest1.__db_cache_size=8992587776

dgtest2.__db_cache_size=9311354880

dgtest1.__java_pool_size=117440512

dgtest2.__java_pool_size=16777216

dgtest1.__large_pool_size=16777216

dgtest2.__large_pool_size=16777216

dgtest1.__shared_pool_size=1593835520

dgtest2.__shared_pool_size=1375731712

dgtest1.__streams_pool_size=0

dgtest2.__streams_pool_size=0

*.cluster_database_instances=2

dgtest1.cluster_interconnects='192.168.1.99'

dgtest2.cluster_interconnects='192.168.1.100'

dgtest2.instance_number=2

dgtest1.instance_number=1

dgtest2.sga_target=10737418240

dgtet1.sga_target=10737418240

dgtest2.thread=2

dgtest1.thread=1

dgtest2.undo_tablespace='UNDOTBS2'

dgtest1.undo_tablespace='UNDOTBS1'

备库上需要在下方增加或修改的参数如下:

#############parameterfor standby1################

db_unique_name='dgtest_s1'

log_archive_config='DG_CONFIG=(dgtest_s1,dgtest,dgtest_s2)'

 

log_archive_dest_1='

LOCATION=/u01/app/oratest/oradata/dgtest_s1/arch

VALID_FOR=(ALL_LOGFILES,ALL_ROLES)

DB_UNIQUE_NAME=dgtest_s1'

 

log_archive_dest_2='

SERVICE=dgtestLGWR SYNC

VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)

DB_UNIQUE_NAME=dgtest'

 

log_archive_dest_3='

SERVICE=dgtest_s2LGWR SYNC

VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)

DB_UNIQUE_NAME=dgtest_s2'

 

log_archive_dest_state_1=ENABLE

log_archive_dest_state_2=ENABLE

log_archive_dest_state_3=ENABLE

fal_client=dgtest_s1

fal_server='dgtest1','dgtest2','dgtest_s2'

standby_file_management=AUTO

 

db_file_name_convert=

'+DATAC1/DGTEST/DATAFILE/','/u01/app/oratest/oradata/dgtest_s1/datafile/',

'/u01/app/oratest/oradata/dgtest_s2/datafile/','/u01/app/oratest/oradata/dgtest_s1/datafile/',

'+DATAC1/DGTEST/TEMPFILE/','/u01/app/oratest/oradata/dgtest_s1/tempfile/',

'/u01/app/oratest/oradata/dgtest_s2/tempfile/','/u01/app/oratest/oradata/dgtest_s1/tempfile/'

 

log_file_name_convert=

'+DATAC1/DGTEST/ONLINELOG/','/u01/app/oratest/oradata/dgtest_s1/log_group1/',

'+RECOC1/DGTEST/ONLINELOG/','/u01/app/oratest/oradata/dgtest_s1/log_group2/',

'/u01/app/oratest/oradata/dgtest_s2/log_group1/','/u01/app/oratest/oradata/dgtest_s1/log_group1/',

'/u01/app/oratest/oradata/dgtest_s2/log_group2/','/u01/app/oratest/oradata/dgtest_s1/log_group2/'

 

 

备库2参数修改参考备库1参数。

 

Listener内容准备

由于使用duplicate进行创建Standby数据库,所以需要在监听中添加相应的静态监听,使得处于nomount状态的备库可以被静态注测。

SID_LIST_LISTENER=

  (SID_LIST=

    (SID_DESC=

      (SID_NAME=dgtest_s1)

     (ORACLE_HOME=/u01/app/oratest/product/11.2.0.4/testhome)

      (GLOBALE_DBNAE=dgtest_s1)

    )

  )   

Tnsnames内容准备

针对初始化参数的设置,需添加相应的解析

在主库两节点和备库节点上都修改tnsnames.ora内容,添加如下内容:

DGTEST=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT= 1521))

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT= 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = dgtest)

    )

  )

 

DGTEST_S1=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT= 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = dgtest_s1)

    )

  )

 

DGTEST_S2=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.4)(PORT= 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = dgtest_s2)

    )

  )

 

 

DGTEST1=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT= 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = dgtest)

    )

  )

 

DGTEST2=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT= 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = dgtest)

    )

  )

注:由于本次实验使用默认1521端口,不需要设置local_listener。实际生产环境很可能将不再使用默认端口,建议设置参数local_listener,并在tnsnames.ora文件中添加相应对应解析。

 

密码文件准备

将主库的密码文件复制到备库,即

主库服务器上的文件 $ORACLE_HOME/dbs/orapwdgtest1

复制到备库1和备库2相同目录下。

重命名备库1和备库2上的密码文件

renameorapwdgtest1 orapwdgtest_s1

 

duplicate数据库

在任意节点上执行以下命令去完成Standby数据库的创建

$rmantarget sys/oracle@dgtest auxiliary sys/oracle@dgtest_s1

 

RMAN>duplicatetarget database for standby from active database;

.

.

.

duplicate输出项

.

.

 

RMAN>exit

 

 

 

DR环境启动

正式启动前,确认主库所有的归档日志都传送到了备库,如果主库新产生了归档日志,则需要手工传到备库

归档日志一致之后,在备库端执行同步操作。同步分为redo aply 和realtimeapply两种,二选一进行

Redo apply:

alterdatabase recover managed standby database disconnect from session;

Realtime apply:

alterdatabase recover managed standby database using current logfile disconnect fromsession;

注:Realtime apply模式可以允许数据库以Read Only状态打开(ADG)。

SQL>alter database open

 

SQL>alter database recover managed standby database using current logfiledisconnect from session;

如果从一种模式切换到另一种模式,不能直接执行,需先停止同步进程,再执行同步。停止同步进程命令如下:

alterdatabase recover managed standby database cancel;

 

 

DR验证和检查

手工切换日志进行同步检查

首先检查备库日志状态

SQL>select thread#,max(sequence#) from v$log_history group by thread#;

 

   THREAD# MAX(SEQUENCE#)

------------------------

         1           9862

         2           3862

 

一节点手工切换

SQL>alter system switch logfile;

从主库一节点alert log中观察日志切换并同步到备库的过程

LNS1started with pid=959, OS id=46530724

FriApr 29 09:32:11 BEIST 2011

Thread1 advanced to log sequence 9862 (LGWR switch)

  Current log# 1 seq# 9862 mem# 0:/home/db/oracle/oradata/db/COSTCORE/REDO1_01_1

FriApr 29 09:32:11 BEIST 2011

******************************************************************

LGWR:Setting 'active' archival for destination LOG_ARCHIVE_DEST_2

******************************************************************

LNS:Standby redo logfile selected for thread 1 sequence 9862 for destinationLOG_ARCHIVE_DEST_2

FriApr 29 09:32:15 BEIST 2011

ARC0:Standby redo logfile selected for thread 1 sequence 9861 for destinationLOG_ARCHIVE_DEST_2

FriApr 29 09:32:31 BEIST 2011

 

二节点手工切换

SQL>alter system switch logfile;

从主库二节点alert log中观察日志切换并同步到备库的过程

LNS1started with pid=54, OS id=15860032

FriApr 29 09:43:20 BEIST 2011

Thread2 advanced to log sequence 3864 (LGWR switch)

  Current log# 13 seq# 3864 mem# 0:/home/db/oracle/oradata/db/COSTCORE/REDO2_01_1

FriApr 29 09:43:21 BEIST 2011

******************************************************************

LGWR:Setting 'active' archival for destination LOG_ARCHIVE_DEST_2

******************************************************************

LNS:Standby redo logfile selected for thread 2 sequence 3864 for destinationLOG_ARCHIVE_DEST_2

FriApr 29 09:43:21 BEIST 2011

ARC1:Standby redo logfile selected for thread 2 sequence 3863 for destinationLOG_ARCHIVE_DEST_2

检查备库日志状态,可见已经自动同步

SQL>select thread#,max(sequence#) from v$log_history group by thread#

 

   THREAD# MAX(SEQUENCE#)

------------------------

         1           9863

         2           3863

 

 

主要遭遇问题列表

测试环境搭建过程中主要遭遇问题列表如下:

1.       duplicate过程中出现RMAN-03009,ORA-17628异常

原因:这是由于主库为ASM的OMF管理环境,而备库则是正常的管理模式,导致db_file_convert参数无法正常解析与转换相应的数据文件

解决: 修改db_file_convert参数,将解析目录写到datafile的真实路径上即可。

 

2.       ORA-16047 : DGID mismatch between destination setting and standby

原因:备端没有设置log_archive_config参数

解决:备端设置参数

altersystem set log_archive_config='DG_CONFIG=(dgtest_s1,dgtest,dgtest_s2)'scope=both;

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2093次
    • 积分:68
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档