

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

# 診斷 RDS for Oracle 資料庫執行個體的問題
<a name="Appendix.Oracle.CommonDBATasks.Diagnostics"></a>

Oracle 資料庫包含可用來調查資料庫問題的故障性基礎架構。在 Oracle 術語中，*problem (問題)* 是嚴重錯誤，例如程式碼錯誤或資料損毀。*Incident (事件)* 則是發生問題。如果同樣的錯誤發生三次，則基礎結構會顯示這個問題的三個事件。如需詳細資訊，請參閱 Oracle 資料庫文件中的[診斷和解決問題](https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/diagnosing-and-resolving-problems.html#GUID-8DEB1BE0-8FB9-4FB2-A19A-17CF6F5791C3)。

自動診斷儲存器命令解譯器 (ADRCI) 公用程式是 Oracle 命令列工具，您可以用來管理診斷資料。例如，您可以使用這個工具來調查問題，並封裝診斷資料。*incident package (事件套件)* 包含事件或參考特定問題之所有事件的診斷資料。您可以將事件套件 (實作為 .zip 檔案) 上傳至 Oracle 支援。

為了提供受管的服務體驗，Amazon RDS 並不會提供 ADRCI 的 Shell 存取權。若要針對 RDS for Oracle 資料庫執行個體執行診斷任務，請使用 Amazon RDS 套件 `rdsadmin.rdsadmin_adrci_util`。

透過使用 `rdsadmin_adrci_util` 中的函數，您可以列出並封裝問題和事件，也可以顯示追蹤檔案。所有函數都會傳回工作 ID。此 ID 構成包含 ADRCI 輸出的記錄檔名稱的一部分，如 `dbtask-task_id.log` 中所示。記錄檔位於 BDUMP 目錄中。您可以藉由遵循 [下載資料庫日誌檔案](USER_LogAccess.Procedural.Downloading.md) 中所述的程序，下載日誌檔案。

## 診斷程序的常見參數
<a name="Appendix.Oracle.CommonDBATasks.CommonDiagParameters"></a>

若要執行診斷工作，請使用 Amazon RDS 封裝 `rdsadmin.rdsadmin_adrci_util` 中的函數。以下即為該套件的常見參數。


****  

| 參數名稱 | 資料類型 | 有效值 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | --- | 
|  `incident_id`  |  數字  |  有效的事件 ID 或 null   |  Null  |  否  |  如果值為 null，則函數會顯示所有事件。如果值不是 null 且代表有效的事件 ID，則函數會顯示指定的事件。  | 
|  `problem_id`  |  數字  |  有效的問題 ID 或 null  |  Null  |  否  |  如果該值為 null，該函數會顯示所有問題。如果值不為 null 且代表有效的問題 ID，則函數會顯示指定的問題。  | 
|  `last`  |  數字  |  大於 0 或 null 的有效整數  |  Null  |  否  |  如果該值為空，則該函數最多顯示 50 個項目。如果該值不為 null，函數會顯示指定的數字。  | 

## 列出事件
<a name="Appendix.Oracle.CommonDBATasks.Incidents"></a>

若要列出 Oracle 的診斷事件，請使用此 Amazon RDS 函數 `rdsadmin.rdsadmin_adrci_util.list_adrci_incidents`。您可以在基本或詳細模式中列出事件。依預設，此函數會列出最近 50 個事件。

此函數使用下列一般參數：
+  `incident_id`
+  `problem_id`
+  `last`

如果您指定 `incident_id` 和 `problem_id`，則 `incident_id` 會覆寫 `problem_id`。如需詳細資訊，請參閱[診斷程序的常見參數](#Appendix.Oracle.CommonDBATasks.CommonDiagParameters)。

此函數使用以下附加參數。


****  

| 參數名稱 | 資料類型 | 有效值 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | --- | 
|  `detail`  |  布林值  | TRUE 或 FALSE \$1 |  `FALSE`  |  否  |  如果 `TRUE`，該函數會以詳細模式列出事件。如果 `FALSE`，此函數會以基本模式列出事件。  | 

如要列出所有事件，請查詢不含任何引數的 `rdsadmin.rdsadmin_adrci_util.list_adrci_incidents` 函數。此查詢會傳回任務 ID。

```
SQL> SELECT rdsadmin.rdsadmin_adrci_util.list_adrci_incidents AS task_id FROM DUAL;

TASK_ID
------------------
1590786706158-3126
```

或者呼叫不含任何引數的 `rdsadmin.rdsadmin_adrci_util.list_adrci_incidents` 函數，並將輸出存放在 SQL 用戶端變數中。您可以在其他陳述式中使用變數。

```
SQL> VAR task_id VARCHAR2(80);
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.list_adrci_incidents;

PL/SQL procedure successfully completed.
```

若要讀取日誌檔案，請呼叫 Amazon RDS 程序 `rdsadmin.rds_file_util.read_text_file`。提供任務 ID 做為檔案名稱的一部分。下列輸出顯示三個事件：53523、53522 和 53521。

```
SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log'));

TEXT
-------------------------------------------------------------------------------------------------------------------------
2020-05-29 21:11:46.193 UTC [INFO ] Listing ADRCI incidents.
2020-05-29 21:11:46.256 UTC [INFO ]
ADR Home = /rdsdbdata/log/diag/rdbms/orcl_a/ORCL:
*************************************************************************
INCIDENT_ID PROBLEM_KEY                                                 CREATE_TIME
----------- ----------------------------------------------------------- ----------------------------------------
53523       ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_003 2020-05-29 20:15:20.928000 +00:00
53522       ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_002 2020-05-29 20:15:15.247000 +00:00
53521       ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_001 2020-05-29 20:15:06.047000 +00:00
3 rows fetched


2020-05-29 21:11:46.256 UTC [INFO ] The ADRCI incidents were successfully listed.
2020-05-29 21:11:46.256 UTC [INFO ] The task finished successfully.

14 rows selected.
```

若要列出特定事件，請使用 `incident_id` 參數指定其 ID。在下列範例中，您只查詢事件 53523 的日誌檔案。

```
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.list_adrci_incidents(incident_id=>53523);

PL/SQL procedure successfully completed.

SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log'));

TEXT
------------------------------------------------------------------------------------------------------------------
2020-05-29 21:15:25.358 UTC [INFO ] Listing ADRCI incidents.
2020-05-29 21:15:25.426 UTC [INFO ]
ADR Home = /rdsdbdata/log/diag/rdbms/orcl_a/ORCL:
*************************************************************************
INCIDENT_ID          PROBLEM_KEY                                                 CREATE_TIME
-------------------- ----------------------------------------------------------- ---------------------------------
53523                ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_003 2020-05-29 20:15:20.928000 +00:00
1 rows fetched


2020-05-29 21:15:25.427 UTC [INFO ] The ADRCI incidents were successfully listed.
2020-05-29 21:15:25.427 UTC [INFO ] The task finished successfully.

12 rows selected.
```

## 列出問題
<a name="Appendix.Oracle.CommonDBATasks.Problems"></a>

若要列出 Oracle 的診斷問題，請使用 Amazon RDS 函數 `rdsadmin.rdsadmin_adrci_util.list_adrci_problems`。

依預設，該函數會列出 50 個最近的問題。

此函數使用一般參數`problem_id` 和 `last`。如需詳細資訊，請參閱[診斷程序的常見參數](#Appendix.Oracle.CommonDBATasks.CommonDiagParameters)。

若要取得所有問題的任務 ID，請呼叫不含任何引數的 `rdsadmin.rdsadmin_adrci_util.list_adrci_problems` 函數，並將輸出存放在 SQL 用戶端變數中。

```
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.list_adrci_problems;

PL/SQL procedure successfully completed.
```

若要讀取日誌檔案，請呼叫 `rdsadmin.rds_file_util.read_text_file` 函數，並提供任務 ID 做為檔案名稱的一部分。在下列輸出中，日誌檔案會顯示三個問題：1、2 和 3。

```
SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log'));

TEXT
----------------------------------------------------------------------------------------------------------------------
2020-05-29 21:18:50.764 UTC [INFO ] Listing ADRCI problems.
2020-05-29 21:18:50.829 UTC [INFO ]
ADR Home = /rdsdbdata/log/diag/rdbms/orcl_a/ORCL:
*************************************************************************
PROBLEM_ID   PROBLEM_KEY                                                 LAST_INCIDENT        LASTINC_TIME
---------- ----------------------------------------------------------- ------------- ---------------------------------
2          ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_003 53523         2020-05-29 20:15:20.928000 +00:00
3          ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_002 53522         2020-05-29 20:15:15.247000 +00:00
1          ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_001 53521         2020-05-29 20:15:06.047000 +00:00
3 rows fetched


2020-05-29 21:18:50.829 UTC [INFO ] The ADRCI problems were successfully listed.
2020-05-29 21:18:50.829 UTC [INFO ] The task finished successfully.

14 rows selected.
```

在下列範例中，您只列出問題 3。

```
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.list_adrci_problems(problem_id=>3);

PL/SQL procedure successfully completed.
```

若要讀取問題 3 的日誌檔案，請呼叫 `rdsadmin.rds_file_util.read_text_file`。提供任務 ID 做為檔案名稱的一部分。

```
SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log'));

TEXT
-------------------------------------------------------------------------
2020-05-29 21:19:42.533 UTC [INFO ] Listing ADRCI problems.
2020-05-29 21:19:42.599 UTC [INFO ]
ADR Home = /rdsdbdata/log/diag/rdbms/orcl_a/ORCL:
*************************************************************************
PROBLEM_ID PROBLEM_KEY                                                 LAST_INCIDENT LASTINC_TIME
---------- ----------------------------------------------------------- ------------- ---------------------------------
3          ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_002 53522         2020-05-29 20:15:15.247000 +00:00
1 rows fetched


2020-05-29 21:19:42.599 UTC [INFO ] The ADRCI problems were successfully listed.
2020-05-29 21:19:42.599 UTC [INFO ] The task finished successfully.

12 rows selected.
```

## 建立事件套件
<a name="Appendix.Oracle.CommonDBATasks.IncPackages"></a>

您可以使用該 Amazon RDS 函數 `rdsadmin.rdsadmin_adrci_util.create_adrci_package` 建立事件套件。該輸出是一個您可以提供給 Oracle 支援的 .zip 檔案。

此函數使用下列一般參數：
+ `problem_id`
+ `incident_id`

請務必指定上述其中一個參數。如果您同時指定兩個參數，則 `incident_id` 會覆寫 `problem_id`。如需更多詳細資訊，請參閱 [診斷程序的常見參數](#Appendix.Oracle.CommonDBATasks.CommonDiagParameters)。

若要為特定事件建立套件，請使用 `rdsadmin.rdsadmin_adrci_util.create_adrci_package` 參數呼叫 Amazon RDS 函數 `incident_id`。下列範例會為事件 53523 建立套件。

```
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.create_adrci_package(incident_id=>53523);

PL/SQL procedure successfully completed.
```

若要讀取日誌檔案，請呼叫 `rdsadmin.rds_file_util.read_text_file`。您可以提供任務 ID 做為檔案名稱的一部分。該輸出會顯示您產生的事件套件 `ORA700EVE_20200529212043_COM_1.zip`。

```
SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log'));

TEXT
--------------------------------------------------------------------------------------------------------------------------------------
2020-05-29 21:20:43.031 UTC [INFO ] The ADRCI package is being created.
2020-05-29 21:20:47.641 UTC [INFO ] Generated package 1 in file /rdsdbdata/log/trace/ORA700EVE_20200529212043_COM_1.zip, mode complete
2020-05-29 21:20:47.642 UTC [INFO ] The ADRCI package was successfully created.
2020-05-29 21:20:47.642 UTC [INFO ] The task finished successfully.
```

若要封裝特定問題的診斷資料，請使用 `problem_id` 參數指定其 ID。在下列範例中，您只封裝問題 3 的資料。

```
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.create_adrci_package(problem_id=>3);

PL/SQL procedure successfully completed.
```

若要讀取任務輸出，請呼叫 `rdsadmin.rds_file_util.read_text_file`，提供任務 ID 做為檔案名稱的一部分。該輸出會顯示您產生的事件套件 `ORA700EVE_20200529212111_COM_1.zip`。

```
SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log'));

TEXT
------------------------------------------------------------------------------------------------------------------------------------------------------------
2020-05-29 21:21:11.050 UTC [INFO ] The ADRCI package is being created.
2020-05-29 21:21:15.646 UTC [INFO ] Generated package 2 in file /rdsdbdata/log/trace/ORA700EVE_20200529212111_COM_1.zip, mode complete
2020-05-29 21:21:15.646 UTC [INFO ] The ADRCI package was successfully created.
2020-05-29 21:21:15.646 UTC [INFO ] The task finished successfully.
```

您也可以下載日誌檔案。如需詳細資訊，請參閱[下載資料庫日誌檔案](USER_LogAccess.Procedural.Downloading.md)。

## 顯示追蹤檔案
<a name="Appendix.Oracle.CommonDBATasks.ShowTrace"></a>

您可以使用 Amazon RDS 函數 `rdsadmin.rdsadmin_adrci_util.show_adrci_tracefile`，列出追蹤目錄下的追蹤檔案，以及目前 ADR 主目錄下所有事件目錄下的追蹤檔案。您也可以顯示追蹤檔案和事件追蹤檔案的內容。

此函數使用下列參數。


****  

| 參數名稱 | 資料類型 | 有效值 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | --- | 
|  `filename`  |  varchar2  | 有效的追蹤檔案名稱 |  Null  |  否  |  如果值為 null，函數會顯示所有追蹤檔案。如果它不是 null，該函數顯示指定的檔案。  | 

若要顯示追蹤檔案，請呼叫 Amazon RDS 函數 `rdsadmin.rdsadmin_adrci_util.show_adrci_tracefile`。

```
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.show_adrci_tracefile;

PL/SQL procedure successfully completed.
```

若要列出追蹤檔案名稱，請呼叫 Amazon RDS 程序 `rdsadmin.rds_file_util.read_text_file`，提供任務 ID 做為檔案名稱的一部分。

```
SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log')) WHERE TEXT LIKE '%/alert_%';

TEXT
---------------------------------------------------------------
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-28
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-27
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-26
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-25
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-24
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-23
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-22
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-21
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log

9 rows selected.
```

在下列範例中，您會產生 `alert_ORCL.log` 的輸出。

```
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.show_adrci_tracefile('diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log');

PL/SQL procedure successfully completed.
```

若要讀取日誌檔案，請呼叫 `rdsadmin.rds_file_util.read_text_file`。提供任務 ID 做為檔案名稱的一部分。該輸出會顯示 alert\$1ORCL.log 的前 10 行。

```
SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log')) WHERE ROWNUM <= 10;

TEXT
-----------------------------------------------------------------------------------------
2020-05-29 21:24:02.083 UTC [INFO ] The trace files are being displayed.
2020-05-29 21:24:02.128 UTC [INFO ] Thu May 28 23:59:10 2020
Thread 1 advanced to log sequence 2048 (LGWR switch)
  Current log# 3 seq# 2048 mem# 0: /rdsdbdata/db/ORCL_A/onlinelog/o1_mf_3_hbl2p8xs_.log
Thu May 28 23:59:10 2020
Archived Log entry 2037 added for thread 1 sequence 2047 ID 0x5d62ce43 dest 1:
Fri May 29 00:04:10 2020
Thread 1 advanced to log sequence 2049 (LGWR switch)
  Current log# 4 seq# 2049 mem# 0: /rdsdbdata/db/ORCL_A/onlinelog/o1_mf_4_hbl2qgmh_.log
Fri May 29 00:04:10 2020

10 rows selected.
```

您也可以下載日誌檔案。如需詳細資訊，請參閱[下載資料庫日誌檔案](USER_LogAccess.Procedural.Downloading.md)。