为 DB FILE NAME CONVERT 指定值

将文件添加到备用数据库时,DB_FILE_NAME_CONVERT 参数用于将主数据库上的数据文件名转换为备用数据库上的数据文件名。
该文件必须存在并且可写在物理备用数据库上;如果不是,则恢复过程会因错误而停止。

我们可以通过将此参数的值设置为两个字符串来指定主数据库数据文件的路径名和文件名位置,后跟备用位置。
第一个字符串是在主数据库的数据文件名中找到的模式。
第二个字符串是在物理备用数据库上的数据文件名中找到的模式。
我们可以根据需要使用任意多对主要和备用替换字符串。
我们可以使用单引号或者双引号括号是可选的引号。
括号是可选的。

DB_FILE_NAME_CONVERT =('/oracle1/dba/',
                       '/ora1/stby_dba/',
                       '/oracle2/dba/',
                       '/ora2/stby_dba/')

在上面的示例中,/oracle1/dba/ 和 /oracle2/dba/ 用于匹配来自主数据库的文件名。
/ora1/stby_dba/ 和 /ora2/stby_dba/ 是物理备库对应的字符串。
主数据库上名为 /oracle1/dba/system01.dbf 的文件将转换为备用数据库上的 /ora1/stby_dba/system01.dbf。
可以指定多个对,例如 ('a','b','1','2')。

注意:如果备用数据库使用 Oracle Managed Files (OMF),请不要设置 DB_FILE_NAME_CONVERT 参数。
此参数有 255 个字符的限制。

准备主数据库

准备主数据库的高级步骤如下:

  • 在数据库级别启用 FORCE LOGGING。
  • 如果需要,创建一个密码文件。
  • 创建备用重做日志。
  • 设置初始化参数 设置初始化参数。
  • 启用存档。

FORCE LOGGING 模式决定了 Oracle 数据库服务器是否记录数据库中的所有更改(临时表空间和临时段的更改除外)。

说明:
除非我们已配置 Oracle Advanced Security 和公钥基础设施 (PKI) 证书,否则 Data Guard 配置中的每个数据库都必须使用密码文件,并且每个系统上的 SYS 用户密码必须相同,才能成功传输重做数据。

备用重做日志用于存储从另一个 Oracle 数据库接收的重做。
本课提供了有关创建备用重做日志文件的其他信息。
在主数据库上,我们定义初始化参数来控制重做传输服务,同时数据库处于主角色。
当主数据库转换为备用角色时,我们还需要添加其他参数来控制重做数据和日志应用服务的接收。

Data Guard 代理需要使用服务器参数文件。
如果未启用归档,请发出 ALTER DATABASE ARCHIVELOG 命令以将主数据库置于 ARCHIVELOG 模式并启用自动归档。

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;

指定基于角色的目标

LOG_ARCHIVE_DEST_n 初始化参数的 VALID_FOR 属性使我们能够准确识别何时使用存档目标,以及它用于哪种类型的日志文件。
该属性使用关键字对来标识重做日志类型以及它们的数据库角色。
使用此属性可以设置参数以预测切换和故障切换操作。

我们为 VALID FOR VALID_FOR 属性提供两个值:redo_log_type 和 database_role。
redo_log_type 关键字是:

  • ONLINE_LOGFILE :此目标仅在归档联机重做日志文件时使用。
  • STANDBY_LOGFILE :此目标仅在归档备用重做日志文件或者从另一个数据库接收归档日志时使用。
  • ALL_LOGFILES :在归档联机或者备用重做日志文件时使用此目标。

database_role 关键字如下:

  • PRIMARY_ROLE :仅当数据库处于主数据库角色时才使用此目标。
  • STANDBY ROLE STANDBY_ROLE :仅当数据库处于备用(逻辑或者物理)角色时才使用此目标。
  • ALL_ROLES :当数据库处于主或者备用(逻辑或者物理)角色时使用此目标。

注意:因为关键字是唯一的,archival_source 和 database_role 值可以按任何顺序指定。
例如 VALID FOR= _ (PRIMARY ROLE _ ,ONLINE LOGFILE _ ) 在功能上相当于 VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE)。

创建 RMAN 脚本以创建物理备用数据库

创建包含 DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE 命令的 RMAN 脚本。

run {
    allocate channel prmy1 type disk;
    allocate channel prmy1 type disk;
    allocate channel prmy2 type disk;
    allocate channel prmy3 type disk;
    allocate channel prmy4 type disk;
    allocate auxiliary channel stby type disk;
    duplicate target database for standby 
        from active database

spfile
    parameter_value_convert 'boston','london'
    set db_unique_name='london'
    set db_file_name_convert='boston','london'
    set log_file_name_convert='boston','london'
    set log_archive_max_processes='10'
    set fal_server='boston'
    set log_archive_config='dg_config=(boston,london)'
    set log_archive_dest_2='service=boston ASYNC
    valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db unique name boston' db_unique_name=boston' nofilenamecheck;
}

