从应用程序启动快速启动故障转移

应用程序可以通过调用 DBMS_DG.INITIATE_FS_FAILOVER 函数来启动快速启动故障转移。
该函数用于提醒主数据库服务器应用程序希望立即进行快速启动故障转移。
主数据库服务器将此请求通知给观察者,观察者立即启动快速启动故障转移。
备用数据库必须处于有效的快速启动故障转移状态——观察和同步或者在主数据库的滞后限制内——才能接受故障转移。

使用 FORCE 选项

在以下情况下使用 FORCE 选项:

  • 我们希望在环境同步且主数据库与观察者和目标备用数据库失去连接时禁用快速启动故障转移。 FORCE 选项使我们能够禁用快速启动故障转移,而无需与目标备用数据库或者观察者连接。
  • 我们希望防止在目标备用数据库上发生快速启动故障转移,因为我们知道主数据库将在快速启动故障转移阈值到期之前恢复服务
  • 当快速启动故障转移环境未同步时,我们希望手动故障转移到目标备用数据库或者旁观者备用数据库。在这种情况下,我们必须愿意接受数据丢失故障转移。

查看快速启动故障转移信息

SQL> SELECT fs_failover_status as STATUS,
       fs_failover_current_target as CURR_TGET,
       fs_failover_threshold as THRESHOLD,
       fs_failover_observer_present as OBS_PRES,
       fs_failover_observer_host as OBS_HOST
FROM v$database;
STATUS                 CURR_TGET THRESHOLD OBS_PRES   OBS_HOST
---------------------- --------- --------- --------   ----------------------
TARGET UNDER LAG LIMIT london           30 YES        Host04.example.com

V$DATABASE 包含以下列提供有关快速启动故障转移的详细信息。
它们包括:

  • FS 故障转移状态:
  • BYSTANDER:启用了快速启动故障转移,但此备用数据库不是快速启动故障转移的目标。
  • DISABLED:禁用快速启动故障转移。
  • LOADING DICTIONARY:此状态仅出现在尚未完成加载主数据库数据字典副本的逻辑备用数据库上。
  • PRIMARY UNOBSERVED:此状态仅在目标备用数据库与主数据库同步或者处于 TARGET UNDER LAG LIMIT 并与观察者连接时才会出现在目标备用数据库上,但主数据库没有与观察者的连接。
  • REINSTATE FAILED:将失败的主数据库恢复为新的备用数据库失败。有关其他信息,请参阅 Data Guard 代理 drc* 日志文件。
  • BYSTANDER:启用了快速启动故障转移,但此备用数据库不是快速启动故障转移的目标。
  • DISABLED:禁用快速启动故障转移。
  • LOADING DICTIONARY:此状态仅出现在尚未完成加载主数据库数据字典副本的逻辑备用数据库上。
  • PRIMARY UNOBSERVED:此状态仅在目标备用数据库与主数据库同步或者处于 TARGET UNDER LAG LIMIT 并与观察者连接时才会出现在目标备用数据库上,但主数据库没有与观察者的连接。
  • REINSTATE FAILED:将失败的主数据库恢复为新的备用数据库失败。有关其他信息,请参阅 Data Guard 代理 drc* 日志文件。
  • REINSTATE REQUIRED:失败的主数据库需要作为新的备用数据库恢复到新的主数据库。观察者自动启动恢复过程。
  • STALLED:如果重做生成由于主数据库无法继续而不违反数据丢失保证而停止,则该状态出现在主数据库上。
  • SUSPENDED:当主数据库或者目标备用数据库以受控方式关闭时,此状态出现在目标备用数据库上。
  • SYNCHRONIZED:主数据库和快速启动故障转移目标备用数据库同步,配置在最大可用性模式下运行。
  • TARGET OVER LAG LIMIT:(仅适用于最大性能模式)备用数据库重做应用点落后于主数据库重做生成点超过 FastStartFailoverLagLimit 配置属性指定的秒数。
  • TARGET UNDER LAG LIMIT:(仅适用于最大性能模式)备用数据库重做应用点不会滞后主数据库重做生成点超过 FastStartFailoverLagLimit 配置属性指定的秒数。
  • UNSYNCHRONIZED:目标备用数据库没有来自主数据库的所有重做,并且配置在最大可用性模式下运行。快速启动故障转移是不可能的。
  • FS_FAILOVER_CURRENT_TARGET :备用数据库的 DB_UNIQUE_NAME,它是 Data Guard 配置的当前快速启动故障转移目标备用数据库
  • FS_FAILOVER_THRESHOLD :观察者尝试的时间(以秒为单位)在尝试使用目标备用数据库进行快速启动故障转移之前观察者尝试与断开连接的主数据库重新连接的时间(以秒为单位)
  • FS_FAILOVER_OBSERVER_PRESENT :
  • YES:Observer 连接到本地数据库。
  • NO:Observer 未连接到本地数据库。
  • FS_FAILOVER_OBSERVER_HOST :托管观察者进程的机器名称

