

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

# 設定和取消設定系統診斷事件
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents"></a>

若要在工作階段層級設定和取消設定診斷事件，您可以使用 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](https://docs.aws.amazon.com/AmazonRDS/latest/OracleReleaseNotes/oracle-version-19-0.html#oracle-version-RU-RUR.19.0.0.0.ru-2020-10.rur-2020-10.r1)。

**重要**  
在內部，`rdsadmin.rdsadmin_util` 套件會使用 `ALTER SYSTEM SET EVENTS` 陳述式來設定事件。此 `ALTER SYSTEM` 陳述式並未記錄在 Oracle 資料庫文件中。某些系統診斷事件可能會產生大量的追蹤資訊、造成爭用或影響資料庫可用性。建議您在非生產資料庫中測試特定的診斷事件，並且只在 Oracle Support 的指導下，在生產資料庫中設定事件。

## 列出允許的系統診斷事件
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.listing"></a>

若要列出您可以設定的系統事件，請使用 Amazon RDS Procedure (程序)`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`。

## 設定系統診斷事件
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.setting"></a>

若要設定系統事件，請使用 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` 陳述式：
+ 自動決定事件類型 (`context` 或 `errorstack`)。
+ 表單 `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.
```

## 列出已設定的系統診斷事件
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.listing-set"></a>

若要列出目前設定的系統事件，請使用 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.
```

## 取消設定系統診斷事件
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.unsetting"></a>

若要取消設定系統事件，請使用 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.
```