使用 RMAN 创建备用数据库有很多优点。
它们包括:

  • RMAN 可以通过复制主数据库当前使用的文件来创建备用数据库。不需要备份。
  • RMAN 可以通过将主数据库的备份还原到备用站点来创建备用数据库。因此,在创建备用数据库的过程中,主数据库不受影响。
  • RMAN 自动重命名文件的 g g (),包括 Oracle Managed Files (OMF) 和目录结构。
  • RMAN 从备份中恢复归档重做日志文件并执行介质恢复,以便使备用数据库和主数据库同步。

注意:我们可以使用 CONFIGURE ... PARALLELISM integer 命令为指定的设备类型配置自动通道。

在 RMAN 脚本中,指定物理备用初始化参数的设置。
我们只需要指定与主数据库上的参数不同的参数。
如果使用 DB_FILE_NAME_CONVERT 和 LOG_FILE_NAME_CONVERT,则不必指定与不同的数据文件、控制文件和联机重做日志的目录路径相关的参数。

为物理备用数据库创建 Oracle 网络服务名称

使用 Oracle Net Manager 为物理备用数据库定义网络服务名称。
由 Oracle Net Manager 生成的 tnsnames.ora 文件中的以下条目。

LONDON =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS=(PROTOCOL=TCP)(HOST=host03.example.com)
      (PORT=1521)(SEND_BUF_SIZE=10485760)
      (RECV_BUF_SIZE=10485760))
    )
    (SDU=65535)
    (CONNECT_DATA=(SERVICE_NAME=london.example.com))
  )

注意:此条目用于在调用 RMAN 并执行 DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE 命令时连接到备用数据库。
它也用于 SERVICE 值的 LOG_ARCHIVE_DEST_2 参数中,以定义到备用数据库的重做传输。

启动物理备用数据库

将 ORACLE_SID 环境变量设置为物理备用数据库。
使用文本初始化参数文件以 NOMOUNT 方式启动物理备库实例。

SQL> startup nomount
pfil $HOME/db /i itl d file=$HOME/dbs/initlondon.ora
ORACLE instance started.
Total System Global Area           150667264 bytes
Fixed Size                         1298472 bytes
Variable Size                      92278744 bytes
Database Buffers                   50331648 bytes
Redo Buffers                       6758400 bytes

安装 ASM 后,每台机器上都会有多个软件主位置。
这将需要相应地更改 ORACLE_HOME 和 PATH 位置。
如果 /etc/oratab 文件中存在条目,Oracle 建议使用 oraenv 实用程序更改环境变量。
oraenv 实用程序将调整 ORACLE_SID、ORACLE_BASE、ORACLE_HOME、PATH 和 LD_LIBRARY_PATH 环境变量。
使用 LSNRCTL 实用程序启动侦听器时,ORACLE_HOME 变量应指向 Grid Infrastructure 软件目录。
但是,在启动数据库时,ORACLE_HOME 变量应该指向数据库软件目录。

注意:因为初始化参数文件只包含 DB_NAME 和 DB_DOMAIN 的条目,系统全局区域的内存大小将使用默认值。
稍后,DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE RMAN 命令将从主数据库配置复制初始化参数值以调整内存大小。

在不使用 RMAN 的情况下创建物理备用

如果数据库使用文件系统而不是自动存储管理器 (ASM) 进行存储,则可以在不使用 RMAN 的情况下创建物理备用数据库。
对于 ASM,必须使用 RMAN 来创建备份。

我们可以使用主数据库的任何备份副本来创建物理备用数据库,只要我们拥有完全恢复数据库所需的归档重做日志文件。
必须在主数据库上创建备用控制文件并将其传输到备用数据库。
需要从主数据库二进制服务器参数文件创建基于文本的参数文件。
该文件需要按照本类前面所示的相同方式进行调整。
然后需要将其传输到备用系统并转换为二进制服务器参数文件,然后再转换为二进制服务器参数文件。

脚步:

  1. 创建主数据库数据文件的备份副本。

  2. 为备用数据库创建一个控制文件。

SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/london01 ctl';
  1. 从主数据库使用的服务器参数文件创建一个参数文件,然后调整参数。
SQL> CREATE PFILE='/tmp/initlondon.ora' FROM SPFILE;
  1. 将完整的备份、备用控制文件和参数文件传输到备用系统。

  2. 创建服务器参数文件和启动实例。

  3. 恢复备份并启动重做应用。

实时启动重做应用

在备用数据库上,发出 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE SQL 命令以启动重做应用。
此语句会自动装入数据库。
此外,包括 DISCONNECT FROM SESSION 选项,以便重做应用在后台会话中运行。
不再需要语法的 FROM SESSION 部分,但可以接受。

