跳过导航链接
退出打印视图
| 用于 Oracle Real Application Clusters 的 Oracle Solaris Cluster 数据服务指南

搜索范围:

- 本文档
- 整个文档库

### 定制 Oracle 9i RAC 服务器 故障监视器

定制 Oracle 9i RAC 服务器 故障监视器使您能够修改服务器故障监视器的以下行为：

- 覆盖错误的预设操作

- 为没有预设操作的错误指定操作

| 注意 - 在定制 Oracle 9i RAC 服务器 故障监视器之前，需要考虑定制的效果，特别是将重新启动或切换更改为忽略或停止监视的情况下更需如此。如果错误长时间未能得到纠正，则这些错误可能导致数据库问题。如果在定制 Oracle 9i RAC 服务器 故障监视器后遇到数据库问题，请恢复使用预设操作。恢复预设操作使您能够确定该问题是否由定制引起。

定制 Oracle 9i RAC 服务器 故障监视器包括以下步骤：

1. 为错误定义定制行为

2. 将定制操作文件传播到群集中的所有节点

3. 指定服务器故障监视器所要使用的定制操作文件

#### 为错误定义定制行为

Oracle 9i RAC 服务器 故障监视器检测以下类型的错误：

- 服务器故障监视器探测数据库期间发生的 DBMS 错误

- 警报日志文件中的 Oracle 日志警报

- 由于无法在 `Probe_timeout` 扩展属性设置的时间内接收响应而导致的超时

要为这些错误类型定义定制行为，可以创建定制操作文件。本节包含以下有关定制操作文件的信息：

- 定制操作文件格式

- 更改对 DBMS 错误的响应

- 将响应更改为已记录的警报

- 更改连续超时探测的最大次数

##### 定制操作文件格式

定制操作文件是纯文本文件。该文件包含一个或多个定义 Oracle 9i RAC 服务器 故障监视器定制行为的条目。每个条目可以为一个 DBMS 错误、一个超时错误或多个已记录警报定义定制行为。定制操作文件中最多可定义 1024 个条目。

注 - 定制操作文件中的每个条目都会覆盖某个错误的预设操作，或者为没有预设操作的错误指定操作。请仅为那些需要覆盖的预设操作或没有预设操作的错误在定制操作文件中创建条目。请不要为不需要更改的操作创建条目。

定制操作文件中的条目由一连串用分号分隔的关键字-值对组成。每个条目都包含在括号当中。

定制操作文件中的条目格式如下所示：

    {
    [ERROR_TYPE=DBMS_ERROR|SCAN_LOG|TIMEOUT_ERROR;]
    ERROR=error-spec;
    [ACTION=RESTART|STOP|NONE;]
    [CONNECTION_STATE=co|di|on|*;]
    [NEW_STATE=co|di|on|*;]
    [MESSAGE="message-string"]
    }

单独的关键字-值对之间和条目之间可能会使用空格以便格式化文件。

定制操作文件中关键字的含义和允许值如下：

`ERROR_TYPE`

  表示服务器故障监视器已检测到的错误类型。该关键字允许使用以下值：

  `DBMS_ERROR`

    指定该错误为 DBMS 错误。

  `SCAN_LOG`

    指定该错误为警报日志文件中记录的警报。

  `TIMEOUT_ERROR`

    指定该错误为超时。

  `ERROR_TYPE` 关键字可选。如果忽略该关键字，错误将假定为 DBMS 错误。

`ERROR`

  用于标识错误。error-spec 的数据类型和含义由 `ERROR_TYPE` 关键字的值确定，如下表所示。

  `ERROR_TYPE` | 数据类型 | 含义
  --- | --- | ---
  `DBMS_ERROR` | 整数 | 由 Oracle 生成的 DBMS 错误的错误编号。
  `SCAN_LOG` | 引用的正则表达式 | Oracle 已记录到 Oracle 警报日志文件的错误信息中的字符串。
  `TIMEOUT_ERROR` | 整数 | 从服务器故障监视器上次启动或重新启动时起，产生连续超时探测的次数

  您必须指定 `ERROR` 关键字。如果忽略该关键字，则定制操作文件中的对应条目将被忽略。

`ACTION`

  指定服务器故障监视器为响应错误而执行的操作。该关键字允许使用以下值：

  `NONE`

    指定服务器故障监视器忽略该错误。

  `STOP`

    指定停止服务器故障监视器。

  `RESTART`

    指定服务器故障监视器停止然后重新启动 Oracle 9i RAC 服务器资源。

  `ACTION` 关键字可选。如果忽略该关键字，则服务器故障监视器将忽略该错误。

