

# 诊断 RDS for Oracle 数据库实例的问题
<a name="Appendix.Oracle.CommonDBATasks.Diagnostics"></a>

Oracle 数据库包括一个故障诊断基础设施，可用于调查数据库问题。在 Oracle 术语中，*问题* 是严重错误，如代码错误或数据损坏。*事件* 是指问题的发生。如果同一错误发生三次，则基础设施会显示此问题的三个事件。有关更多信息，请参阅 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 命令行工具。例如，您可以使用此工具调查问题并打包诊断数据。*事件包* 包括引用特定问题的一个或所有事件的诊断数据。您可以将事件包（作为 .zip 文件实现）上传到 Oracle 支持部门。

为了提供托管服务体验，Amazon RDS 未向 Shell 提供对于 ADRCI 的访问权限。要为 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`  |  number  |  有效的事件 ID 或 Null   |  Null  |  否  |  如果值为 Null，函数将显示所有事件。如果值不为 Null 并且表示有效的事件 ID，则函数将显示指定的事件。  | 
|  `problem_id`  |  number  |  有效的问题 ID 或 Null  |  Null  |  否  |  如果值为 Null，则函数显示所有问题。如果该值不为 Null 并表示有效的问题 ID，则函数将显示指定的问题。  | 
|  `last`  |  number  |  大于 0 或 Null 的有效整数  |  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 |  `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`。输出是一个 .zip 文件，您可以将其提供给 Oracle 支持部门。

此函数使用以下常见参数：
+ `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)。