执行 Oracle 数据库实例的常见诊断任务 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

执行 Oracle 数据库实例的常见诊断任务

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

自动诊断存储库命令解释器 (ADRCI) 实用程序是用于管理诊断数据的 Oracle 命令行工具。例如,您可以使用此工具调查问题并打包诊断数据。事件包 包括引用特定问题的一个或所有事件的诊断数据。您可以将事件包(作为 .zip 文件实现)上传到 Oracle 支持部门。

为了提供托管服务体验,Amazon RDS 未向 Shell 提供对于 ADRCI 的访问权限。要为 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_idproblem_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_idlast。有关更多信息,请参阅诊断过程的常见参数

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

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