qns_fengyusong 发表于 2018-9-12 09:37:28

Oracle 白皮书-Oracle Data Guard 快速启动故障切换指南(2)

指南概述
  本指南首先介绍一个将作为 Data Guard 配置主数据库的数据库。对于本次构建,我们将使用一个物理备用数据库。FSFO 还可以与逻辑备用数据库结合使用,支持 FSFO 的配置可有多个备用数据库,包括混合的物理数据库和逻辑数据库,但只有一个备用数据库可随时作为故障切换目标。
  本指南中的主要步骤包括:

[*]  配置 Oracle Net(即 SQL*Net)
[*]  准备主数据库
[*]  创建物理备用数据库
[*]  启用闪回数据库
[*]  创建 Broker 配置
[*]  配置观察器
[*]  启用并测试 FSFO
本文使用的惯例
  数据库主机称为“a”和“b”主机,数据库本身称为“a”和“b”数据库。观察器主机是“observer.demo.org”。
  示例中使用的名称:
数据库名称  db1
数据库唯一名称  db1_a
  db1_b
  域名
demo.org主机名  dbhost-a
  dbhost-b
  observer
Data Guard 监听器名称LISTENER_DGTNS 别名  db1_a
  db1_b
  输入的命令在阴影框中以普通文本显示。 预期输出以蓝色文本显示。
配置 Oracle Net
  Data Guard 使用 Oracle Net (SQL*Net) 在主数据库和备用数据库以及 FSFO 观察器之间进行通信。正确配置 Oracle Net 是成功部署 FSFO 的一个关键因素。错误的 Oracle Net 配置是导致所报告的 FSFO 问题的主要原因。
  注:Data Guard 的正确操作需要专用服务器连接。 不要针对 Data Guard 使用 Shared Server(以前称为 MTS)
配置监听器
  针对应用程序连接和 Data Guard 连接使用不同的监听器是很好的做法。 这样,Data Guard 可以在应用程序监听器因进行维护而停止工作时保持运行。请确保在 local_listeners 数据库参数中包括 Data Guard 监听器。
  大多数在 FSFO 环境中使用的网络服务可使用动态注册,但要在角色转换期间或故障切换后的恢复期间启用 Broker 以重新启动实例,您必须定义一个名为 db_unique_name_dgmgrl.db_domain 的静态服务。(注:11.1.0.7 添加了 StaticConnectIdentifierBroker 数据库属性,允许您指定一个不同的服务名称。) 如果您要使用 RMAN 创建备用数据库,还需要一个静态服务来重新启动所创建的数据库。为了将 Broker 和非 Broker 活动分离,建议再定义一个静态服务。
  针对主机“a”的 listener.ora 配置:
  LISTENER_DG =
  (DESCRIPTION=    (ADDRESS_LIST=      (ADDRESS=(PROTOCOL=tcp)(HOST=dbhost-a)(PORT=1522))    ))
  SID_LIST_LISTENER_DG=(SID_LIST=
  (SID_DESC=
  (SID_NAME=db1)
  (SDU=32767)
  (ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1)
  (GLOBAL_DBNAME=db1_a_static.demo.org)    )
  (SID_DESC=
  (SID_NAME=db1)
  (SDU=32767)
  (ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1)
  (GLOBAL_DBNAME=db1_a_dgmgrl.demo.org)    ))
  针对主机“b”的 listener.ora 配置:
  LISTENER_DG =
  (DESCRIPTION=    (ADDRESS_LIST=      (ADDRESS=(PROTOCOL=tcp)(HOST=dbhost-b)(PORT=1522))    ))
  SID_LIST_LISTENER_DG=
  (SID_LIST=
  (SID_DESC=
  (SID_NAME=db1)
  (SDU=32767)
  (ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1)
  (GLOBAL_DBNAME=db1_b_static.demo.org)    )
  (SID_DESC=
  (SID_NAME=db1)
  (SDU=32767)
  (ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1)
  (GLOBAL_DBNAME=db1_b_dgmgrl.demo.org)    ))
