服务器故障监视器响应每个 DBMS 错误而执行的操作已被预设,如表 A–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。
在检测到错误时应用此项,无论数据库和服务器故障监视器之间的连接状态如何。
检测到错误之后,数据库和服务器故障监视器之间的连接状态必须保持不变。
检测到此错误时,资源的日志文件中不显示附加消息。