注意:如果 FS_FAILOVER_STATUS 的值为 DISABLED,则该表中 FS_FAILOVER_CURRENT_TARGET、FS_FAILOVER_THRESHOLD、FS_FAILOVER_OBSERVER_PRESENT 和 FS_FAILOVER_OBSERVER_HOST 列的值没有意义。

禁用快速启动故障转移条件

使用 DISABLE FAST_START FAILOVER CONDITION 命令禁用指定条件下的快速启动故障转移。
例如:

DGMGRL> DISABLE FAST_START FAILOVER CONDITION "Datafile Offline";

确定快速启动故障转移的原因

我们可以查询主数据库上的 V$FS_FAILOVER_STATS 视图以了解发生快速启动故障转移操作的原因。
该视图显示上次快速启动故障转移的时间和操作原因。

SQL> SELECT last_failover_time, last_failover_reason 
   FROM v$fs failover stats; FROM v$fs_failover_stats;
LAST_FAILOVER_TIME    LAST_FAILOVER_REASON
--------------------  -----------------------------
10/17/2013 22:30:12   Primary Disconnected

安装观察者软件

要使用快速启动故障转移,我们应该在独立于主数据库和备用数据库系统的计算机系统上安装 DGMGRL 程序(其中包含观察者软件)。

要在观察者计算机上安装 DGMGRL,请使用以下方法之一:

  • 通过在 Oracle Universal Installer 中选择 Administrator 选项来安装完整的 Oracle Client Administrator。此安装包括 DGMGRL,但不包括 Oracle Enterprise Manager 代理。这种类型的安装使我们能够使用 DGMGRL 命令而不是 Oracle Enterprise Manager 来管理观察者。
  • 安装完整的 Oracle 数据库软件套件。此安装包括 DGMGRL。

注意:要从 Oracle Enterprise Manager Cloud Control 管理观察者,除了 DGMGRL 之外,还需要在观察者机器上安装 Enterprise Manager Cloud Control 代理

观察者主机应位于客户端网络或者包含最多客户端活动或者最高优先级活动的位置。
这种方法可能会引入错误的故障转移,即即使主节点正在运行并且可以在本地访问,也会发生快速启动的故障转移;但是,如果客户端无法访问主节点,则它也可能已关闭,如果客户端无法访问主节点,则它也可能已关闭。

步骤 6:启用快速启动故障转移

我们可以使用 DGMGRL 启用快速启动故障转移。
当我们发出 ENABLE FAST_START FAILOVER 命令时,观察者能够观察主数据库和备用数据库,并在必要时启动快速启动故障转移。
除了启用快速启动故障转移之外,我们还必须启动观察者。

DGMGRL> ENABLE FAST_START FAILOVER;

执行手动角色更改

如果角色更改定向到快速启动故障转移目标备用数据库并且配置已同步,则我们可以在快速启动故障转移配置中执行手动角色更改。