在备库上执行以下命令,实时启动Redo Apply:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNET

直到日志切换之后才会将重做数据传输到远程备用位置。
在主数据库上发出以下命令以强制进行日志切换:

SQL> ALTER SYSTEM SWITCH LOGFILE;

要禁用实时重做应用:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING ARCHIVED LOGFILE DISCONNECT;

注意:对于 Oracle Database 12c 第 1 版,ALTER DATABASE RECOVER MANAGED STANDBY DATABASE 语句的语法选项 USING CURRENT LOGFILE 已被弃用。

实时应用(默认)

借助实时应用功能,日志应用服务实时应用备用重做日志文件中的重做数据(同时写入日志文件),而不是在日志切换时从归档重做日志文件中恢复重做发生。
如果由于某种原因应用服务无法跟上(例如,如果我们有一个物理备用服务器在一段时间内处于只读模式),则应用服务会根据需要自动转到存档的重做日志文件。
应用服务也试图赶上并尽快返回读取备用重做日志文件。

重做信息的实时应用提供了许多好处,包括更快的切换和故障转移操作、将物理备用数据库更改为只读数据库后的最新结果、只读数据库、从逻辑备用数据库和从逻辑备用数据库报告日期的能力,以及利用主数据库上更大的日志文件的能力,导致备用数据库上的备用重做日志更大。

实时应用更大的日志文件是可取的,因为应用服务在日志中停留的时间更长,并且切换的开销对实时应用处理的影响较小。
当日志应用服务以实时应用模式运行时,V$ARCHIVE_DEST_STATUS 视图的 RECOVERY_MODE 列包含值 MANAGED REAL TIME APPLY。

如果我们在目标上定义延迟(使用 DELAY 属性)并使用实时应用,则延迟将被忽略。
对于物理备用数据库,托管恢复进程 (MRP) 在远程文件服务器 (RFS) 进程完成写入后应用备用 g ( )p g 重做日志文件中的重做。

注意:从 Oracle Database 12c 开始,在重做应用期间默认启用实时应用。
我们可以通过停止重做应用进程来禁用实时应用,我们可以使用 USING ARCHIVED LOGFILE 子句重新启动它,如下所示:

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING ARCHIVED LOGFILE;

为物理备用数据库创建目录

在 $ORACLE_BASE/admin 和 $ORACLE_BASE/oradata 位置为物理备用数据库创建初始目录结构。
要创建的目录取决于主数据库是使用数据文件的文件位置还是自动存储管理器。
如果使用多租户架构,则需要另外的目录。
上面的示例适用于使用名为 DEV1 的单个可插入数据库的基于文件系统的多租户安装。
如果文件系统用于存储,则主服务器上的其他可插入数据库将需要创建其他目录。

[oracle@host03]$ mkdir -p
/u01/app/oracle/admin/london/adump
[oracle@host03]$ mkdir -p
/u01/app/oracle/oradata/london
[oracle@host03]$ mkdir -p
/u01/app/oracle/oradata/london/pdbseed
[oracle@host03]$ mkdir -p
/u01/app/oracle/oradata/london/dev1
[oracle@host03]$ mkdir -p
/u01/app/oracle/fast_recovery_area/london
on  It Road.com

为 STANDBY_FILE_MANAGEMENT 指定值

STANDBY_FILE_MANAGEMENT 用于在主数据库上添加或者删除数据文件时保持一致性。

bananaAL(默认):必须手动将数据文件添加到备用数据库。

– AUTO :数据文件自动添加到备用数据库。
备用数据库上不再允许某些 ALTER 语句。

STANDBY_FILE_MANAGEMENT 仅适用于物理备用数据库,但可以在主数据库上设置以进行角色更改。

STANDBY_FILE_MANAGEMENT = auto

当 STANDBY_FILE_MANAGEMENT 设置为 AUTO 时,不能在备库上执行以下命令:

  • 更改数据库重命名
  • 更改数据库添加/删除日志文件 [成员]
  • 更改数据库添加/删除备用日志文件成员
  • ALTER DATABASE CREATE DATAFILE AS ...

当我们将日志文件添加到主数据库并希望将其添加到物理备用数据库时(或者当我们从主数据库中删除日志文件并希望将其从物理数据库中删除时),我们必须执行以下操作:

  1. 在物理备用数据库上将 STANDBY_FILE_MANAGEMENT 设置为 bananaAL。

  2. 将重做日志文件添加到(或者从)主数据库中删除。

  3. 将它们添加到(或者从)备用数据库中删除。

  4. 之后在备用数据库上重置为 AUTO。

如何使用 SQL 和 RMAN 命令创建物理备用数据库