配置命名方法
为每个数据库创建一个唯一的连接别名。用每个数据库的 db_unique_name 作为 Oracle Net 别名既简单又直观。  db1_a:用于连接到数据库“a”上的动态 Data Guard 服务的别名
  db1_b:用于连接到数据库“b”上的动态 Data Guard 服务的别名
  db1_a_static:用于连接到数据库“a”上的静态 Data Guard 服务的别名
  db1_b_static:用于连接到数据库“b”上的静态 Data Guard 服务的别名
  示例 tnsnames.ora 条目:
  db1_a=
  (description=
  (SDU=32767)
  (address_list=      (address=(protocol=tcp)(host=dbhost-a)(port=1522))    )
  (connect_data=
  (service_name=db1_a.demo.org)
  (server=dedicated)    ))
  db1_b=
  (description=
  (SDU=32767)
  (address_list=      (address=(protocol=tcp)(host=dbhost-b)(port=1522))    )
  (connect_data=
  (service_name=db1_b.demo.org)
  (server=dedicated)    ))
  db1_a_static=
  (description=
  (SDU=32767)
  (address_list=      (address=(protocol=tcp)(host=dbhost-a)(port=1522))    )
  (connect_data=
  (service_name=db1_a_static.demo.org)
  (server=dedicated)    ))
  db1_b_static=
  (description=
  (SDU=32767)
  (address_list=      (address=(protocol=tcp)(host=dbhost-b)(port=1522))    )
  (connect_data=
  (service_name=db1_b_static.demo.org)
  (server=dedicated)    ))
启动 Data Guard 监听器
  hosts.启动“a”和“b”主机上的 Data Guard 监听器。
lsnrctl start LISTENER_DG测试 Oracle Net 连接
  验证来自两个主机的配置。
  tnsping db1_a
  Attempting to contact (description= (SDU=32767) (address_list= (address=(protocol=tcp)(host=dbhost-a)(port=1522))) (connect_data= (service_name=db1_a.demo.org) (server=dedicated)))
  OK (0 msec)
  tnsping db1_b
  Attempting to contact (description= (SDU=32767) (address_list= (address=(protocol=tcp)(host=dbhost-b)(port=1522))) (connect_data= (service_name=db1_b.demo.org) (server=dedicated)))
  OK (0 msec)
准备主数据库
  为了使用快速启动故障切换,主数据库必须满足一系列前提条件。本部分描述将如何配置和验证每个前提条件。要查看主数据库是否已满足某个前提条件,请按照验证部分的说明进行操作。
  需要主数据库处于安装(未打开)状态的步骤集中在以下题为需要主数据库回弹的步骤的部分中。
将 Data Guard 监听器添加到 local_listeners 参数
  为了使数据库在 Data Guard 监听器中注册,必须将监听器端点添加到数据库的 local_listener 参数中。如果已经使用了 local_listener,则需将 Data Guard 监听器添加到列表中。设置完 local_listener 之后,将数据库注册到监听器并验证该服务已注册成功。
  注:您也可以在设置 local_listener 参数时使用 tnsnames.ora 文件中定义的 TNS 别名。 在向参数值可能超过 255 个字符限制的多个监听器注册时,该方法尤其有用。
设置
alter system set local_listener='(address=(host=dbhost-a)(port=1522)(protocol=tcp))';alter system register;验证
  show parameter local_listener
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  local_listener                     string      (address=(host=dbhost-a)(port=1522)(protocol=tcp))
  lsnrctl status listener_dg
  ...Services Summary...Service "DB1_A" has 1 instance(s).Instance "db1", status READY, has 1 handler(s) for this service...Service "DB1_A_XPT" has 1 instance(s).Instance "db1", status READY, has 1 handler(s) for this service...Service "db1XDB" has 1 instance(s).Instance "db1", status READY, has 1 handler(s) for this service...Service "db1_a_dgmgrl.demo.org" has 1 instance(s).Instance "db1", status UNKNOWN, has 1 handler(s) for this service...Service "db1_a_static.demo.org" has 1 instance(s).Instance "db1", status UNKNOWN, has 1 handler(s) for this service...The command completed successfully
启用强制日志记录
  所有 Data Guard 环境都应在数据库级别启用强制日志记录,以避免添加时产生无日志记录的表空间。
启用
alter database force logging;验证
select force_logging from v$database;FOR---YES创建 spfile

  Broker 将在启动和角色转换期间通过>创建
create spfile='?/dbs/spfile${ORACLE_SID}.ora' from pfile='?/dbs/init${ORACLE_SID}.ora';alter system set spfile='?/dbs/spfiledb1.ora';验证
  show parameter spfile;
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  spfile                               string      ?/dbs/spfiledb1.ora
创建口令文件
  所有 Data Guard 环境都需要使用口令文件以使数据库可以互相连接。
创建
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID验证
  select * from v$pwfile_users;
  USERNAME                     SYSDB SYSOP SYSAS
  ------------------------------ ----- ----- -----
  SYS                            TRUETRUEFALSE
启用远程登录
  Data Guard 配置中的数据库要进行互相连接,需要带有口令文件的远程登录。
启用
alter system set remote_login_passwordfile=exclusive scope=spfile;验证
  show parameter remote_login_passwordfile
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  remote_login_passwordfile            string      EXCLUSIVE
设置 db_unique_name
  Data Guard 配置中的每个数据库必须有唯一的名称。 本指南使用在 db_name 加一个下划线后接一个字母的命名惯例来创建 db_unique_name。
