设置和取消设置系统诊断事件 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

设置和取消设置系统诊断事件

要在会话级别设置和取消设置诊断事件,可以使用 Oracle SQL 语句 ALTER SESSION SET EVENTS。但是,要在系统级别设置事件,您不能使用 Oracle SQL。相反,请使用 rdsadmin.rdsadmin_util 软件包中的系统事件过程。以下引擎版本中提供系统事件过程:

  • 所有 Oracle Database 21c 版本

  • 19.0.0.0.ru-2020-10.rur-2020-10.r1 或更高的 Oracle Database 19c 版本

    有关更多信息,请参阅《Amazon RDS for Oracle 发布说明》中的版本 19.0.0.0.ru-2020-10.rur-2020-10.r1

重要

rdsadmin.rdsadmin_util 软件包内部使用 ALTER SYSTEM SET EVENTS 语句设置事件。Oracle 数据库文档中没有记录此 ALTER SYSTEM 语句。某些系统诊断事件可能会生成大量跟踪信息、引起争用或影响数据库可用性。我们建议您在非生产数据库中测试特定的诊断事件,并且在 Oracle 支持的指导下仅在生产数据库中设置事件。

列出允许的系统诊断事件

要列出可以设置的系统事件,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.list_allowed_system_events。此过程不接受任何参数。

以下示例列出了您可以设置的所有系统事件。

SET SERVEROUTPUT ON EXEC rdsadmin.rdsadmin_util.list_allowed_system_events;

以下示例输出列出了事件编号及其描述。使用 Amazon RDS 过程 set_system_event 来设置这些事件并使用 unset_system_event 来取消设置它们。

604 - error occurred at recursive SQL level 942 - table or view does not exist 1401 - inserted value too large for column 1403 - no data found 1410 - invalid ROWID 1422 - exact fetch returns more than requested number of rows 1426 - numeric overflow 1427 - single-row subquery returns more than one row 1476 - divisor is equal to zero 1483 - invalid length for DATE or NUMBER bind variable 1489 - result of string concatenation is too long 1652 - unable to extend temp segment by in tablespace 1858 - a non-numeric character was found where a numeric was expected 4031 - unable to allocate bytes of shared memory ("","","","") 6502 - PL/SQL: numeric or value error 10027 - Specify Deadlock Trace Information to be Dumped 10046 - enable SQL statement timing 10053 - CBO Enable optimizer trace 10173 - Dynamic Sampling time-out error 10442 - enable trace of kst for ORA-01555 diagnostics 12008 - error in materialized view refresh path 12012 - error on auto execute of job 12504 - TNS:listener was not given the SERVICE_NAME in CONNECT_DATA 14400 - inserted partition key does not map to any partition 31693 - Table data object failed to load/unload and is being skipped due to error:
注意

允许的系统事件列表可能会随着时间的推移而变化。要确保您拥有最新的符合条件的活动列表,请使用 rdsadmin.rdsadmin_util.list_allowed_system_events

设置系统诊断事件

要设置系统事件,请使用Amazon RDS过程rdsadmin.rdsadmin_util.set_system_event。您只能设置 rdsadmin.rdsadmin_util.list_allowed_system_events 输出中列出的事件。set_system_event 过程接受以下参数。

参数名称 数据类型 默认值 必需 描述

p_event

number

系统事件编号。此值必须是 list_allowed_system_events 报告的事件编号之一。

p_level

number

活动级别。有关不同级别值的说明,请参阅 Oracle 数据库文档或 Oracle 支持。

过程 set_system_event 根据以下原则构造和运行所需的 ALTER SYSTEM SET EVENTS 语句:

  • 事件类型(contexterrorstack)是自动确定的。

  • ALTER SYSTEM SET EVENTS 'event LEVEL event_level' 表单中的语句设置上下文事件。此符号等同于 ALTER SYSTEM SET EVENTS 'event TRACE NAME CONTEXT FOREVER, LEVEL event_level'

  • ALTER SYSTEM SET EVENTS 'event ERRORSTACK (event_level)' 表单中的语句设置错误堆栈事件。此符号等同于 ALTER SYSTEM SET EVENTS 'event TRACE NAME ERRORSTACK LEVEL event_level'

以下示例将事件 942 设置为级别 3,将事件 10442 设置为级别 10。示例输出包括在内。

SQL> SET SERVEROUTPUT ON SQL> EXEC rdsadmin.rdsadmin_util.set_system_event(942,3); Setting system event 942 with: alter system set events '942 errorstack (3)' PL/SQL procedure successfully completed. SQL> EXEC rdsadmin.rdsadmin_util.set_system_event(10442,10); Setting system event 10442 with: alter system set events '10442 level 10' PL/SQL procedure successfully completed.

列出设置的系统诊断事件

要列出当前设置的系统事件,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.list_set_system_events。此过程仅报告 set_system_event 在系统级别设置的事件。

以下示例列出了活动的系统事件。

SET SERVEROUTPUT ON EXEC rdsadmin.rdsadmin_util.list_set_system_events;

以下示例输出显示了事件列表、事件类型、当前设置事件的级别以及设置事件的时间。

942 errorstack (3) - set at 2020-11-03 11:42:27 10442 level 10 - set at 2020-11-03 11:42:41 PL/SQL procedure successfully completed.

取消设置系统诊断事件

要取消设置系统事件,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.unset_system_event。您只能取消设置 rdsadmin.rdsadmin_util.list_allowed_system_events 输出中列出的事件。unset_system_event 过程接受以下参数。

参数名称 数据类型 默认值 必需 描述

p_event

number

系统事件编号。此值必须是 list_allowed_system_events 报告的事件编号之一。

以下示例取消设置事件 942 和 10442。示例输出包括在内。

SQL> SET SERVEROUTPUT ON SQL> EXEC rdsadmin.rdsadmin_util.unset_system_event(942); Unsetting system event 942 with: alter system set events '942 off' PL/SQL procedure successfully completed. SQL> EXEC rdsadmin.rdsadmin_util.unset_system_event(10442); Unsetting system event 10442 with: alter system set events '10442 off' PL/SQL procedure successfully completed.