Sun Cluster HA for Oracle 服务器故障监视器可以检测以下类型的错误:
DBMS 错误,在服务器故障监视器探测数据库期间发生
警报,Oracle 在警报日志文件中记录
超时,由于在 Probe_timeout 扩展特性设置的时间内接收响应失败而导致
要为这些类型的错误定义定制性能,请创建一个定制操作文件。
定制操作文件是纯文本文件。该文件包含用于定义 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"] }
在分隔的关键字值对之间和条目之间可能会使用空格,以设置文件的格式。
表示服务器故障监视器已检测到的错误的类型。此关键字的允许值包括:
指定错误是 DBMS 错误。
指定错误是记录在警报日志文件中的警报。
指定错误是超时。
ERROR_TYPE 关键字是可选的。如果忽略此关键字,错误将被假定为 DBMS 错误。
标识错误。error-spec 的数据类型和含义由 ERROR_TYPE 关键字的值确定,如下表所示。
ERROR_TYPE |
数据类型 |
含义 |
---|---|---|
DBMS_ERROR |
Integer |
由 Oracle 生成的 DBMS 错误的错误编号 |
SCAN_LOG |
被引用的正规表达式 |
Oracle 已记录到 Oracle 警报日志文件中的错误消息中的字符串 |
TIMEOUT_ERROR |
Integer |
自上次启动或重新启动服务器故障监视器以来,连续超时探测的次数 |
您必须指定 ERROR 关键字。如果忽略此关键字,定制操作文件中的条目将被忽略。
指定服务器故障监视器响应错误要执行的操作。此关键字的允许值包括:
指定服务器故障监视器忽略错误。
指定服务器故障监视器停止。
指定服务器故障监视器停止,并重新启动由 SUNW.oracle_server 资源的 Restart_type 扩展特性的值指定的实体。
指定服务器故障监视器将数据库服务器资源组切换到另一个节点。
ACTION 关键字是可选的。如果忽略此关键字,服务器故障监视器将忽略错误。
指定在检测到错误时数据库和服务器故障监视器之间的连接所需的状态。仅当检测到错误时连接处于所需的状态,才应用此条目。此关键字的允许值包括:
指定始终应用此条目,无论连接的状态如何。
指定仅当服务器故障监视器尝试连接到数据库时才应用此条目。
指定仅当服务器故障监视器处于联机状态时才应用此条目。如果服务器故障监视器连接到数据库,它就处于联机状态。
指定仅当服务器故障监视器与数据库断开连接时才应用此条目。
CONNECTION_STATE 关键字是可选的。如果忽略此关键字,将始终应用此条目,无论连接的状态如何。
指定在检测到错误后服务器故障监视器必须获得的数据库与服务器故障监视器的连接的状态。此关键字的允许值包括:
指定连接的状态必须保留不变。
指定服务器故障监视器必须从数据库断开连接,并立即重新连接到数据库。
指定服务器故障监视器必须从数据库断开连接。服务器故障监视器下次探测数据库时将重新连接到数据库。
NEW_STATE 关键字是可选的。如果忽略此关键字,在检测到错误后,数据库连接的状态将保持不变。
指定在检测到此错误时,资源的日志文件中显示的附加消息。消息必须用双引号括住。对于为错误定义的标准消息来说,此消息是附加的。
MESSAGE 关键字是可选的。如果忽略此关键字,在检测到此错误时,资源的日志文件中不会显示附加消息。
服务器故障监视器响应每个 DBMS 错误而执行的操作已被预设,如表 B–1 中所示。要确定您是否需要更改对 DBMS 错误的响应,请考虑 DBMS 错误对数据库的影响以确定预设的操作是否适当。例如,请参见以下各小节。
要更改对 DBMS 错误的响应,请在定制操作文件中创建一个条目,其中的关键字设置如下:
将 ERROR_TYPE 设置为 DBMS_ERROR。
将 ERROR 设置为 DBMS 错误的错误编号。
将 ACTION 设置为所需的操作。
如果服务器故障监视器忽略的错误影响了多个会话,服务器故障监视器可能需要采取操作以防止服务丢失。
例如,没有为 Oracle 错误 4031 预设的操作:无法分配 num-bytes 字节的共享内存预设任何操作。但是,此 Oracle 错误表示共享全局区 (SGA) 内存不足、被错误拆分或二者兼有。如果此错误仅影响一个会话,忽略错误可能是适当的操作。但是,如果此错误影响多个会话,应考虑指定服务器故障监视器重新启动数据库。
下例显示了定制操作文件中的一个条目,用于将对 DBMS 错误的响应更改为重新启动。
{ ERROR_TYPE=DBMS_ERROR; ERROR=4031; ACTION=restart; CONNECTION_STATE=*; NEW_STATE=*; MESSAGE="Insufficient memory in shared pool."; }
此示例显示了定制操作文件中的一个条目,它用于覆盖 DBMS 错误 4031 的预设操作。此条目可以指定以下行为:
响应 DBMS 错误 4031,服务器故障监视器执行的操作是重新启动。
在检测到错误时应用此条目,无论数据库和服务器故障监视器之间的连接状态如何。
检测到错误之后,数据库和服务器故障监视器之间的连接状态必须保持不变。
检测到此错误时,资源的日志文件中将显示以下消息:
共享池内存不足。 |
如果服务器故障监视器响应的错误的影响很小,则忽略错误可能比响应错误的破坏性要小。
例如,Oracle 错误 4030 的预设操作:尝试分配 num-bytes 字节时处理器内存不足的预设操作是重新启动。此 Oracle 错误表示服务器故障监视器不能分配专用堆内存。此错误的一个可能的原因是操作系统可用内存不足。如果此错误影响多个会话,重新启动数据库可能是适当的操作。但是,此错误可能不影响其他会话,因为这些会话不需要其他专用内存。在这种情况下,应考虑指定服务器故障监视器忽略错误。
下例显示了定制操作文件中的一个条目,用于忽略 DBMS 错误。
{ ERROR_TYPE=DBMS_ERROR; ERROR=4030; ACTION=none; CONNECTION_STATE=*; NEW_STATE=*; MESSAGE=""; }
此示例显示了定制操作文件中的一个条目,它用于覆盖 DBMS 错误 4030 的预设操作。此条目可以指定以下行为:
服务器故障监视器将忽略 DBMS 错误 4030。
在检测到错误时应用此条目,无论数据库和服务器故障监视器之间的连接状态如何。
检测到错误之后,数据库和服务器故障监视器之间的连接状态必须保持不变。
检测到此错误时,资源的日志文件中不显示附加消息。
Oracle 软件在由 Alert_log_file 扩展特性标识的文件中记录警报。服务器故障监视器将扫描此文件并执行响应警报(已为其定义了操作)的操作。
预设了操作的日志警报在表 B–2 中列出。更改对日志警报的响应,以更改预设操作或定义服务器故障监视器响应的新警报。
要更改对日志警报的响应,请在定制操作文件中创建一个条目,其中的关键字设置如下:
将 ERROR_TYPE 设置为 SCAN_LOG。
将 ERROR 设置为被引用的正规表达式,该表达式标识 Oracle 已记录到 Oracle 警报日志文件的错误消息中的一个字符串。
将 ACTION 设置为所需的操作。
服务器故障监视器按条目的发生顺序处理定制操作文件中的条目。仅处理与日志警报相匹配的第一个条目。以后匹配的条目都被忽略。如果您要使用正规表达式为若干个日志警报指定操作,请确保在多个常规条目之前存在多个特定条目。在常规条目之后发生的特定条目可能被忽略。
例如,定制操作文件可能为由正规表达式 ORA-65 和 ORA-6 标识的错误定义不同的操作。要确保包含正规表达式 ORA-65 的条目不被忽略,请确保在包含正规表达式 ORA-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。
为便于调试,请指定一个表示超时探测的序列号的消息。
下例显示了定制操作文件中的条目,用于将连续超时探测的最大数目增加到五。
{ 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."; }
此例显示了定制操作文件中的条目,用于将连续超时探测的最大数目增加到五。这些条目指定以下性能:
服务器故障监视器忽略第二个连续超时探测至第四个连续超时探测。
响应第五个连续超时探测,服务器故障监视器执行的操作是重新启动。
在发生超时时应用这些条目,无论数据库和服务器故障监视器之间的连接状态如何。
发生超时后,数据库和服务器故障监视器之间的连接状态必须保持不变。
在发生第二个连续超时探测至第四个连续超时探测时,资源日志文件中将显示以下形式的消息:
已发生超时 #number。 |
在发生第五个连续超时探测时,资源日志文件中将显示以下消息:
已发生超时 #5。正在重新启动。 |