必须满足以下条件:

  • 如果配置在最大可用性模式下运行,则目标备用数据库必须与主数据库同步。
  • 如果配置在最大性能模式下运行,则目标备用数据库必须在主数据库的指定延迟限制内。
  • 对于手动故障转移,观察者必须启动并且必须与目标备用数据库进行通信。

配置快速启动故障转移条件

下表显示了快速启动故障转移的其他数据库运行状况:

Health ConditionDefault ValueDescription
Datafile OfflineENABLEDData file offline due to a write error
Corrupted ControlfileENABLEDCorrupted control file
Corrupted DictionaryENABLEDDictionary corruption of a critical database object
Inaccessible LogfileDISABLEDLGWR unable to write to any member of a log group due to an I/O error
Stuck ArchiverDISABLEDArchiver unable to archive a redo log because the device is full or unavailable

默认情况下启用条件数据文件脱机、损坏的控制文件和损坏的字典。
如果无法识别我们指定的值,则会返回错误。
如果条件已经设置,则不会显示错误。

示例:为快速启动故障转移启用数据库运行状况:

DGMGRL> enable fast_start failover condition "Inaccessible Logfile"
DGMGRL> show fast_start failover
…
Configurable Failover Conditions
   Health Conditions:
     Corrupted Controlfile  YES
     Corrupted Dictionary   YES
     Inaccessible Logfile   YES
     Stuck Archiver         NO
     Datafile Offline      YES

设置观察者重连频率

ObserverReconnect 配置属性指定观察者建立到主数据库的新连接的频率。
当此属性设置为默认值 0 时,它会阻止观察者定期与主数据库建立新连接。
虽然这消除了与定期建立到主数据库的新观察器连接相关的处理开销,但它也可以防止观察器检测到无法创建到主数据库的新连接。
Oracle 建议将此属性设置为一个值,该值足够小以允许及时检测主数据库中的故障,但足够大以将与定期观察器连接相关的开销限制在可接受的水平。

DGMGRL> EDIT CONFIGURATION SET PROPERTY ObserverReconnect = 15;

步骤 1:指定目标备用数据库

我们不需要在只有一个备用数据库的配置中设置 FastStartFailoverTarget 属性:当启用快速启动故障转移时,Data Guard 代理会自动为主数据库和备用数据库适当地设置它。

DGMGRL> EDIT DATABASE boston SET PROPERTY FastStartFailoverTarget = london;

在具有多个备用数据库的 Data Guard 配置中,我们必须在当前主数据库上设置 FastStartFailoverTarget 数据库属性,然后才能启用快速启动故障转移。
当启用快速启动故障转移时,代理将自动在备用数据库上相互设置 FastStartFailoverTarget 数据库属性。
在连接到主数据库或者连接到主数据库连接的配置中的任何备用数据库时执行该命令。
命令语法为:

EDIT DATABASE [primary-database-name] SET PROPERTY FastStartFailoverTarget = [standby-database-name];

要将 FastStartFailoverTarget 属性更改为指向不同的备用数据库,请禁用快速启动故障转移,设置 FastStartFailoverTarget 属性,然后重新启用快速启动故障转移。

配置主库自动关闭

如果我们不希望旧的主数据库在由于主重做生成停止并且主数据库失去与观察者和目标备用数据库的连接超过指定的秒数而触发快速启动故障转移后自动关闭通过 FastStartFailoverThreshold 配置属性,将 FastStartFailoverPmyShutdown 属性设置为 FALSE。
当该属性设置为 FALSE 时,旧的主数据库停止等待导致快速启动故障转移的条件的诊断。

DGMGRL> edit configuration set property FastStartFailoverPmyShutdown = false;
Property "faststartfailoverpmyshutdown" updated

TRUE 值会导致主数据库在 FastStartFailoverThreshold 属性中指定的秒数过去后使用 ABORT 选项关闭,并且主数据库与其快速启动故障转移伙伴没有联系。
TRUE 是默认值。

注意:如果检测到用户可配置的快速启动故障转移条件,或者应用程序通过调用 DBMS_DG.INITIATE_FS_FAILOVER 函数启动快速启动故障转移,则主数据库始终关闭,即使 FastStartFailoverPmyShutdown 设置为 FALSE。

