Oracle Restart 增强了 Oracle 数据库在单实例环境中的可用性。
Oracle Restart 概述
当您安装 Oracle Restart 时,各种 Oracle 组件可以在硬件或软件故障或数据库主机重启后自动重新启动。
| 组件 | 说明 |
|---|---|
| 数据库实例 | Oracle Restart 可以在一台主机上容纳多个数据库。 |
| Oracle Net 监听器 | - |
| Database 服务 | 不包括安装时创建的默认服务,因为它由 Oracle 数据库自动管理。也不包括数据库创建过程中创建的任何默认服务或全局服务。 |
| Oracle Automatic Storage Management (Oracle ASM)实例 | - |
| Oracle ASM 磁盘组 | 重新启动磁盘组意味着挂载磁盘组。 |
| Oracle Notification Services (ONS) | 在 Oracle Grid Infrastructure for Standalone Servers(Oracle Restart)环境中,可以在 Oracle Data Guard 安装中使用 ONS,通过快速应用程序通知(Fast Application Notification, FAN)自动切换主备数据库之间的连接。ONS 是在故障转移时向集成客户端发送 FAN 事件的服务。 |
Oracle Restart 运行定期检查操作来监视这些组件的健康状况。如果组件检查失败,将关闭该组件并重新启动该组件。
Oracle Restart 仅用于独立服务器(非集群)环境。对于 Oracle Real Application Clusters(Oracle RAC)环境,Oracle Clusterware 提供了自动重启组件的功能。
Oracle Restart 在 Oracle Grid Infrastructure 主目录下运行,它与 Oracle Database 主目录分开安装。
关于启动依赖项
Oracle Restart 确保 Oracle 组件按照组件依赖关系以正确的顺序启动。
例如,如果数据库文件存储在 Oracle ASM 磁盘组中,那么在启动数据库实例之前,Oracle Restart 确保启动 Oracle ASM 实例并挂载所需的磁盘组。同样地,如果一个组件必须关闭,Oracle Restart 确保依赖的组件首先被干净地关闭。
Oracle Restart 还管理数据库实例与 Oracle Net 监听器之间的弱依赖关系:当数据库实例启动时,Oracle Restart尝试启动监听器。如果监听器启动失败,则数据库仍处于启动状态。如果监听失败,Oracle Restart 不会关闭并重新启动任何数据库实例。
关于 Oracle Restart 启动和停止组件
Oracle Restart 在需要时自动重启 Oracle 的各种组件,在手动关闭系统时自动有序停止 Oracle 组件。
但是,有时可能需要手动启动或停止单个 Oracle 组件。Oracle Restart 包括服务器控制(SRVCTL)实用程序,您可以使用它手动启动和停止 Oracle Restart 管理的组件。当使用 Oracle Restart 时,Oracle 强烈建议使用 SRVCTL 手动启动和停止组件。
使用 SRVCTL 停止组件后,如果发生故障,Oracle Restart 不会自动重新启动该组件。然后如果使用 SRVCTL 启动组件,该组件再次可用于自动重启。
Oracle 实用程序,如 SQL*Plus、监听控制实用程序(LSNRCTL)和 ASMCMD 集成到 Oracle Restart 中。如果使用 SQL*Plus 关闭数据库,Oracle Restart 不会将此解释为数据库故障,也不会尝试重新启动数据库。类似地,如果您使用 SQL*Plus 或 ASMCMD 关闭 Oracle ASM 实例,Oracle Restart 不会尝试重新启动它。
使用 SRVCTL 启动组件与使用 SQL*Plus(或其他实用程序)启动组件之间的重要区别如下:
- 当您使用 SRVCTL 启动组件时,该组件所依赖的任何组件都将首先自动启动,并以适当的顺序启动。
- 当你用 SQL*Plus(或其他实用程序)启动一个组件时,依赖链中的其他组件不会自动启动;您必须确保此组件所依赖的任何组件都已启动。
此外,Oracle Restart 允许您使用单个命令启动和停止指定 Oracle Home 中由 Oracle Restart 管理的所有组件。Oracle Home 可以是 Oracle Database Home 或 Oracle Grid Infrastructure Home。在安装补丁时,此功能非常有用。
关于启动和停止 Oracle Restart
CRSCTL 实用程序启动和停止 Oracle Restart。
您还可以使用 CRSCTL 实用程序来启用或禁用 Oracle 高可用性服务。Oracle Restart 使用 Oracle 高可用性服务自动启动和停止由 Oracle Restart 管理的组件。例如,Oracle 高可用性服务守护进程自动启动数据库、监听器和 Oracle ASM 实例。关闭 Oracle 高可用性服务后,重启节点时不会启动 Oracle Restart 管理的组件。
通常,当您必须停止 Oracle 安装中所有正在运行的 Oracle 软件时,您可以使用 CRSCTL 实用程序。例如,在安装补丁或执行操作系统维护时,可能需要停止 Oracle Restart。维护完成后,使用 CRSCTL 实用程序启动 Oracle Restart。
Oracle Restart 配置
Oracle Restart 维护它所管理的所有 Oracle 组件的列表,并维护每个组件的配置信息。
所有这些信息统称为 Oracle Restart 配置。Oracle Restart 启动组件时,将根据该组件的配置信息启动该组件。例如,Oracle Restart 配置包括数据库的服务器参数文件(SPFILE)的位置,以及监听器要监听的TCP端口。
如果您安装 Oracle Restart,然后使用数据库配置助手(DBCA)创建数据库,DBCA 会自动将数据库添加到 Oracle Restart 配置中。当 DBCA 启动数据库时,数据库与其他组件(例如数据库存储数据的磁盘组)之间所需的依赖关系建立,Oracle Restart 开始管理数据库。
您可以使用 SRVCTL 命令从 Oracle Restart 配置中手动添加和删除组件。例如,如果您将 Oracle Restart 安装到已经运行数据库的主机上,您可以使用 SRVCTL 将该数据库添加到 Oracle Restart 配置中。当您手动将组件添加到 Oracle Restart 配置中,然后使用 SRVCTL 启动该组件时,Oracle Restart 将开始管理该组件,并在需要时重启该组件。
其他 SRVCTL 命令允许您查看 Oracle Restart 管理的组件的状态和配置,暂时禁用组件管理,然后重新启用组件管理,等等。
安装 Oracle Restart 后,许多创建 Oracle 组件的操作都会自动将这些组件添加到 Oracle Restart 配置中。部分创建操作及是否自动添加,如下表所示。
| 创建操作 | 已创建组件自动添加到 Oracle Restart Configuration? |
|---|---|
| 创建带有 OUI 或 DBCA 的数据库 | 是 |
使用 CREATE DATABASE SQL 语句创建数据库 |
否 |
| 使用 OUI、DBCA 或 ASMCA 创建 Oracle ASM 实例 | 是 |
| 创建磁盘组(任何方法) | 是 |
| 使用 NETCA 添加监听器 | 是 |
| 使用 SRVCTL 创建数据库服务 | 是 |
| 通过修改 SERVICE_NAMES 初始化参数创建数据库服务 | 否 |
使用 DBMS_SERVICE.CREATE_SERVICE 创建数据库服务。 |
否 |
| 创建备用数据库 | 否 |
下表列出了一些 delete/drop/remove 操作,以及被删除的组件是否也会自动从 Oracle Restart 配置中删除。
| 操作 | 删除的组件是否自动从 Oracle Restart Configuration 中删除? |
|---|---|
| DBCA 删除数据库 | 是 |
| 通过使用操作系统命令删除数据库文件来删除数据库 | 否 |
| 删除带有 NETCA 的监听器 | 是 |
| 删除 Oracle ASM 磁盘组(任何方法) | 是 |
| 使用 SRVCTL 命令删除数据库服务 | 是 |
| 通过其他方式删除数据库服务 | 否 |
Oracle Restart 集成 Oracle Data Guard
Oracle Restart 集成了 Oracle Data Guard(数据保护)和 Oracle Data Guard Broker(代理)。
当需要关闭和重新启动数据库以响应角色更改请求时,Oracle Restart 会按照 Oracle Restart 配置中的设置,以有序的方式(考虑依赖关系)关闭和重新启动数据库。Oracle Restart 还确保,在 Data Guard 角色转换之后,所有配置为在新数据库角色中运行的数据库服务都是活动的,而所有未配置为在新角色中运行的服务都将停止。
此外,Oracle Restart 配置支持以下组件的 Data guard 相关配置选项:
- Databases——在 Oracle Restart 配置中添加数据库时,可以指定数据库当前的 Data Guard 角色:
PRIMARY、PHYSICAL_STANDBY、LOGICAL_STANDBY或SNAPSHOT_STANDBY。如果稍后使用代理更改了角色,Oracle Restart 会自动使用新角色更新数据库配置。如果您在不使用代理的情况下更改了数据库角色,则必须手动修改 Oracle Restart 配置中的数据库角色以反映新角色。 - Database Services——在 Oracle Restart 配置中添加数据库服务时,您可以为该服务指定一个或多个 Data Guard 角色。当此配置选项存在时,在数据库打开时,只有当其中一个服务角色与当前数据库角色匹配时,Oracle Restart 才会启动服务。
Fast Application Notification 和 Oracle Restart
Oracle Restart 使用 Oracle Notification Services(ONS)和 Oracle Advanced Queues 来发布 Fast Application Notification(FAN)高可用性事件。集成 Oracle 客户端使用 FAN 在服务或实例出现故障时向客户端提供快速通知。客户机可以自动执行主数据库和备用数据库之间数据库连接的故障转移。
Fast Application Notification 概述
FAN 是一种高可用性通知机制,Oracle Restart 可以使用它来通知其他进程配置更改,包括服务状态更改,例如 UP 或 DOWN 事件。
FAN 提供了当实例或服务器发生故障时立即终止飞行事务的能力。集成的 Oracle 客户端接收事件并响应。应用程序可以通过将错误传播给用户或通过重新提交事务并对应用程序用户屏蔽错误来响应。当发生 DOWN 事件时,集成客户机立即清理到终止数据库的连接。当 UP 事件发生时,客户端创建到新的主数据库实例的新连接。
Oracle Restart 在一个托管实例或服务 UP 或 DOWN 时发布 FAN 事件。在故障转移之后,Oracle Data Guard Broker(Broker)发布 FAN 事件。这些 FAN 事件可以通过以下方式使用:
- 如果应用程序使用以下 Oracle 集成数据库客户端之一:Oracle Database JDBC、Java 通用连接池、Oracle 调用接口和 Oracle 数据库 ODP.NET,则可以在 Oracle Restart 中使用 FAN,而无需进行编程更改。可以将这些客户机配置为快速连接故障转移(FCF),以便在故障转移后自动连接到新的主数据库。
- FAN 服务器端调出可以在数据库层上配置。
对于 DOWN 事件(比如主数据库发生故障),FAN 会立即向客户端提供通知,以便客户端能够尽快将故障转移到新的主数据库。客户端不等待超时。客户机将立即得到通知,并且必须将它们配置为在收到通知时进行故障转移。
对于 UP 事件,当服务和实例启动时,可以创建新的连接,以便应用程序可以立即利用额外的资源。
通过服务器端调用,您还可以使用 FAN :
-
日志状态信息
-
当资源启动失败时,呼叫 DBA 或打开支持问题
-
自动启动必须与服务共存的依赖的外部应用程序
FAN 事件使用 ONS 和 Oracle Database Advanced Queuing 队列发布。在配置服务时自动配置队列。必须使用 SRVCTL 命令手动配置 ONS。
连接管理器(CMAN)和 Oracle Net Services 监听器与 FAN 事件集成,使 CMAN 和监听器能够立即注销失败实例提供的服务,并避免错误地向失败的数据库发送连接请求。
应用服务程序高可用性和 FAN
Oracle 数据库专注于维护服务的可用性。通过 Oracle Restart,Oracle 服务被设计为持续可用。Oracle Restart监视数据库及其服务,并在配置时使用 FAN 发送事件通知。
管理计划外停机
如果 Oracle Restart 检测到中断,那么它将隔离失败的组件并恢复依赖的组件。如果出现故障的组件是数据库实例,那么在 Oracle Data Guard 故障转移到备用数据库后,新的主数据库上的 Oracle Restart 将启动用当前角色定义的所有服务。
FAN 事件由 Oracle Restart 和 Oracle Data Guard Broker 通过 ONS 和 Advanced Queuing 发布。您还可以使用 FAN 标注执行通知。
使用 Oracle Restart,重启和恢复是自动的,包括重新启动子系统,如监听器和 Oracle Automatic Storage Management(Oracle ASM)进程,而不仅仅是数据库。您可以使用 FAN 标注向故障管理系统报告故障并启动维修工作。
管理计划性停机
对于需要关闭主数据库的修复、升级和更改,Oracle Restart 提供了禁用和启用服务的接口,以最大限度地减少对应用程序用户的服务中断。
使用 Oracle Data Guard Broker 和 Oracle Restart 允许在计划停机期间将数据库服务从主服务器协调地转移到备用服务器。操作完成后,即可恢复服务正常运行。
服务的管理策略控制数据库重启时该服务是否自动启动。如果服务的管理策略设置为 AUTOMATIC,则服务将自动重启。如果服务的管理策略设置为 MANUAL,则必须手动启动该服务。
Fast Application Notification 高可用性事件
了解 FAN 事件记录参数和事件类型。
下表描述了 FAN 事件记录参数和事件类型,以及事件属性的 name-value 对。事件类型总是第一个条目,时间戳总是最后一个条目。以 Fan event type(service_member)为例,name-value 对中的值为 Properties:
FAN event type: service_member
Properties: version=1.0 service=ERP database=FINPROD instance=FINPROD host=node1 status=up
| 参数 | 描述 |
|---|---|
VERSION |
事件记录的版本。用于标识发布变更。 |
EVENT TYPE |
SERVICE、SERVICE_MEMBER、DATABASE、INSTANCE、NODE、ASM、SRV_PRECONNECT。请注意,数据库和实例类型提供数据库服务,例如 DB_UNIQUE_NAME.DB_DOMAIN. |
DATABASE UNIQUE NAME |
支持该服务的唯一数据库;匹配 DB_UNIQUE_NAME 的初始化参数值,默认为初始化参数 DB_NAME 的值。 |
INSTANCE |
支持该服务的实例的名称;匹配 ORACLE_SID 值。 |
NODE NAME |
支持该服务或已停止服务的节点的名称;与 Cluster Synchronization Services(CSS)已知的节点名匹配。 |
SERVICE |
服务名称;与 DBA_SERVICES 中的服务匹配。 |
STATUS |
取值为 UP、DOWN、NOT_RESTARTING、PRECONN_UP、PRECONN_DOWN 和UNKNOWN. |
REASON |
Data_Guard_Failover、Failure、Dependency、User、Autostart、Restart。 |
CARDINALITY |
现有成员的数量;包含在所有 UP 事件中。 |
TIMESTAMP |
排序通知事件时使用的本地时区。 |
FAN记录对应每条会话的数据库签名
| FAN 参数 | 匹配 Oracle 数据库签名 |
|---|---|
SERVICE |
sys_context('userenv', 'service_name') |
DATABASE UNIQUE NAME |
sys_context('userenv', 'db_unique_name') |
INSTANCE |
sys_context('userenv', 'instance_name') |
NODE NAME |
sys_context('userenv', 'server_host') |
使用 Fast Application Notification 标注
FAN 标注是服务器端可执行文件,Oracle Restart 在高可用性事件发生时立即执行。
当事件发生时,您可以使用 FAN 标注来自动执行以下活动,例如:
- 打开故障跟踪单
- 发送呼叫信息
- 发送电子邮件
- 启动和停止服务器端应用程序
- 通过记录发生的每个事件来维护正常运行时间日志
要使用FAN标注:
- 在主数据库服务器和备用数据库服务器的 grid_home/racg/usrco 目录下放置一个可执行文件。如果您正在使用脚本,那么将 shell 设置为可执行文件的第一行。
grid_home/racg/usrco/callout.sh 标注文件示例如下:
#! /bin/ksh
FAN_LOGFILE= [your path name]/admin/log/`hostname`_uptime.log
echo $* "reported="`date` >> $FAN_LOGFILE &
下面的输出来自上一个示例:
NODE VERSION=1.0 host=sun880-2 status=nodedown reason=
timestamp=08-Oct-2004 04:02:14 reported=Fri Oct 8 04:02:14 PDT 2004
FAN 记录对应每个会话的数据库签名。使用此信息对与 FAN 事件数据匹配的会话采取操作。
集成了 Fast Application Notification 功能的Oracle客户端
Oracle 已经将 FAN 集成到许多常用的 Oracle 客户端驱动程序中,这些驱动程序用于连接 Oracle Restart 数据库。因此,使用 FAN 的最简单方法是使用集成的 Oracle Client。
您可以使用 CMAN 会话池、Oracle 调用接口、Java 通用连接池、JDBC simple API 和 ODP. NET 连接池。总体目标是使应用程序能够在任何时候一致地获得到可用主数据库的连接。




