用于 Oracle 的 Sun Cluster 数据服务指南(适用于 Solaris OS)

定制 Sun Cluster HA for Oracle 服务器 故障监视器

定制 Sun Cluster HA for Oracle 服务器 故障监视器使您能够修改服务器故障监视器的以下行为:


注意 – 注意 –

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


定制 Sun Cluster HA for Oracle 服务器 故障监视器包括以下步骤:

  1. 为错误定义定制行为

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

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

为错误定义定制行为

Sun Cluster HA for Oracle 服务器 故障监视器检测以下类型的错误:

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

定制操作文件格式

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


注 –

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


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

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

{
[ERROR_TYPE=DBMS_ERROR|SCAN_LOG|TIMEOUT_ERROR;]
ERROR=error-spec; 
[ACTION=SWITCH|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

指定服务器故障监视器停止并重新启动由 SUNW.oracle_server 资源的 Restart_type 扩展属性值所指定的实体。

SWITCH

指定服务器故障监视器将数据库资源组切换到另一个节点或区域。

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

CONNECTION_STATE

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

*

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

co

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

on

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

di

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

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

NEW_STATE

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

*

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

co

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

di

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

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

MESSAGE

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

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

更改对 DBMS 错误的响应

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

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

响应影响严重的错误

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

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

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


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

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

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


忽略影响轻微的错误

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

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

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


示例 5 忽略 DBMS 错误

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

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


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

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

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

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

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

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

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


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

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

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


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

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


注意 – 注意 –

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


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


注 –

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


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

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


提示 –

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


下面的示例显示定制操作文件中将连续超时探测最大次数增加到 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 的条目。这些条目指定以下行为:


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

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

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

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

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


注意 – 注意 –

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


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

  1. 在群集节点上,以超级用户或提供 solaris.cluster.modify RBAC 身份验证的角色登录。

  2. 设置 SUNW.oracle_server 资源的 Custom_action_file 扩展属性。

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


    # clresource set -p custom_action_file=filepath server-resource
    
    -p custom_action_file= filepath

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

    server-resource

    指定 SUNW.oracle_server 资源。