使用 SQL 和 RMAN 命令创建物理备用数据库时,请执行下面列出的步骤。
这些是高级步骤,稍后将在教程 中详细解释。

  • 准备主数据库。
  • 在物理备用数据库上设置参数。
  • 配置 Oracle 网络服务。
  • 启动备用数据库实例。
  • 执行 DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE RMAN 命令。
  • 启动重做的传输和应用。

为 LOG_FILE_NAME_CONVERT 指定值

LOG_FILE_NAME_CONVERT 参数用于将主数据库上的重做日志文件的名称转换为备用数据库上的重做日志文件的名称。
向主数据库添加重做日志文件需要向备用数据库添加相应的文件。
当备库更新时,该参数用于将主库的日志文件名转换为备库上的日志文件名。
如果备用数据库与主数据库在同一系统上或者在使用不同路径名的单独系统上,则需要此参数。

指定主数据库联机重做日志文件的位置,后跟备用位置。
括号的使用是可选的。

LOG_FILE_NAME_CONVERT = ('/oracle1/logs/',
                         '/ora1/stby_logs/')

DB_FILE_NAME_CONVERT 和 LOG_FILE_NAME_CONVERT 参数都执行简单的字符串替换。
例如, ('a','b') 将转换以下内容:
/disk1/primary/mya/a.dbf 进入
/disk1/primbry/myb/b.dbf

可以指定多个对,例如 ('a','b','1','2')。

注意:如果备用数据库使用 OMF,则不要设置 LOG_FILE_NAME_CONVERT 参数。
此参数有 255 个字符的限制。

设置 LOG_ARCHIVE_DEST_n

通过使用各种 LOG_ARCHIVE_DEST_n 属性,我们可以定义 Data Guard 配置的大部分设置。
重做传输服务由这些设置直接控制。
可以为每个 LOG_ARCHIVE_DEST_n 参数设置许多不同的属性。
大多数具有适用于大多数配置的默认值。
请参阅 Oracle Data Guard 概念和管理以获取完整列表和每个说明。

我们应该为本地归档目标指定一个 LOG_ARCHIVE_DEST_n 参数(其中 n 是 1 到 31 之间的整数),并为备用位置指定一个参数。
在以前版本的 Oracle 数据库中,当使用快速恢复区时,LOG_ARCHIVE_DEST_10 被设置为 USE_DB_RECOVERY_FILE_DEST。
从 Oracle Database 11g 第 2 版开始,我们必须手动设置位置以使用快速恢复区 查询我们必须手动设置位置以使用快速恢复区。
查询 V$ARCHIVE DEST V$ARCHIVE_DEST 视图以查看 LOG_ARCHIVE_DEST_n 初始化参数的当前设置。

所有定义的 LOG_ARCHIVE_DEST_n 参数必须至少包含 LOCATION 属性或者 SERVICE 属性。
此外,我们必须为每个定义的目标设置一个 LOG_ARCHIVE_DEST_STATE_n 参数。
LOG_ARCHIVE_DEST_STATE_n 默认为启用。

为每个定义的目的地包含一个 LOG_ARCHIVE_DEST_STATE_n 参数:

LOG_ARCHIVE_DEST_2=
'SERVICE=london
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=london'
LOG_ARCHIVE_DEST_STATE_2=ENABLE

定义重做传输模式

LOG_ARCHIVE_DEST_n 初始化参数的以下属性定义了主数据库用于将重做发送到备用数据库的重做传输模式。

  • SYNC :指定事务生成的重做数据必须在
    在事务可以提交之前具有此属性的目的地;否则,目的地被视为失败。在具有多个 SYNC 目标的配置中,必须按照此处针对每个 SYNC 目标的描述处理重做。
  • ASYNC(默认):指定事务生成的重做数据在事务可以提交之前不必在具有此属性的目的地接收到
  • AFFIRM :指定重做传输目的地确认收到的重做数据
    将其写入备用重做日志后
  • NOAFFIRM :指定重做传输目的地确认收到的重做数据
    在将其写入备用重做日志之前

如果 AFFIRM 和 NOAFFIRM 属性均未指定,则指定 SYNC 属性时默认为 AFFIRM,指定 ASYNC 属性时默认为 NOAFFIRM。

注意:不推荐指定 AFFIRM 属性而不使用 SYNC 属性,并且在未来版本中将不支持。

特别说明:Data Guard 对 Oracle Multitenant 的支持

Data Guard 包括对 Oracle Database 12c 第 1 版 (12.1) 中的多租户架构的支持。
Data Guard 在 CDB 级别进行管理。
单个 PDB 不能具有与 CDB 不同的数据库角色。
角色转换(例如切换和故障转移)在 CDB 级别执行。
作为 CDB 的主数据库可以同时具有物理和逻辑备用数据库。
我们不需要在主数据库和备用数据库上拥有相同的 PDB 集。
但是,只有在主数据库和备用数据库中存在于同一个容器中的表才会被复制。