设置
  alter system set db_unique_name = db1_a scope=spfile;
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  db_unique_name                     string      db1_a
验证
  show parameter db_unique_name
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  db_unique_name                     string      db1_a
配置快速恢复区
  如果您还没有快速恢复区 (FRA),您将需要为闪回数据库创建一个。 如果您已经拥有一个 FRA,可能需要增加其大小以容纳闪回数据库文件。有关储存需求的信息,请参阅上面的闪回数据库部分。
配置
alter system set db_recovery_file_dest_size = 20g scope=both;  alter system set db_recovery_file_dest = '/u01/fra' scope=both;
验证
  show parameter db_recovery_file
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  db_recovery_file_dest                string      /u02/flash_recovery_areadb_recovery_file_dest_size         big integer 2G
启用自动备用文件管理
  非硬性要求,但建议如此。
启用
alter system set standby_file_management=auto;验证
  show parameter standby_file_management
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  standby_file_management            string      AUTO
设置 log_archive_config
  必须先设置该参数,然后才能在最高可用性模式下打开主数据库。其余 Data Guard 相关参数稍后将本指南中通过 Broker 进行设置。
设置
alter system set log_archive_config='DG_CONFIG=(db1_b)' scope=both;验证
  show parameter log_archive_config
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  log_archive_config                   string      DG_CONFIG=(db1_b)
创建备用重做日志
  为适应所有加载条件,Oracle 建议 SRL 组至少比相同大小的 ORL 组多一个。本指南假定主数据库和备用数据库上的所有 ORL 和 SRL 大小相同。