步骤 3:设置快速启动故障转移阈值

快速启动故障转移阈值指定在启动快速启动故障转移之前,观察者和目标备用数据库应同时等待多长时间以接收来自主数据库的消息。
阈值指定为正的非零秒数。
FastStartFailoverThreshold 属性的默认值为 30 秒。
为该属性选择一个值时,我们必须平衡增加的不必要故障转移风险(例如,如果网络连接暂时中断几秒钟)与更快故障转移和在严重中断期间减少停机时间的好处。

FastStartFailoverThreshold 属性的推荐设置:

  • 单实例主、低延迟可靠网络 = 10-15 秒
  • WAN 上的单实例主、高延迟网络 = 30–45 秒
  • RAC 主要 =(CSS 未命中计数 + 重新配置时间)+(24–40 秒)

当连接到主数据库或者连接到主数据库的 Data Guard 代理配置中的任何备用数据库时,执行 EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold=threshold-val 命令。

DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 15;

注意:无论是启用还是禁用快速启动故障转移,我们都可以修改此属性。

配置快速启动故障转移

  • 指定目标备用数据库。
  • 设置保护模式。
  • 设置 FastStartFailoverThreshold 属性。
  • 设置添加数据库属性 设置添加数据库属性。
  • 设置另外的快速启动故障转移条件。
  • 启用快速启动故障转移。
  • 启动观察者。
  • 验证配置

下面几节详细介绍了配置快速启动故障转移的手动步骤。
使用 Enterprise Manager Cloud Control 配置快速启动故障转移将在后面的文章中介绍。

设置滞后时间限制

在旧版本的 Oracle 数据库中,快速启动故障转移只能与使用 SYNC AFFIRM 重做传输设置的最大可用性配置一起使用。
当 Data Guard 在最高性能模式下运行时,重做传输通过与备用站点的 ASYNC 通信完成。
允许主数据库向前推进事务,即使这些事务尚未被接收或者写入备用主机上的备用重做日志。
因此,备用数据库可能会丢失已在主数据库上执行的事务。
在这样的时刻故障转移到备用数据库会导致数据丢失。
可以通过指定可接受的数据丢失量来控制快速启动故障转移自动故障转移到备用数据库和经历数据丢失的能力。

使用 FastStartFailoverLagLimit 属性指定可接受的延迟时间限制(以秒为单位)。
如果备用数据库的应用重做点在主数据库重做生成点的指定秒数内,则允许快速启动故障转移。
如果备用数据库的应用点滞后于此限制,则不允许快速启动故障转移。
对于 SYNC 目的地,延迟限制被忽略。
这仅适用于在最大性能模式下启用快速启动故障转移时的配置。

必须在目标备用数据库上启用实时应用,以确保延迟时间的有效计算。
按如下方式配置 FastStartFailoverLagLimit 属性:

EDIT CONFIGURATION 
SET PROPERTY FastStartFailoverLagLimit = {n};

n 的最小值为 10.
默认值为 30。
我们可以手动故障转移到最高性能的快速启动故障转移目标。
最大性能故障转移目标必须在主数据库的指定延迟限制内,才能允许故障转移。
如果故障转移目标超过主数据库指定的滞后限制,则会返回错误,因为备用数据库滞后于主数据库超过指定的滞后限制。

欢迎来到之路教程(on itroad-com)

步骤 5:配置其他快速启动故障转移条件

使用 ENABLE/DISABLE FAST_START FAILOVER 代理命令指定应该发生快速启动故障转移的条件。

ENABLE FAST_START FAILOVER CONDITION "Stuck Archiver";

Oracle 数据库服务器检测指定条件何时发生并通知观察者。
观察者在不等待 FastStartFailoverThreshold 到期的情况下启动快速启动故障转移(如果备用数据库处于有效的快速启动故障转移状态以接受故障转移)。