概括:

  • 多租户容器数据库 (CDB) 可以具有物理备用数据库和/或者逻辑备用数据库。
  • 数据库角色仅在 CDB 级别定义。
  • 各个可插拔数据库 (PDB) 没有自己的角色。
  • 角色转换在 CDB 级别执行。
  • 角色变更相关的DDL在CDB的CDB容器(CDB$ROOT)的根容器(CDB$ROOT)中执行。
  • 从 XML 文件创建的 PDB 或者从不同 PDB 的克隆需要手动将其数据文件复制到备用主机。

查看备用重做日志信息

查看备用重做日志的信息:

SQL> SELECT group#, type, member FROM v$logfile
2 WHERE type = 'STANDBY';
GROUP# TYPE MEMBER
------ ------- ----------------------------------
4 STANDBY /u01/app/oracle/oradata/boston/stdbyredo01.log
5 STANDBY /u01/app/oracle/oradata/boston/stdbyredo02.log
6 STANDBY /u01/app/oracle/oradata/boston/stdbyredo03.log
7 STANDBY /u01/app/oracle/oradata/boston/stdbyredo04.log
SQL> SELECT group#, dbid, thread#, sequence#, status
2 FROM v$ y standby_log;
GROUP#         DBID    THREAD#     SEQUENCE# STATUS
---------- ---------- ---------- ---------- ---------
   4          2581955083   1         44        ACTIVE
   5          UNASSIGNED   1         0        UNASSIGNED
   6          UNASSIGNED   1         0        UNASSIGNED
   7          UNASSIGNED   0         0        UNASSIGNED

要验证是否创建了备用重做日志,请查询 V$STANDBY_LOG 或者 V$LOGFILE。
使用自动存储管理 (ASM) 的示例输出如下所示:

SQL> SELECT group#, type, member FROM v$logfile WHERE type = 'STANDBY‘;
GROUP#      TYPE     MEMBER
----------  -------  -----------------------------------------------
4           STANDBY  +SBDAT/london/onlinelog/group_4.266.711624939
5           STANDBY  +SBDAT/london/onlinelog/group_5.267.711624945
6           STANDBY  +SBDAT/london/onlinelog/group_6.268.711624951
7           STANDBY  +SBDAT/london/onlinelog/group_7.269.711624957
4           STANDBY  +SBFRA/london/onlinelog/group_4.259.711624941
5           STANDBY  +SBFRA/london/onlinelog/group_5.260.711624947
6           STANDBY  +SBFRA/london/onlinelog/group_6.261.711624955
7           STANDBY  +SBFRA/london/onlinelog/group_7.262.711624963
8 rows selected.

创建物理备用数据库

  1. 连接到主数据库实例(目标)和物理备用数据库实例(辅助)。

  2. 执行我们创建的脚本。
    该脚本可以使用 RMAN 实用程序在主数据库或者备用数据库上运行。

RMAN> connect target sys/oracle_4U@boston
RMAN> connect auxiliary sys/oracle_4U@london
RMAN> @cr_phys_standby

备用重做日志使用情况

如果备用重做日志可用且配置正确,RFS 进程会将从主数据库接收到的重做写入备用重做日志。
由于文件通常与主数据库的联机重做日志大小相同,因此它们应以与联机重做日志相似的频率填充和切换。
由于redo的网络传输延迟,可能会有一些延迟。
另外的备用重做日志组应该允许备用重做日志的日志切换而不会导致等待状态。
在备用重做日志的日志切换时,ARC0 进程将使用已完成的备用重做日志创建归档重做日志。

如果满足以下任一条件,RFS 进程将创建并直接写入归档重做日志文件而不是备用重做日志:

  • 没有备用重做日志。
  • 它找不到与传入的联机重做日志文件大小相同或者更大的备用重做日志。
  • 所有大小正确的备用重做日志尚未归档。

注意:在以前的版本中,参数 STANDBY_ARCHIVE_DEST 用于标识归档重做日志的位置,创建在备用数据库主机上创建的归档重做日志的位置,这些日志是在备用数据库主机上创建的,这些日志是从备用重做日志创建的.此参数现已弃用,因为会自动选择适当的位置。

指定 FAL_SERVER 的值

FAL_SERVER 参数用于指定提取归档日志 (FAL) 服务器(通常这是以主要角色运行的数据库)的 Oracle Net 服务名称。
当伦敦数据库以备用角色运行时,它使用波士顿数据库作为 FAL 服务器,如果波士顿无法自动发送丢失的日志文件,则从该服务器获取(请求)丢失的归档重做日志文件。
假设在备用数据库系统上正确配置了 Oracle Net 服务名称以指向所需的 FAL 服务器。

在波士顿主数据库上:

FAL_SERVER = london

在伦敦备用数据库上:

FAL_SERVER = boston

示例:在主数据库上设置初始化参数

主数据库:boston;
备用数据库:london

