本文详细展示关于Oracle database 11g中Active DG的实现细节。

环境说明:
SID:allah

主库(主库端,必须开启日志归档模式[alter database archivelog;]):
activedg-master:192.168.195.28
DB Unique Name:allah1

备库:
activedg:192.168.195.27
DB Unique Name:allah2

一、SQL*Net
对于Data Guard的架构来说,主库与备库之间,数据库的SID必须是一样的,但是DB_UNQ_NAME(db_unique_name)可以不一样。
在同一个DG的架构中,不同的服务器的数据库实例的UNIQUE NAME各不相同,用以UNIQUE_NAME命名的TNS与Service Name来区分具体是哪一个服务器的哪一个实例。

因为UNIQUE NAME不一定是真实的SID的名字,所以在注册监听器的时候无法使用自动的监听注册,必须手动注册。
不同的服务器,仅需注册与本机关联的UNIQUE NAME到监听器。
而不同的服务器之间,相同的是到其他的服务器的TNSNAME信息。

在我的环境中,由于资源与计算能力的限制,我的DG架构仅包含两台服务器。

它们的SQL*Net方面的配置分别如下所示:
主库:
监听器状态

文件:listener.ora

文件:tnsnames.ora

备库:
监听器状态

文件:listener.ora

文件:tnsnames.ora

在SQL*Net部分,你需要保证的是DG的各个服务器之间,可以通过tnsping连通其他的服务器上注册到监听器里的Service:

二、修改主库的初始化参数
从修改初始化参数开始,就是正式的对DG开始配置了。
这部分的配置可以参考Oracle的联机文档获得完整的配置列表,也可以按照本文下述的方式,简易的实现。

0. 规划好需要使用到的两个目录地址:
ARCHIVE LOG的临时目录:/u01/app/oracle/archivelog
STANDBY LOG的临时目录:/u01/app/oracle/standbylog

用oracle用户,预先创建好它们:
mkdir -p /u01/app/oracle/{archivelog,standbylog}

1. 强制日志(Force Logging)
alter system force logging

2. 定义:DB Unique Name
alter system set db_unique_name=’xxxN’ scope=spfile;

一般主库会设为xxx1,备库会设为xxx2 .. X。

3. DG_Config
alter system set log_archive_config=’DG_CONFIG=(xxx1,xxx2)’;

DG_Config=(主库的Unique Name,备库的Unique Name)

4. ARCHIVE LOG
alter system set log_archive_dest_1=’LOCATION=要传输的归档日志临时路径 valid_for=(all_logfiles,primary_role) db_unique=主库’ scope=spfile;

5. 传输方式
alter system set log_archive_dest_2=’SERVICE=备库 lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=备库’;

传输方式指定的是ARCHIVE LOG传输的方向。
在主库端,传输的方向当然是备库,所以,SERVICE应该指向到备库。
而在备库端,传输方向当然是主库,所以,SERVICE自然应该指向主库。

6. STANDBY LOG
alter system set log_archive_dest_3=’LOCATION=接受的归档日志的临时路径 valid_for=(standby_log,standby_role) db_unique_name=主库’ scope=spfile;

7. fal_client
alter system set fal_client=’主库’;

8. fal_server
alter system set fal_server=’备库’;

9. Standby LOG File 管理方式
alter system set standby_file_management=auto;

10. 创建STANDBY LOG GROUP:
alter database add standby logfile group xxx ‘日志数据文件存放位置(这里的位置和上面的临时路径是不一样的)’ size 大小(通常50M就足够了);

11. 关闭主库,并生成初始化参数文件(PFILE)
shudown immediate;
create pfile=’需要存放的路径/文件名’ from spfile;

如上步骤,在我的环境中的实现如下:

查看下全部修改完成时,主库的参数情况:

三、为备库准备初始化参数文件
为备库准备的初始化参数文件,是在主库生成的那个初始化参数文件的基础上改动形成的。

通常,你需要在主库的初始化参数的基础上,变动的内容如下所示:

1. DB Unique Name
*.db_unique_name=’备库的Unique Name’

2. fal_client
*.fal_client=’备库’

3. fal_server
*.fal_server=’主库’

4. ARCHIVE LOG
alter system set log_archive_dest_1=’LOCATION=要传输的归档日志临时路径 valid_for=(all_logfiles,primary_role) db_unique=备库’ scope=spfile;

5. 传输方式
alter system set log_archive_dest_2=’SERVICE=主库 lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=主库’;

6. STANDBY LOG
alter system set log_archive_dest_3=’LOCATION=接受的归档日志的临时路径 valid_for=(standby_log,standby_role) db_unique_name=备库’ scope=spfile;

在我的环境中,备库的初始化参数,如下所示:

四、备库:使用上述设定的初始化参数文件,拉起数据库到:NOMOUNT阶段
这里,使用初始化参数文件拉库没有问题,否则上面费那么大的劲改参数文件干嘛?
为什么要到NOMOUNT阶段?
因为:
首先,当前备库服务器上是没有任何数据文件的,数据库只能到NOMOUNT阶段;
其次,需要数据库在NOMOUNT阶段,以便于RMAN可以执行DUPLICATE,将主库的数据文件、日志文件、控制文件(等)同步到备库的服务器上。

这里需要注意的是:
数据库启动的过程中,会涉及到写Audit日志等操作,所以你需要保证备库上与数据库实例相关的所有目录结构与主库一致。若非如此,你会遇到很多奇葩的问题。

这些目录具体如下:
日志相关的目录:$ORACLE_BASE/admin//{adump,bdump,dpdump,pfile}
数据文件相关的目录:$ORACLE_BASE/oradata/
快速恢复区:$ORACLE_BASE/fast_recovery_area/

在我的环境中,如下:

创建密码文件:

通过PFILE生成服务器参数文件(SPFILE):

启动数据库到NOMOUNT:

五、备库:通过RMAN的Duplicate复制主库到备库
连入RMAN:
Command is:rman target sys/oracle@allah1 auxiliary sys/oracle@allah2

执行复制(Duplicate):
Command is:duplicate target database for standby nofilenamecheck from active database;

复制完成后,你可以在备库的数据库数据文件目录中看到变化:

六、将备库的DG设为:Active DG模式(Open_MODE,运行模式)

七、将备库的DG的数据保护模式修改为:最高可用
查看备库当前的保护模式与级别:

当前处于最大性能模式。

查看主库的数据保护模式与级别:

主库修改数据保护模式:

再次查看主库与备库的数据保护模式与级别:
主库:

备库:

如果备库不可用,则主库的数据保护级别(Protection_level)将变成:RESYNCHRONIZATION。

八、测试:
在主库修改某个数据,然后看备库是否可以同步到变更。

操纵对象:scott.dept
操作行为:(主库)添加一条记录
验证方式:(备库)主库插入记录前后查询该数据表的状态变化

插入前,备库查看数据表状态:

主库插入记录:

备库,再次查询数据表记录:

九、终了
至此,11g Active DG的内容,就告一段落了。
——————————————————
Finished。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

隐藏
变装