使用 SHOW FAST_START FAILOVER 命令获取有效条件列表并确认更改。
它们包括以下内容:

Configurable Failover Conditions
 Health Conditions:
   Corrupted Controlfile YES
   Corrupted Dictionary YES
   Inaccessible Logfile NO
   Stuck Archiver NO
   Datafile Offline YES
 Oracle Error Conditions
 (none)

对于指定的 Oracle ORA-Error 条件,如果有错误信号,主数据库将通知观察者,并且观察者将立即启动快速启动故障转移,假设备用数据库处于有效的快速启动故障转移状态(已观察到并且同步或者在滞后限制内)接受故障转移。
例如,如果我们遇到大量块损坏 (ORA-1578),我们可以指定以下语法:

ENABLE FAST_START FAILOVER CONDITON '1578'

当遇到 ORA-1578 时,将发生快速启动故障转移。
这不适用于 ORA-7445 或者 ORA-600 错误。

手动恢复数据库

使用 REINSTATE DATABASE 命令恢复数据库。

DGMGRL> REINSTATE DATABASE boston;

如果不满足恢复条件,则请求失败,指定数据库保持禁用状态 如果指定的数据库名称为原主库,并且开启了快速启动故障转移,则将原主库作为备库恢复到新主库数据库。
更新快速启动故障转移配置以反映新备用数据库的可用性。
它接受来自新主数据库的归档重做日志文件,并在新主数据库出现故障时作为快速启动故障转移目标。

在连接到主数据库或者连接到与要恢复的原始主数据库以外的主数据库连接的配置中的备用数据库时发出此命令。

说明:REINSTATE DATABASE 命令不需要启用快速启动故障转移。
它还可用于在常规无数据丢失故障转移后恢复原始主数据库

禁用快速启动故障转移

我们可以禁用快速启动故障转移以防止观察者启动到目标备用数据库的故障转移。
当我们执行 DISABLE FAST_START FAILOVER 命令时,Data Guard 代理在目标备用数据库上禁用快速启动故障转移,然后在主数据库上禁用快速启动故障转移。
Data Guard 代理将此更改永久记录在 Data Guard 代理元数据中,并将更改传播到 Data Guard 代理配置中的所有备用数据库。

DGMGRL> DISABLE FAST_START FAILOVER [FORCE];

如果主数据库和快速启动故障转移目标备用数据库没有相互连接,我们可以使用 FORCE 选项禁用快速启动故障转移。
如果在主数据库或者与主数据库连接的旁观者(非快速启动故障转移目标)备用数据库上执行此命令,Data Guard 代理会在本地禁用快速启动故障转移。
然后,Data Guard 代理将此更改永久记录在 Data Guard 代理元数据中,并将更改传播到主数据库连接到的 Data Guard 代理配置中的所有数据库。

如果在快速启动故障转移目标备用数据库上执行带有 FORCE 选项的 DISABLE FAST_START FAILOVER 命令时备用数据库没有与主数据库连接,则仅在该目标备用数据库上禁用快速启动故障转移。
如果目标备用数据库重新连接到主数据库,主数据库将禁用快速启动故障转移(如前所述)。

如果在旁观者备用数据库上执行带有 FORCE 选项的 DISABLE FAST_START FAILOVER 命令时备用数据库没有与主数据库连接,主数据库将忽略它。
当与主数据库的连接恢复时,会自动在旁观者备用数据库上重新启用快速启动故障转移。
我们必须在主数据库或者具有连接命令的旁观者备用数据库上发出 DISABLE FAST_START FAILOVER 命令本身),如果我们想永久禁用快速启动故障转移。

注意:禁用快速启动故障转移不会停止观察者。

步骤 4:(可选)设置其他快速启动故障转移属性

我们可以设置其他属性来控制快速启动故障转移操作。
如果未明确指定,可选的故障转移属性将使用默认值。
默认值如下:

PropertyDefault Value
FastStartFailoverLagLimit30 seconds
FastStartFailoverPmyShutdownTrue
FastStartFailoverAutoReinstateTrue
ObserverConnectIdentifierDGConnectIdentifier value
ObserverOverrideFalse
ObserverReconnect0 (zero)

