設定和取消設定系統診斷事件 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定和取消設定系統診斷事件

若要在工作階段層級設定和取消設定診斷事件,您可以使用 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 陳述式來設定事件。此 ALTER SYSTEM 陳述式並未記錄在 Oracle 資料庫文件中。某些系統診斷事件可能會產生大量的追蹤資訊、造成爭用或影響資料庫可用性。建議您在非生產資料庫中測試特定的診斷事件,並且只在 Oracle Support 的指導下,在生產資料庫中設定事件。

列出允許的系統診斷事件

若要列出您可以設定的系統事件,請使用 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

數字

系統事件編號。該值必須是由 list_allowed_system_events 報告的其中一個事件編號。

p_level

數字

事件層級。如需不同層級值的說明,請參閱 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'

下列範例會在層級 3 設定事件 942,並在層級 10 設定事件 10442。包括範例輸出。

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

數字

系統事件編號。該值必須是由 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.