DB_NAME=boston
DB_UNIQUE_NAME=boston
LOG_ARCHIVE_CONFIG='DG_CONFIG=(boston,london)'
CONTROL_FILES='/u01/app/oracle/oradata/boston/control01.ctl', '/u01/app/oracle/oradata/boston/control02.ctl'
LOG_ARCHIVE_DEST_2='SERVICE=london VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=london'
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE LOGIN PASSWORDFILE EXCLUSIVE REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=arch_%t_%s_%r.log
FAL_SERVER=london
STANDBY_FILE_MANAGEMENT=auto
DB_FILE_NAME_CONVERT='boston','london'
LOG_FILE_NAME_CONVERT='boston','london'

在上面的示例中,假设主数据库名为 boston,备用数据库名为 london。
对于每个,定义了一个 Oracle 网络服务名称。

注意:转换参数也可用于更改 ASM 磁盘组。
例如:DB_FILE_NAME_CONVERT=('+DATA','+SBDAT')

使用 SQL 创建备用重做日志

在主数据库上创建备用重做日志以协助角色更改:

SQL> alter database add standby logfile
('/u01/app/oracle/oradata/boston/stdbyredo01.log')
size 50M;
Database altered.

或者

SQL> ALTER DATABASE ADD STANDBY LOGFILE
2 '+DATA' SIZE 52428800;
Database altered.

我们可以使用 ALTER DATABASE 语句的 ADD STANDBY LOGFILE 子句创建备用重做日志。
虽然备用重做日志仅在数据库以备用角色运行时使用,但我们应该在主主数据库上创建备用重做日志,以便切换角色不需要另外的 DBA 干预。

在使用 DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE RMAN 命令之前,我们应该在主数据库上创建备用重做日志文件,以便 RMAN 在备用数据库上自动创建备用重做日志文件。

使用以下准则创建备用重做日志文件组:

  • 每个备用重做日志文件必须至少与重做源数据库中最大的重做日志文件一样大。为便于管理,Oracle 建议重做源数据库和重做传输目标中的所有重做日志文件大小相同。
  • 备用重做日志必须至少比重做源数据库上的重做日志多一个重做日志组。

在主数据库上设置初始化参数以控制重做传输

在主数据库上,我们定义初始化参数来控制重做传输服务,同时数据库处于主角色。

Parameter NameDescription
LOG_ARCHIVE_CONFIGSpecifies the unique database name for each database in the configuration Enables or disables sending and receiving of redo
LOG_ARCHIVE_DEST_nControls redo transport services
LOG_ARCHIVE_DEST_STATE_nSpecifies the destination state
ARCHIVE_LAG_TARGETForces a log switch after the specified number of seconds
LOG_ARCHIVE_TRACEControls output generated by the archiver process

在主数据库上设置初始化参数

如果主备库的磁盘配置不同,则需要下表中列出的参数。
当主数据库转换为备用数据库时,这些参数也适用。

Parameter NameDescription
DB_FILE_NAME_CONVERTConverts primary database file names
LOG_FILE_NAME_CONVERTConverts primary database log file names
STANDBY_FILE_MANAGEMENTControls automatic standby file management
FAL_SERVERSpecifies the fetch archive log server for a standby database

特别说明:同系统备用数据库

如果在与主数据库相同的系统上有备用数据库,则必须遵循以下准则:

  • 必须重命名数据文件。实际文件名可以相同,但至少目录路径必须不同。这意味着我们必须使用 DB_FILE_NAME_CONVERT 和 LOG_FILE_NAME_CONVERT 参数。注意:如果备用数据库使用 Oracle Managed Files (OMF),请勿设置 DB_FILE_NAME_CONVERT 或者 LOG_FILE_NAME_CONVERT 参数。
  • 如果备用数据库与主数据库位于同一系统上,则备用数据库的归档目录必须使用与主数据库不同的目录结构。否则,备用数据库可能会覆盖主数据库文件。
  • 如果我们没有明确指定唯一的服务名称,并且如果主数据库和备用数据库位于同一系统上,则相同的默认全局名称(由 DB_NAME 和 DB_DOMAIN 参数中的数据库名称和域名组成)将对两者都有效数据库。
  • 如果备用数据库与主数据库在同一系统上,则不会。如果备用数据库与主数据库在同一系统上,则无法防止灾难。灾难被定义为主数据库系统完全丢失。如果备用数据库在同一个系统上,它也会丢失。此配置应仅用于测试和培训目的。

设置 LOG_ARCHIVE_CONFIG

指定 LOG_ARCHIVE_CONFIG 参数的 DG_CONFIG 属性以列出 Data Guard 配置中主数据库和备用数据库的 DB_UNIQUE_NAME。
默认情况下,LOG_ARCHIVE_CONFIG 参数使数据库能够发送和接收重做。
LOG_ARCHIVE_CONFIG 参数可用于禁用向远程目标发送重做日志或者禁用远程重做日志的接收。
LOG_ARCHIVE_CONFIG 参数的完整语法如下:

