View a markdown version of this page

诊断 RDS for Oracle 数据库实例的问题 - Amazon Relational Database Service

诊断 RDS for Oracle 数据库实例的问题

Oracle 数据库包括一个故障诊断基础设施,可用于调查数据库问题。在 Oracle 术语中,问题 是严重错误,如代码错误或数据损坏。事件 是指问题的发生。如果同一错误发生三次,则基础设施会显示此问题的三个事件。有关更多信息,请参阅 Oracle 数据库文档中的诊断和解决问题 。

自动诊断存储库命令解释器 (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 目录中。您可以按照下载数据库日志文件中描述的过程下载日志文件。

诊断过程的常见参数

要执行诊断任务,请使用 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,则函数显示指定的数字。

列出事件

要列出 Oracle 的诊断事件,请使用 Amazon RDS 函数 rdsadmin.rdsadmin_adrci_util.list_adrci_incidents。您可以在基本模式或详细模式下列出事件。默认情况下,函数会列出 50 个最近的事件。

此函数使用以下常见参数:

  • incident_id

  • problem_id

  • last

如果您指定 incident_id 和 problem_id,则 incident_id 覆盖 problem_id。有关更多信息,请参阅 诊断过程的常见参数。

此函数使用以下附加参数。

参数名称 数据类型 有效值 默认值 必需 描述

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.

列出问题

要列出 Oracle 的诊断问题,请使用 Amazon RDS 函数 rdsadmin.rdsadmin_adrci_util.list_adrci_problems。

默认情况下,函数列出 50 个最近的问题。

此函数使用公用参数 problem_id 和 last。有关更多信息,请参阅 诊断过程的常见参数。

要获取所有问题的任务 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.

创建事件包

您可以使用 Amazon RDS 函数创建事件包 rdsadmin.rdsadmin_adrci_util.create_adrci_package。输出是一个 .zip 文件,您可以将其提供给 Oracle 支持部门。

此函数使用以下常见参数:

  • problem_id

  • incident_id

确保指定前面的参数之一。如果指定了两个参数,则 incident_id 覆盖 problem_id。有关更多信息,请参阅“诊断过程的常见参数”。

要为特定事件创建包,请使用 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.

还可以下载日志文件。有关更多信息,请参阅 下载数据库日志文件。

显示跟踪文件

您可以使用 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_ORCL.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.

还可以下载日志文件。有关更多信息,请参阅 下载数据库日志文件。