`CONNECTION_STATE`

  指定当检测到错误时数据库和服务器故障监视器之间必要的连接状态。指定仅当检测到错误时连接需要处于必要状态时才会应用该条目。该关键字允许使用以下值：

  `*`

    指定无论连接状态如何都始终应用该条目。

  `co`

    指定仅当服务器故障监视器正尝试连接到数据库时才会应用该条目。

  `on`

    指定仅当服务器故障监视器联机时才会应用该条目。如果服务器故障监视器连接到数据库则为联机。

  `di`

    指定仅当服务器故障监视器与数据库断开连接时才会应用该条目。

  `CONNECTION_STATE` 关键字可选。如果忽略该关键字，则无论连接状态如何都会始终应用该条目。

`NEW_STATE`

  指定服务器故障监视器检测到错误后必须保留的数据库与服务器故障监视器之间的连接状态。该关键字允许使用以下值：

  `*`

    指定连接必须保留不更改的状态。

  `co`

    指定服务器故障监视器必须断开与数据库的连接并立即重新连接到数据库。

  `di`

    指定服务器故障监视器必须断开与数据库的连接。当下次探测数据库时，服务器故障监视器将重新连接。

  `NEW_STATE` 关键字可选。如果忽略该关键字，则检测到错误后数据库连接状态保留不更改。

`MESSAGE`

  指定当检测到错误时需要打印到资源日志文件的附加消息。该消息必须包含在双引号内。该消息是为错误定义的标准消息的补充。

  `MESSAGE` 关键字可选。如果忽略该关键字，则检测到错误时不会将附加消息打印到资源的日志文件。

##### 更改对 DBMS 错误的响应

已预设服务器故障监视器为响应每个 DBMS 错误所要执行的操作，如表 B-1 中所列。要确定是否需要更改对 DBMS 错误的响应，可以考虑 DBMS 错误对数据库的影响，以便确定预设操作是否合适。有关示例，请参见下面的子章节：

- 响应影响严重的错误

- 忽略影响轻微的错误

要更改对 DBMS 错误的响应，可以在定制操作文件中创建条目，并在其中按如下格式设置关键字：

- `ERROR_TYPE` 设置为 `DBMS_ERROR`。

- `ERROR` 设置为 DBMS 错误的错误编号。

- `ACTION` 设置为需要执行的操作。

##### 响应影响严重的错误

如果服务器故障监视器忽略的错误会影响多个会话，则可能需要服务器故障监视器执行操作以防止服务损失。

例如，没有为 Oracle 错误 4031：`unable to allocate` num-bytes `bytes of shared memory` 预设操作。但是，该 Oracle 错误表示共享全局区域 (Shared Global Area, SGA) 内存不足、碎片太多或者同时存在这两种状态。如果该错误仅影响一个会话，则可以考虑适当忽略该错误。但是，如果该错误影响多个会话，则可以考虑指定该服务器错误监控器重新启动该数据库。

下面的示例显示定制操作文件中将 DBMS 错误响应更改为重新启动的条目。

示例 5-4 将 DBMS 错误响应更改为重新启动

    {
    ERROR_TYPE=DBMS_ERROR;
    ERROR=4031;
    ACTION=restart;
    CONNECTION_STATE=*;
    NEW_STATE=*;
    MESSAGE="Insufficient memory in shared pool.";
    }

本示例显示在定制操作文件中覆盖 DBMS 错误 4031 预设操作的条目。该条目指定以下行为：

- 为响应 DBMS 错误 4031，服务器故障监视器所要执行的操作是重新启动。

- 当检测到错误时，无论数据库和服务器故障监视器之间的连接状态如何都应用该条目。

- 检测到错误后，数据库和服务器故障监视器之间的连接状态必须保留不更改。

- 当检测到错误时，将以下消息打印到资源的日志文件中：

      Insufficient memory in shared pool.

##### 忽略影响轻微的错误

如果服务器故障监视器所要响应的错误影响轻微，则忽略该错误可能比响应该错误造成的干扰更少。

