暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

物理Data Guard(二)配置

原创 大柏树 2022-12-29
976

配置物理Data Guard的步骤有很多种方法。方法不同,配置Data Guard的步骤也不同,比如有些方法要求生产主机关闭,有些方法要求创建AUXILIARY数据库。本节主要讲解配置物理Data Guard的最佳实践流程。

1.配置Data Guard简要流程

  • (1)检查主备主机的操作系统是否支持配置Data Guard。
  • (2)检查主备数据库之间的网络带宽是否满足要求,生产库产生的归档量越大,带宽要求越高。
  • (3)检查备份端的存储空间和性能是否满足要求,生产库产生的归档量越大,存储的空间和性能要求越高。
  • (4)检查生产库是否处于归档模式,并打开FORCE LOGGING模式。如果数据库不处于FORCE LOGGING模式,虽然备库应用日志时不会出错,但在备库中无法查询NOLOGGING操作的表。
  • (5)在备份端要安装和生产库一样的数据库软件版本,并且建议安装相同的PSU补丁。
  • (6)复制生产库的密码文件至备份端相应的目录中(如果是RAC,则要求所有节点的密码文件相同),配置生产端和备份端中的监听配置文件(主、备实例之间要能够使用sysdba权限互相连接,如果不能互连,则主、备之间的切换不能成功),这一步非常重要。
  • (7)配置生产端和备份端数据库的Data Guard相关参数
  • (8)根据数据库参数文件在备份端创建相关目录,如STANDBY CONTROLFILE的存放路径、跟踪文件存放路径、数据文件存放路径、闪回日志存放路径(如果备份端不开启闪回或者数据库版本为Oracle 9i,则不需要配置)等。
  • (9)在生产端创建STANDBY CONTROLFILE文件,并传输至备份端备库数据库参数CONTROL_FILES所指定的位置,建议配置两个以上的STANDBY CONTROLFILE。
  • (10)启动备份库至MOUNT状态,添加STANDBY LOGFILE。其添加原则是STANDBY LOGFILE的大小至少要和生产库日志文件的大小保持一致,且日志组数在两组以上(如果生产库为RAC,则每个THREAD添加两组以上日志组)。这一步完成之后,生产库产生的日志应该能够自动传输到备份端了。如果日志传输失败,则查看生产端和备份端的警告日志,查询视图V$ARCHIVE_DEST查看日志传输失败的原因。
  • (11)同步生产数据库至备份端。笔者常用的方法是将生产数据库置于热备份模式之后,将数据文件用FTP工具传输到备份端,传输完成之后将生产数据库置回END BAKCUP。如果生产数据文件放在ASM中,那么可以通过RMAN将其镜像复制出来。
  • (12)在备份端手动应用归档日志(即执行RECOVER STANDBY DATABASE),当STANDBY控制文件和数据文件的SCN值一致时,就可以启用MRP进程自动应用归档日志了。如果数据库版本在Oracle 10g以上,可以在备库开启数据库级别闪回。Oracle 11g企业版推出了Active Data Guard功能,备库的MRP进程可以在READ ONLY状态下应用归档日志,利用这个特性可以将一些只读业务从生产库迁移至备份库中来运行,从而减轻生产库的压力。
  • (13)配置完Data Guard之后,就可以进行主、备数据库的角色切换了。角色切换有SWITCHOVER、GRACEFUL FAILOVER和FORCED FAILOVER 3种方式。在进行SWITCHOVER和GRACEFUL FAILOVER切换时要求备库应用完生产库的所有日志,所以这两种方式不会丢失数据,而FORCED FAILOVER相当于将备库通过RESETLOGS选项强制打开,存在丢失数据的风险。

注意 由于配置Data Guard前需要将主库设置为FORCE LOGGING,如果主库中NOLOGGING操作比较多,那么设置FORCE LOGGING之后会影响数据库性能。

2.配置Data Guard相关参数

2.1.日志传输和归档日志存放路径参数

从Oracle 11g开始,生产库和备份库产生的归档日志存放路径都在LOG_ARCHIVE_DEST_N参数指定的路径中,一般将LOG_ARCHIVE_DEST_1参数设置为生产数据库归档日志存放路径,如下所示:

*.log_archive_dest_1='location=/arch/orcl'

在Oracle 10g之前,数据库参数STANDBY_ARCHIVE_DEST主要用于数据库处于备库角色时存放归档日志,如下所示

*.standby_archive_dest='/arch/orcl'

关于生产库日志传输到备份端的参数,可以根据不同的保护模式配置不同的参数。一般情况下,将LOG_ARCHIVE_DEST_2参数设置为在线日志或者归档日志传输参数,如下所示

*.log_archive_dest_2='service=rzorcl lgwr async noaffirm'

数据库参数STANDBY_FILE_MANAGEMENT表示备份库检测到生产库增加数据文件后是否自动增加数据文件,AUTO表示备份端自动增加数据文件,如下所示:

*.standby_file_management='AUTO'

当将数据库参数STANDBY_FILE_MANAGEMENT设置为AUTO时,备库中的以下操作会受到限制:
❑ALTER DATABASE RENAME
❑ALTER DATABASE ADD/DROP LOGFILE
❑ALTER DATABASE ADD/DROP STANDBY LOGFILE MEMBER
❑ALTER DATABASE CREATE DATAFILE AS