LOG_ARCHIVE_CONFIG = {
[ SEND | NOSEND ][ RECEIVE | NORECEIVE ]
[ DG_CONFIG=(remote_db_unique_name1
[, ... remote_db_unique_name9) | NODG_CONFIG ] }

例如:

LOG ARCHIVE CONFIG 'DG CONFIG =(boston,london)'

使用 V$DATAGUARD_CONFIG 视图查看使用 DB_UNIQUE_NAME 和 LOG_ARCHIVE_CONFIG 初始化参数定义的唯一数据库名称;因此,我们可以从配置中的任何数据库查看 Data Guard 环境。
视图的第一行列出了使用 DB_UNIQUE_NAME 初始化参数指定的当前数据库的唯一数据库名称。
其他行反映配置中其他数据库的唯一数据库名称,这些名称是使用 LOG_ARCHIVE_CONFIG 初始化参数的 DG CONFIG DG_CONFIG 关键字指定的配置中其他数据库的名称指定的。

下面的例子说明了 V$DATAGUARD_CONFIG 的使用:

SQL> show parameter log_archive_config
NAME                 TYPE     VALUE
-------------------  -------  --------------------------
log_archive_config   string   dg_config=(boston,london)
SQL> SELECT * FROM v$dataguard_config;
DB_UNIQUE_NAME
-----------------------------
boston
london

强制记录模式

  • 推荐使用 FORCE LOGGING 模式,保证数据的一致性。
  • 即使在执行 NOLOGGING 操作时,FORCE LOGGING 也会强制生成重做。
  • 不记录临时表空间和临时段。
  • FORCE LOGGING 推荐用于物理和逻辑备用数据库。
  • 在主数据库上发出以下命令:
SQL> ALTER DATABASE FORCE LOGGING;

FORCE LOGGING 模式决定了 Oracle 数据库服务器是否记录数据库中的所有更改(临时表空间和临时段的更改除外)。
ALTER DATABASE 命令的 [NO]FORCE LOGGING 子句包含以下设置:

  • FORCE LOGGING :此设置优先于(并且独立于)我们为单个表空间指定的任何 NOLOGGING 或者 FORCE LOGGING 设置以及我们为单个数据库对象指定的任何 NOLOGGING 设置。所有正在进行的、未记录的操作必须在强制记录开始之前完成。
  • NOFORCE LOGGING :将数据库置于 NOFORCE LOGGING 模式。这是默认设置。

在主数据库上发出以下命令:

SQL> ALTER DATABASE FORCE LOGGING;

如果数据库处于 FORCE LOGGING 模式,则 V$DATABASE 中的 FORCE_LOGGING 列包含值 YES。
尽管在数据库处于 OPEN 状态时可以将数据库置于 FORCE LOGGING 模式,但直到当前以 NOLOGGING 模式运行的所有操作完成后,该模式才会更改。
因此,建议我们在数据库处于 MOUNT 状态时启用 FORCE LOGGING 模式。

注意:我们应该在执行备份操作以创建备用数据库之前启用 FORCE LOGGING,然后只要 Data Guard 配置存在就保持 FORCE LOGGING 模式。

配置备用重做日志

仅当数据库处于备用角色时才使用备用重做日志来存储从主数据库接收的重做数据。
备用重做日志形成一个单独的日志文件组池。
强烈建议为 Data Guard 配置中的所有数据库配置备用重做日志文件,以帮助角色反转。

我们应该创建的备用重做日志组至少比主数据库中的联机重做日志组多。
此外,每个备用重做日志文件必须至少与重做源数据库的重做日志中最大的重做日志文件一样大。

需要一个备用重做日志来实现:

  • 同步传输方式
  • 实时申请
  • 级联重做日志目标

注意:通过在主数据库上配置备用重做日志,当我们执行 DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE RMAN 命令时,备用重做日志会自动在备用数据库上创建。
如果远程同步服务器已存在于主机上,它们也会在远程同步服务器上自动创建。
远程同步将在类后面讨论。

防止主库数据损坏影响备库

在将重做数据应用于备用数据库之前,Data Guard 使用 Oracle 进程来验证重做数据。
损坏检测检查发生在以下关键接口:

  • 在 LGWR、LNS 和 ARCn 进程重做传输期间在主数据库上
  • 在 RFS、ARCn、MRP 和 DBWn 进程重做应用期间在备用数据库上

如果备用数据库上的重做应用检测到重做损坏,Data Guard 将重新获取有效日志作为归档日志间隙处理的一部分。

当 I/O 子系统确认写入完成但写入未在持久存储中发生时,就会发生写入丢失。
在随后的块读取中,I/O 子系统返回数据块的陈旧版本,该版本用于更新数据库的其他块,从而损坏数据库。

在主数据库和备用数据库上设置 DB_LOST_WRITE_PROTECT 初始化参数,使数据库服务器能够在重做日志中记录缓冲区缓存块读取,以便可以检测丢失的写入。

我们可以按如下方式设置 DB_LOST_WRITE_PROTECT:

  • 主数据库上的典型:实例在重做日志中记录读/写表空间的缓冲区缓存读取。
  • FULL 在主数据库上:在主数据库上:实例日志读取读取 实例日志读取只读表空间作为仅表空间以及读/写表空间。
  • 介质恢复期间备用数据库或者主数据库上的 TYPICAL 或者 FULL :实例执行丢失写入检测。
  • NONE 在主数据库或者备用数据库上(默认):未启用丢失写入检测功能。

当备用数据库在托管恢复期间应用重做时,它会读取相应的块并将系统更改号 (SCN) 与重做日志中的 SCN 进行比较,然后再执行以下操作:

  • 如果主数据库上的块 SCN 低于备用数据库上的 SCN,它会检测到主数据库上的写入丢失并返回外部错误 (ORA-752)。
  • 如果 SCN 更高,它会检测到备用数据库上的写入丢失并返回内部错误 (ORA-600 3020)。

在这两种情况下,备用数据库都会在警报日志和跟踪文件中写入失败的原因。
修复主数据库丢失写入的推荐过程是故障转移到物理备用数据库并重新创建主数据库。
要修复备用数据库上丢失的写入,我们必须重新创建备用数据库或者受影响的文件。

为备用数据库创建侦听器条目

使用 Oracle Net Manager 配置新的侦听器(如有必要)或者使用物理备用数据库的条目更新 listener.ora 文件。
Oracle Net Manager 生成的 listener.ora 文件中的条目如下所示。

SID_LIST_LISTENER =
  (SID LIST = (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = london.example.com)
      (ORACLE_HOME = /u01/app/oracle/product/12.1.0/dbhome_1)
      (SID_NAME = london)
    )
  )