例如，Oracle 错误 4030：`out of process memory when trying to allocate` num-bytes `bytes` 的预设操作是重新启动。该 Oracle 错误表示服务器故障监视器无法分配专用堆内存。导致该错误的一个可能的原因是操作系统可用内存不足。如果该错误影响多个会话，则可以适当考虑重新启动数据库。但是，该错误可能不会影响其它会话，因为这些会话不需要额外专用内存。在这种情况下，可以考虑指定服务器故障监视器忽略该错误。

下面的示例显示定制操作文件中忽略 DBMS 错误的条目。

示例 5-5 忽略 DBMS 错误

    {
    ERROR_TYPE=DBMS_ERROR;
    ERROR=4030;
    ACTION=none;
    CONNECTION_STATE=*;
    NEW_STATE=*;
    MESSAGE="";
    }

本示例显示定制操作文件中覆盖 DBMS 错误 4030 预设操作的条目。该条目指定以下行为：

- 服务器错误监视器将忽略 DBMS 错误 4030。

- 当检测到错误时，无论数据库和服务器故障监视器之间的连接状态如何都应用该条目。

- 检测到错误后，数据库和服务器故障监视器之间的连接状态必须保留不更改。

- 检测到该错误时不会向资源的日志文件打印附加消息。

##### 将响应更改为已记录的警报

`alert_log_file` 扩展属性所标识的文件中的 Oracle 软件日志警报。服务器故障监视器扫描该文件并执行操作以响应已定义操作的警报。

表 B-2 中列出了已记录警报的预设操作。更改对已记录警报的响应以便更改预设操作，或定义服务器故障监视器所要响应的新警报。

要更改对已记录警报的响应，可以在定制操作文件中创建条目并按如下格式设置关键字：

- `ERROR_TYPE` 设置为 `SCAN_LOG`。

- `ERROR` 设置为标识已由 Oracle 记录到 Oracle 警报日志文件的错误消息中字符串的引用正则表达式。

- `ACTION` 设置为需要执行的操作。

服务器故障监视器按照条目在定制操作文件中出现的顺序处理条目。仅处理第一个与日志警报匹配的条目。后面的匹配条目将被忽略。如果使用正则表达式为多个已记录警报指定指定，请确保更有针对性的条目出现在更为通用的条目之前。在通用条目后指定的条目可能会被忽略。

例如，定制操作文件可能会为由正则表达式 `ORA-65` 和 `ORA-6` 标识的错误定义不同的操作。为确保包含正则表达式 `ORA-65` 的条目不会被忽略，请确保该条目出现在包含正则表达式 `ORA-6` 的条目之前。

下面的示例显示定制操作文件中更改对已记录警报的响应的条目。

示例 5-6 更改对已记录警报的响应

    {
    ERROR_TYPE=SCAN_LOG;
    ERROR="ORA-00600: internal error";
    ACTION=RESTART;
    }

本示例显示定制操作文件中覆盖内部错误已记录警报预设操作的条目。该条目指定以下行为：

- 为响应包含文本 `ORA-00600: internal error` 的已记录警报，服务器故障监视器所要执行的操作是重新启动。

- 当检测到错误时，无论数据库和服务器故障监视器之间的连接状态如何都应用该条目。

- 检测到错误后，数据库和服务器故障监视器之间的连接状态必须保留不更改。

- 检测到该错误时不会向资源的日志文件打印附加消息。

##### 更改连续超时探测的最大次数

默认情况下，服务器故障监视器将在第二次连续超时探测后重新启动数据库。如果数据库负载很轻，两次连续超时探测应足以表明该数据库已挂起。但在负载很重时，即使数据库正常工作，服务器故障监视器探测也可能会连续超时。为防止服务器故障监视器不必要地重新启动数据库，可以增加连续超时探测的最大次数。

| 注意 - 增加连续超时探测的最大次数会延长检测数据库是否挂起所需的时间。

要更改连续超时探测允许的最大次数，可以在定制操作文件中为除第一次超时探测外其余每个允许的连续超时探测创建一个条目。

注 - 您不需要为第一次超时探测创建条目。服务器故障监视器响应第一次超时探测所要执行的操作已经预设。

对于最后一次允许的超时探测，可以创建按如下格式设置关键字的条目：

- `ERROR_TYPE` 设置为 `TIMEOUT_ERROR`。

- `ERROR` 设置为允许的连续超时探测的最大次数。

- `ACTION` 设置为 `RESTART`。

对于除第一次超时探测外其余每个仍然连续超时探测，可以创建按如下格式设置关键字的条目：

