设置和取消设置系统诊断事件
要在会话级别设置和取消设置诊断事件,可以使用 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
过程接受以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
number |
— |
是 |
系统事件编号。此值必须是 |
|
number |
— |
是 |
活动级别。有关不同级别值的说明,请参阅 Oracle 数据库文档或 Oracle 支持。 |
过程 set_system_event
根据以下原则构造和运行所需的 ALTER SYSTEM SET EVENTS
语句:
-
事件类型(
context
或errorstack
)是自动确定的。 -
ALTER SYSTEM SET EVENTS '
表单中的语句设置上下文事件。此符号等同于event
LEVELevent_level
'ALTER SYSTEM SET EVENTS '
。event
TRACE NAME CONTEXT FOREVER, LEVELevent_level
' -
ALTER SYSTEM SET EVENTS '
表单中的语句设置错误堆栈事件。此符号等同于event
ERRORSTACK (event_level
)'ALTER SYSTEM SET EVENTS '
。event
TRACE NAME ERRORSTACK LEVELevent_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
过程接受以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
number |
— |
是 |
系统事件编号。此值必须是 |
以下示例取消设置事件 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.