启用快速启动故障转移后的禁止操作

启用快速启动故障转移后,我们不能进行以下任何操作(破坏快速启动故障转移环境):

  • 更改配置保护模式。
  • 更改主数据库或者目标备用数据库的 LogXptMode 属性。
  • 更改主数据库、远程同步数据库或者目标备用数据库上的 RedoRoutes 属性。
  • 执行故障转移或者切换到不是快速启动故障转移目标的备用数据库。
  • 禁用 Data Guard 代理配置。
  • 删除 Data Guard 代理配置。
  • 禁用或者删除作为快速启动故障转移目标的备用数据库。
  • 如果远程同步实例将重做传送到快速启动故障转移的目标,则禁用或者删除远程同步实例。
  • 更改主数据库或者备用数据库的 FastStartFailoverTarget 数据库级属性。
  • 故障转移到不同步的快速启动故障转移目标。

快速启动故障转移后自动恢复

恢复原始主数据库对于在快速启动故障转移后重新建立高可用性至关重要。
原主库恢复为备库后,可以作为新主库的快速启动故障切换目标备库。
除非重新配置快速启动故障切换环境,否则无法执行后续的快速启动故障切换,直到原始数据库主数据库被恢复。

当满足以下所有条件时,将触发原始主数据库的自动恢复:

  • FastStartFailoverAutoReinstate 设置为 TRUE 。
  • 在故障转移发生之前和原始主数据库重新启动之后,原始主数据库和新主数据库包含相同的快速启动故障转移配置。
  • 在多备库配置中,在原主库重启前没有进行后续的故障切换或者切换。
  • 观察者可以连接到原始主数据库。
  • 原主库必须能够连接到新的主库才能完成恢复操作完成恢复操作。

如果未满足所有条件,则不会自动恢复原始主数据库并记录相应的错误。
然后,我们可以使用 DGMGRL 或者企业管理器请求手动恢复原始主数据库。

快速启动故障转移

快速启动故障转移使 Data Guard 代理能够快速自动地故障转移到先前选择的备用数据库,而无需手动干预。
此功能通过减少我们手动执行故障转移操作的需要,在发生灾难时提高了数据库的可用性。
快速启动故障转移只能在代理配置中使用,并且只能通过 DGMGRL 或者企业管理器进行配置。

观察器是一个 Oracle 调用接口 (OCI) 客户端组件,通常在单独的计算机上运行并监视主数据库的可用性。
它集成到 DGMGRL 客户端组件中。
我们必须使用 DGMGRL 12.1 版来观察运行 12.1 版的 Oracle 数据库。
只能有一个观察者监视代理配置。

第 7 步:启动观察者

执行 START OBSERVER 命令,该命令指示代理开始“观察”与 DGMGRL 连接的 Data Guard 配置。
我们必须在观察者所在的计算机上执行此命令。

DGMGRL> START OBSERVER;

当我们执行 START OBSERVER 命令时,观察者检索主数据库和快速启动故障转移目标备用数据库连接标识符并开始观察。
它向 Data Guard 代理提供其主机的名称。

主数据库必须可用于 START OBSERVER 命令才能成功。
在任何时候,Data Guard 配置只能有一个观察者。
如果我们尝试为配置启动第二个观察者,我们会收到一条错误消息。
如果在观察者观察配置时禁用快速启动故障转移,则观察者会在等待快速启动故障转移启用时空闲。

观察者维护一个小的配置文件,用于持久记录有关它正在观察的 Data Guard 配置的关键信息。
该文件包含主数据库和目标备用数据库的描述,包括连接描述符。
将 FILE 限定符与 START OBSERVER 命令一起使用,为观察者计算机上的配置文件指定显式目录路径和名称:

DGMGRL> START OBSERVER FILE=$ORACLE_HOME/dbs/Boston.dat;