- `ERROR_TYPE` 设置为 `TIMEOUT_ERROR`。

- `ERROR` 设置为超时探测的序列号。例如，对于第二次连续超时探测，可以将关键字设置为 2。对于第三次连续超时探测，可以将关键字设置为 3。

- `ACTION` 设置为 `NONE`。

提示 - 为方便调试，可以指定表示超时探测序列号的消息。

下面的示例显示定制操作文件中将连续超时探测最大次数增加到 5 的条目。

示例 5-7 更改连续超时探测的最大次数

    {
    ERROR_TYPE=TIMEOUT;
    ERROR=2;
    ACTION=NONE;
    CONNECTION_STATE=*;
    NEW_STATE=*;
    MESSAGE="Timeout #2 has occurred.";
    }

    {
    ERROR_TYPE=TIMEOUT;
    ERROR=3;
    ACTION=NONE;
    CONNECTION_STATE=*;
    NEW_STATE=*;
    MESSAGE="Timeout #3 has occurred.";
    }

    {
    ERROR_TYPE=TIMEOUT;
    ERROR=4;
    ACTION=NONE;
    CONNECTION_STATE=*;
    NEW_STATE=*;
    MESSAGE="Timeout #4 has occurred.";
    }

    {
    ERROR_TYPE=TIMEOUT;
    ERROR=5;
    ACTION=RESTART;
    CONNECTION_STATE=*;
    NEW_STATE=*;
    MESSAGE="Timeout #5 has occurred. Restarting.";
    }

本示例显示定制操作文件中将连续超时探测最大次数增加到 5 的条目。这些条目指定以下行为：

- 服务器故障监视器忽略从第二次连续超时探测到第四次连续超时探测。

- 为响应第五次连续超时探测，服务器故障监视器所要执行的操作是重新启动。

- 当发生超时时，无论数据库和服务器故障监视器之间的连接状态如何都应用该条目。

- 超时发生后，数据库和服务器故障监视器之间的连接状态必须保持不变。

- 当发生第二次连续超时探测到第四次连续超时探测时，将以下格式的消息打印到资源的日志文件：

      Timeout #number has occurred.

- 当发生第五次连续超时探测时，将以下消息打印到资源的日志文件：

      Timeout #5 has occurred. Restarting.

#### 将定制操作文件传播到群集中的所有节点

服务器故障监视器必须在所有群集节点上执行一致的行为。因此，服务器故障监视器在所有群集节点上使用的定制操作文件必须相同。创建或修改定制操作文件后，可以通过将文件传播到所有群集节点确保该文件在所有群集节点上相同。要将该文件传播到所有群集节点，可以使用最适合您群集配置的方法：

- 将文件放置在所有节点可以共享的文件系统上

- 将文件放置在具有高可用性的本地文件系统上

- 可以使用操作系统命令（如 `rcp`(1) 命令或`rdist`(1) 命令）将该文件复制到每个群集节点的本地文件系统。

#### 指定服务器故障监视器所要使用的定制操作文件

要将定制操作应用到服务器故障监视器，您必须指定故障监视器应该使用的定制操作文件。当服务器故障监视器读取定制操作文件时，定制操作将应用到服务器故障监视器。服务器故障监视器在您指定定制操作文件时读取该文件。

指定定制操作文件还将验证该文件。如果该文件中包含语法错误，则会显示错误消息。因此，更改定制操作文件后，请再次指定该文件以便验证该文件。

| 注意 - 如果已修改的定制操作文件中检测到语法错误，请在故障监视器重新启动之前纠正这些错误。如果故障监视器重新启动时这些语法错误仍未得到纠正，则故障监视器仍会读取该错误文件，并忽略第一个出现语法错误之后的条目。

# 如何指定服务器故障监视器应该使用的定制操作文件

1. 在群集节点上，以超级用户或提供 `solaris.cluster.modify` RBAC 身份验证的角色登录。
2. 设置 `SUNW.scalable_rac_server` 资源的 `Custom_action_file` 扩展属性。

   将该属性设置为定制操作文件的绝对路径。

       # clresource set -p custom_action_file=filepath server-resource

   `-p` `custom_action_file=` filepath

     指定定制操作文件的绝对路径。

   server-resource

     指定 `SUNW.scalable_rac_server` 资源。

版权所有 © 2000, 2010, Oracle 和/或其附属公司。 保留所有权利。 法律声明 |