创建
  确定联机重做日志文件 (ORL) 的数量和大小
  select bytes, count(group#) from v$log group by bytes;
  BYTES COUNT(GROUP#)
  ---------- -------------
  52428800             3
  找到最大 group#
  select max(group#) from v$log;
  MAX(GROUP#)
  -----------
  3
  添加 SRL。与 ORL 不同,创建的 SRL 每组中仅有一个成员。无需像 ORL 中那样创建多个 SRL 来保护重做(主数据库中的 ORL 中已对重做进行保护)。多个 SRL 只会增加不必要的 IO 并将增加提交延时。对于具有多个 RAID 控制器的系统,考虑创建 SRL,以便在在控制器之间平衡分布其 IO。
  在本示例中,有 3 个最大 ORL,最大 group# 为 3。 我们将从 group# 11 开始递增,创建 4 个 SRL。从 11 开始是完全形式化的,这样使稍后添加的新 ORL 组可以保持其 group# 与现有 ORL 拥有相同的顺序。
alter database add standby logfile group 11 '/u02/oradata/db1/stby-t01-g11-m1.log'>验证
  select group#, type, member from v$logfile where type = 'STANDBY';
  GROUP# TYPE    MEMBER
  ---------- ------- ----------------------------------------
  11 STANDBY /u02/oradata/db1/stby-t01-g11-m1.log
  12 STANDBY /u02/oradata/db1/stby-t01-g12-m1.log
  13 STANDBY /u02/oradata/db1/stby-t01-g13-m1.log
  14 STANDBY /u02/oradata/db1/stby-t01-g14-m1.log
需要主数据库回弹的步骤
  以下步骤均要求数据库处于安装(未打开)状态。 可以在一个回弹中将它们全部同时完成。
启用存档日志模式
启用
alter database archivelog;验证
  select log_mode from v$database;
  LOG_MODE
  ------------
  ARCHIVELOG
启用闪回数据库
启用
alter database flashback on;alter system set db_flashback_retention_target = 60 scope=both;验证
  select flashback_on from v$database;
  FLASHBACK_ON
  ------------------
  YES
  show parameter db_flashback_retention_target
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  db_flashback_retention_target      integer   60
启用最高可用性模式
  如上文所述,最高可用性模式对于 Oracle 数据库 10g 是必选的,对于 Oracle 数据库 11g 则是可选的。
启用
alter database set standby database to maximize availability;验证
  select protection_mode from v$database;
  PROTECTION_MODE
  --------------------
  MAXIMUM AVAILABILITY
创建备用数据库
  如果您还没有备用数据库,使用您最喜欢的方法创建一个备用数据库。以下示例将利用 11g RMAN 活动数据库复制特性。通过该特性,RMAN 可以通过网络复制现有数据库而无需磁盘或磁带备份。以下部分假定备用主机已根据 Oracle 的建议进行设置,并且操作系统、帐户、安全性、资源限制、目录结构等配置正确。
将主数据库中的口令文件复制到备用数据库
  在 Oracle 数据库 11g 中,由于 Oracle 数据库 11g 中安全性的增强,备用数据库中的口令文件必须是主数据库中口令文件的物理副本。Oracle 数据库 10g 中允许使用不同的口令文件,只要主数据库和备用数据库中的 SYS 口令相同即可。
创建 oratab 条目
  向备用数据库的 oratab 文件添加一个条目
db1:/u01/app/oracle/product/11.1.0/db_1:Y创建 init.ora 文件
  对于 RMAN 复制活动数据库方法而言,init.ora 文件(本示例中为 initdb1.ora)仅需要一个参数:db_name(甚至不必是数据库的真实名称 — 可使用任意名称)。RMAN 将从主数据库复制 spfile,因此仅在复制的第一阶段需要该 init.ora 文件。
db_name = db1设置环境
  确保备用数据库上的操作系统环境已设置。使用 Oracle 提供的 oraenv 脚本。
以非安装方式启动备用数据库
startup nomount使用 RMAN 创建备用数据库
运行 RMAN 实用程序并连接到目标(主数据库)和辅助对象(新备用数据库)。
  rman target sys/password@db1_a_static auxiliary sys/password@db1_b_static
  connected to target database:
  DB1 (DBID=1234567890)
  connected to auxiliary database: X (not mounted)
将默认设备类型设置为磁盘
CONFIGURE DEFAULT DEVICE TYPE TO DISK;从活动主数据库复制数据库
  Oracle Data Guard 概念和管理文档(10g 第 2 版和 11g 第 1 版)的附录 F 中详细介绍了使用 RMAN 创建备用服务器的过程。本示例使用 11g 中的 FROM ACTIVE DATABASE 子句,该子句允许 RMAN 通过跨网络复制主数据库来创建备用数据库,而无需在磁盘或磁带上存储备份文件。RMAN 还复制 spfile 和口令文件,您可以更改各个参数的值。至少必须设置 db_unique_name。本示例假定备用数据库使用和主数据库相同的的目录结构。
  注:如果您刚启用了存档日志模式,则会强行创建一个存档日志 (alter system archive log current) 以确保至少存在一个存档日志。否则,DUPLICATE TARGET DATABASE 命令将失败,错误消息为“RMAN-20208: UNTIL CHANGE is before RESETLOGS change”。
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER SPFILE SET db_unique_name='db1_b' SET log_archive_config='' SET log_file_name_convert= ' ',' ' SET local_listener='(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dbhost-b)(PORT=1522)))' NOFILENAMECHECK; 在备用数据库启用闪回数据库
启用
alter database flashback on;alter system set db_flashback_retention_target = 60 scope=both;验证
  select flashback_on from v$database;
  FLASHBACK_ON
  ------------------
  YES
  show parameter db_flashback_retention_target
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  db_flashback_retention_target      integer   60
设置 Data Guard Broker 配置文件的位置
  Broker 将其配置信息存储在数据库外的一组文件镜像中。默认情况下,两个文件都存储在 $ORACLE_HOME/dbs 中。要保护这两个文件,比较好的做法是将它们存储在不同的文件系统中。
设置(主数据库和备用数据库)
alter system set dg_broker_config_file1='/u01/app/oracle/admin/db1/dgbroker/dg1db1.dat';alter system set dg_broker_config_file2='/u02/app/oracle/admin/db1/dgbroker/dg2db1.dat';验证
  show parameter dg_broker_config_file
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  dg_broker_config_file1               string /u01/app/oracle/admin/db1/dgbroker/dg1
  db1.datdg_broker_config_file2               string /u02/app/oracle/admin/db1/dgbroker/dg2db1.dat
启用 Data Guard Broker
启用(主数据库和备用数据库)
alter system set dg_broker_start=true;验证
  show parameter dg_broker_start
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  dg_broker_start                      boolean   TRUE
配置 Broker
在主数据库上启动 dgmgrl 实用程序并以 SYS 身份进行连接
dgmgrl sys/password@db1_a创建 Broker 配置
添加主数据库

  create configuration 'FSF' asprimary database is db1_aconnect>  Configuration "FSF" created with primary database "db1_a"
添加备用数据库

  add database db1_b asconnect>  Database "db1_b" added
验证配置
  show configuration
  Configuration Name:
  FSF Enabled: NO
  Protection Mode: MaxAvailability
  Databases: db1_a - Primary database   db1_b - Physical standby database
  Fast-Start Failover: DISABLED
  Current status for "FSF":DISABLED

[*]


页: [1]
查看完整版本: Oracle 白皮书-Oracle Data Guard 快速启动故障切换指南(2)