如果不指定 FILE 限定符,则会在当前工作目录中搜索名为 FSFO.dat 的文件。
如果该文件不存在,则会创建一个新文件。
如果配置文件存在,观察者会检查该文件是否为观察者所连接的 Data Guard 配置描述了有效的快速启动故障转移环境。

注意:无论是否启用快速启动故障转移,我们都可以执行 START OBSERVER 命令。

当观察者成功启动时,控制权不会返回给我们。
观察者是一个连续的前台进程;因此,在我们从另一个 DGMGRL 会话发出 STOP OBSERVER 命令之前,观察者计算机上的命令行提示符不会返回。
要执行命令并与代理配置交互,我们必须通过另一个 DGMGRL 客户端会话进行连接。
如果我们使用 STOP OBSERVER 命令停止观察者,则观察者的 DGMGRL 进程将终止。

什么时候发生快速启动故障转移?

当满足以下任一条件时,将发生快速启动故障转移:

  • 主数据库和观察者之间以及主数据库和快速启动故障转移目标备用数据库之间的连接丢失超过了快速启动故障转移阈值。
  • 数据库健康检查机制确定以下任何一项(可选配置):
  • 由于写入错误,数据文件处于脱机状态。
  • 发生关键数据库对象的字典损坏。
  • 由于磁盘故障,控制文件永久损坏。
  • 由于 I/O 错误,LGWR 无法写入日志组的任何成员。
  • 由于设备已满或者不可用,Archiver 无法归档重做日志。
  • 单实例数据库发生实例崩溃。
  • Real Application Clusters (RAC) 主数据库的所有实例都崩溃了。
  • 发生主数据库的关闭中止。
  • 应用程序启动快速 应用程序通过调用 DBMS_DG.INITIATE_FS_FAILOVER 函数调用启动故障转移来启动快速启动故障转移。

从应用程序启动快速启动故障转移

DBMS_DG PL/SQL 包包含 INITIATE_FS_FAILOVER 函数,它使应用程序能够请求快速启动故障转移。

FUNCTION dbms dg.initiate_fs_failover
  (condstr IN VARCHAR2) RETURN BINARY_INTEGER;

应用程序启动的故障转移是调用 FAILOVER 命令并需要 SYSDBA 权限。
DBMS_DG 包被定义为调用者权限包以解决特权问题。
如果配置未处于有效的快速启动故障转移状态,INITIATE_FS_FAILOVER 函数将返回 ORA 错误,通知调用方无法执行快速启动故障转移操作。

步骤 8:验证配置

我们还可以使用 SHOW FAST_START FAILOVER 命令显示所有快速启动故障转移信息。

DGMGRL> show fast_start failover;
Fast-Start Failover: ENABLED

  Threshold:         30 seconds
  Target:            london
  Observer:          host04
  Lag Limit:         30 seconds
  Shutdown Primary:  TRUE
  Auto-reinstate:     TRUE
  Observer Reconnect: (none)
  Observer Override: FALSE
Configurable Failover Conditions
  Health Conditions:
   Corrupted Controlfile  YES 
   Corrupted Dictionary   YES
   Inaccessible Logfile   NO
   Stuck Archiver         NO
   Datafile Offline       YES
Oracle Error Conditions:
(none)

为观察者设置连接标识符

使用 ObserverConnectIdentifier 可配置数据库属性指定观察者应如何连接和监视主数据库和备用数据库。
如果我们希望观察者使用与用于传送重做数据的连接标识符不同的连接标识符(即由 DGConnectIdentifier 属性指定的连接标识符),请为主数据库和目标备用数据库设置此属性。

DGMGRL> EDIT DATABASE boston SET PROPERTY ObserverConnectIdentifier = 'boston.example.com';
如何在 Oracle Data Guard 中启用快速启动故障转移

步骤 2:设置保护模式

当配置处于最大可用性模式或者最大性能模式时,我们可以启用快速启动故障转移。
在最大性能模式下,将 FastStartFailoverLagLimit 配置属性设置为可接受的限制(以秒为单位),在此限制下,备用数据库在应用重做时落后于主数据库,但仍允许自动快速启动故障转移。
这是为了限制数据丢失量。