2.2.数据文件和日志文件路径转换参数

如果生产库和备份库的数据文件和日志文件使用的是相同的路径,则可以不设置路径转换参数。路径转换参数只在数据库处于备份角色时生效。
对于数据文件路径转换参数,**第一个路径表示生产数据库中数据文件的存放位置,第二个路径表示备份数据库中数据文件的存放位置。**以下示例为路径之间一对一映射,当多对多映射时,应将所有对应路径一一写出来,如下所示:

*.db_file_name_convert='/Tbackup/orcl/oradata','/u01/app/oracle/oradata/orcl'

对于在线日志路径转换参数,**第一个路径表示生产数据库在线日志文件的存放位置,第二个路径表示备份数据库在线日志文件的存放位置。**以下示例为路径之间一对一映射,当多对多映射时,应将所有对应路径一一写出来,如下所示:

*.log_file_name_convert='/Tbackup/orcl/oradata','/u01/app/oracle/oradata/orcl'

除以上参数外,Oracle官方文档还要求配置数据库参数FAL_SERVER、FAL_CLIENT用于检测备库归档日志是否连续,但实践表明,该类参数通常可以不进行配置。

3.配置物理Data Guard示例

环境:

主库操作系统 备库操作系统 数据库版本
windows server 2012 windows server 2012 oracle 11.2.0.1

采用方法:采用主库备份来配置DG,如果主库已经开启了归档,则主库不用关机。

3.1.主库开启强制日志

alter database force logging;

3.2.主备都配置tnsnames.ora文件

orcl = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = **)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) orcladg= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = **)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcladg) ) )

3.3.备库配置静态监听 listener.ora

SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = C:\oracle\product\10.2.0\db_1) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = meddocadg) (Oracle_HOME = C:\oracle\product\10.2.0\db_1) (SID_NAME = orcladg) ) )

测试:
tnsping orcl
tnsping orcladg

3.4.主库生成pfile文件和standby controlfile文件

create pfile='D:\temp\pfile.ora' from spfile; alter database create standby controlfile as 'D:\temp\control01.ctl';

把主库生成的pfile文件、standby controlfile文件、密码文件传输到备库。

3.5.主库修改参数

alter system set log_archive_config='DG_CONFIG=(orcl,orcladg)' scope=both; alter system set LOG_ARCHIVE_DEST_1='LOCATION=C:\archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl' scope=both; alter system set LOG_ARCHIVE_DEST_2='SERVICE=orcladg ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcladg' scope=both; alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=both; alter system set LOG_ARCHIVE_DEST_STATE_2=DEFER scope=both; alter system set FAL_SERVER=orcladg scope=both; alter system set DB_FILE_NAME_CONVERT='C:\oracle\product\10.2.0\oradata\orcldg','C:\oracle\product\10.2.0\oradata\orcl' scope=both; alter system set LOG_FILE_NAME_CONVERT='C:\oracle\product\10.2.0\oradata\orcldg','C:\oracle\product\10.2.0\oradata\orcl' scope=both;

3.6.备库pfile.ora修改

在pfile文件中添加如下内容:

DB_UNIQUE_NAME=orcladg LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcladg,orcl)' LOG_ARCHIVE_DEST_1= 'LOCATION=/u01/app/oracle/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcladg' LOG_ARCHIVE_DEST_2= 'SERVICE=orcl ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl' LOG_ARCHIVE_DEST_STATE_1=ENABLE LOG_ARCHIVE_DEST_STATE_2=ENABLE DB_FILE_NAME_CONVERT='C:\oracle\product\10.2.0\oradata\orcl','C:\oracle\product\10.2.0\oradata\orcladg' LOG_FILE_NAME_CONVERT='C:\oracle\product\10.2.0\oradata\orcl','C:\oracle\product\10.2.0\oradata\orcladg' STANDBY_FILE_MANAGEMENT=AUTO

根据pfile文件创建相应的目录。

3.7.备份主库

run { allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; sql 'alter system archive log current'; backup database format 'C:\archivelog\backup\single_backup_%U'; release channel c1; release channel c2; release channel c3; }

主库备份完成之后传输备份文件到备库。

3.8.启动备库到mount阶段

Oradim -new -sid orcladg sqlplus / as sysdba startup nomount pfile='C:\archivelog\pfile.ora'; --拷贝控制文件到pfile中指定的位置 alter database mount;

3.9.restore备库

rman target / catalog start with 'C:\backup\'; crosscheck backup delete expired backup; restore database; recover managed standby database disconnect from session;

3.10.创建standby redo log

alter database add standby logfilealter database add standby logfilealter database add standby logfilealter database add standby logfile--------------------------------- set lines 200 pages 9999 LONG 5000 col member for a80 select a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB from v$standby_log a,v$logfile b where a.group#=b.group#;

3.11.开启实时应用

sqlplus / as sysdba recover managed standby database cancel; alter database open; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION NODELAY;
最后修改时间:2022-12-29 10:30:32
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论