注意:此条目是必需的,因为在使用 RMAN 创建备用数据库期间,实例已关闭并重新启动。

VALID_FOR 的组合

CombinationPrimaryPhysicalLogical
ONLINE_LOGFILE, PRIMARY_ROLEValidIgnoredIgnored
ONLINE_LOGFILE, STANDBY_ROLEIgnoredIgnoredValid
ONLINE_LOGFILE, ALL_ROLESValidIgnoredValid
STANDBY_LOGFILE,STANDBY_ROLEIgnoredValidValid
STANDBY_LOGFILE, ALL_ROLESIgnoredValidValid
ALL_LOGFILES, PRIMARY_ROLEValidIgnoredIgnored
ALL_LOGFILES, STANDBY_ROLEIgnoredValidValid
ALL_LOGFILES, ALL_ROLESValidValidValid

在上表中,Valid 表示归档日志目标用于由列标题定义的角色的数据库中。
忽略意味着归档日志目标不合适,并且忽略此类型的目标。
被忽略的目的地不会产生错误。

只有一种无效组合:STANDBY_LOGFILE、PRIMARY_ROLE。
指定此组合会导致所有数据库角色出错。
如果已设置,则在启动时会收到以下错误:

ORA-16026: The parameter LOG_ARCHIVE_DEST_n contains an invalid attribute value

注意:关键字的单数和复数形式都有效。
例如,我们可以指定 PRIMARY_ROLE 或者 PRIMARY_ROLES,以及 ONLINE_LOGFILE 或者 ONLINE_LOGFILES。

为物理备库创建初始化参数文件

创建仅包含 DB_NAME 和 DB_DOMAIN 初始化参数的文本初始化参数文件。

文件:$ORACLE_HOME/dbs/initlondon.ora

DB_NAME=london
DB_DOMAIN=example.com

此初始化参数文件用于在执行 DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE RMAN 命令之前以 NOMOUNT 模式启动物理备用数据库。
执行此命令时,RMAN 会为备用数据库创建服务器参数文件。

将主数据库密码文件复制到物理备用数据库主机

我们可以通过将主数据库密码文件复制到物理备用数据库主机并重命名它来为物理备用数据库创建密码文件。

  • 将主数据库密码文件复制到备用数据库主机上的 $ORACLE_HOME/dbs 目录。
  • 将文件重命名为我们的备用数据库:orapw。

注意:可以使用 orapwd 实用程序创建密码文件,但是可以使用 orapwd 实用程序创建密码文件,但是 Data Guard 应始终避免使用该技术。
本课中使用了 Recovery Manager DUPLICATE DATABASE 命令,RMAN 将自动从主数据库复制密码文件并替换创建的密码文件。

日期:2020-09-17 00:11:21 来源:oir作者:oir