DGMGRL> EDIT DATABASE boston SET PROPERTY LogXptMode=SYNC;
DGMGRL> EDIT DATABASE london SET PROPERTY LogXptMode=SYNC;
DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MaxAvailability
DGMGRL> EDIT DATABASE boston SET PROPERTY LogXptMode=ASYNC;
DGMGRL> EDIT DATABASE london SET PROPERTY LogXptMode=ASYNC;
DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MaxPerformance;
DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverLagLimit=45;

注意:远程同步将重做传送到快速启动故障转移目标时,必须使用 RedoRoutes 属性而不是 LogXptMode 属性。
将最大性能模式与远程同步一起使用时,无法启用快速启动故障转移。

设置观察者覆盖

ObserverOverride 配置属性设置为 TRUE 时,允许在观察者失去与主服务器的连接时进行自动故障转移,即使备用服务器与主服务器的连接正常。

DGMGRL> EDIT CONFIGURATION SET PROPERTY ObserverOverride = TRUE;

ObserverOverride 属性的默认值为 false。

停止观察者

如果我们不再想使用快速启动故障转移,或者我们想将观察者移动到不同的主机,请使用 STOP OBSERVER 命令停止观察者。

DGMGRL> STOP OBSERVER;

注意:STOP OBSERVER 命令不会禁用快速启动故障转移。
无论是否启用快速启动故障转移,我们都可以发出此命令。

我们必须在主数据库或者连接到主数据库的配置中的备用数据库上发出此命令。
如果在启用快速启动故障转移时执行此命令,则快速启动故障转移目标备用数据库必须连接到主数据库。

当我们执行 STOP OBSERVER 命令时,观察者不会立即停止。
代理在观察者下次联系时通知观察者。
执行 STOP OBSERVER 命令后,无论停止的观察者是否终止,Data Guard 代理都可以接受新的观察者。

配置自动恢复主数据库

FastStartFailoverAutoReinstate 属性使我们能够确定观察者是否应在快速启动故障转移后自动恢复旧的主数据库。
在某些快速启动故障转移情况下,我们可能希望在恢复主数据库之前诊断快速启动故障转移的原因;我们应该将该属性设置为 FALSE。
默认值是true。

DGMGRL> edit configuration set property 
FastStartFailoverAutoReinstate = false;
Property "faststartfailoverautoreinstate" updated
DGMGRL> show fast_start failover
Fast-Start Failover:   ENABLED
   Threshold:         90 seconds
   Target:            pc01sby1
   Observer:          host04
   Lag Limit:         60 seconds
   Shutdown Primary:  TRUE
   Auto-reinstate:     FALSE

快速启动故障转移准备工作

必须满足以下准备工作才能启用快速启动故障转移:

  • 代理配置必须在最大可用性或者最大性能模式下运行。
  • 主数据库必须配置有备用重做日志文件。
  • 作为快速启动故障转移目标的备用数据库必须将其 LogXptMode 属性设置为 SYNC 或者 FASTSYNC 以在最大可用性模式下启用快速启动故障转移或者将其设置为 ASYNC 以在最大性能模式下启用快速启动故障转移。要将远程同步实例与快速启动故障转移一起使用,主数据库必须对远程同步实例使用 SYNC 或者 FASTSYNC。远程同步实例必须使用 ASYNC 到目标备用数据库。如果远程同步将重做信息传送到快速重做信息到快速启动故障转移目标启动故障转移目标,则必须设置 RedoRoutes 属性。
  • 必须在主数据库和目标备用数据库上启用闪回数据库。
  • 主数据库和目标备用数据库必须具有连接性。
  • 在观察者系统上配置 tnsnames.ora 文件,以便观察者能够连接到主数据库和预选的目标备用数据库。
  • 创建静态服务名称,以便观察者可以自动重启数据库 可以作为恢复的一部分自动重启数据库
日期:2020-09-17 00:11:41 来源:oir作者:oir