Oracle 数据库日志文件 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Oracle 数据库日志文件

可以使用 Amazon RDS 控制台或 API 访问 Oracle 警报日志、审核文件和跟踪文件。有关查看、下载和监视基于文件的数据库日志的更多信息,请参阅 监控 Amazon RDS 日志文件

提供的 Oracle 审核文件是标准 Oracle 审核文件。Amazon RDS 支持 Oracle 精细审核(FGA)功能。但是,日志访问不提供对存储在 SYS.FGA_LOG$ 表中并且可通过 DBA_FGA_AUDIT_TRAIL 视图访问的 FGA 事件的访问权限。

DescribeDBLogFiles API 操作列出可用于数据库实例的 Oracle 日志文件,该操作会忽略 MaxRecords 参数,最多返回 1000 个记录。该调用返回 LastWritten 作为 POSIX 日期(单位:毫秒)。

保留计划

如果日志文件变得非常大,则 Oracle 数据库引擎可能会轮换这些文件。要保留审核文件或跟踪文件,请下载这些文件。如果您将文件存储在本地,则可以降低 Amazon RDS 存储成本并为您的数据留出更多空间。

下表显示了 Amazon RDS 上的 Oracle 警报日志、审计文件和跟踪文件的保留计划。

日志类型 保留计划

警报日志

文本警报日志每天轮换,并具有由 Amazon RDS 管理的 30 天保留期。XML 警报日志至少保留七天。可以使用 ALERTLOG 视图访问此日志。

审核文件

审核文件默认的保留期为七天。Amazon RDS 可能会删除超过七天的审核文件。

跟踪文件

跟踪文件默认的保留期为七天。Amazon RDS 可能会删除超过七天的跟踪文件。

侦听器日志

侦听器日志默认的保留期为七天。Amazon RDS 可能会删除超过 7 天的侦听器日志。

注意

审核文件和跟踪文件共享相同的保留配置。

使用 Oracle 跟踪文件

下面介绍用于创建、刷新、访问和删除跟踪文件的 Amazon RDS 过程。

列出文件

可以使用两个过程中的任意一个过程来允许访问 background_dump_dest 路径中的任意文件。第一个过程可刷新视图(其中包含当前 background_dump_dest 中所有文件的列表)。

EXEC rdsadmin.manage_tracefiles.refresh_tracefile_listing;

刷新视图后,请查询以下视图来访问结果。

SELECT * FROM rdsadmin.tracefile_listing;

上述过程的替代方法是,使用 FROM table 以类似表的格式流式处理非关系数据以列出数据库目录内容。

SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('BDUMP'));

下面的查询显示日志文件的文本。

SELECT text FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP','alert_dbname.log.date'));

在只读副本上,通过查询 V$DATABASE.DB_UNIQUE_NAME 获取 BDUMP 目录的名称。如果唯一名称为 DATABASE_B,则 BDUMP 目录为 BDUMP_B。以下示例查询副本上的 BDUMP 名称,然后使用此名称查询 alert_DATABASE.log.2020-06-23 的内容。

SELECT 'BDUMP' || (SELECT regexp_replace(DB_UNIQUE_NAME,'.*(_[A-Z])', '\1') FROM V$DATABASE) AS BDUMP_VARIABLE FROM DUAL; BDUMP_VARIABLE -------------- BDUMP_B SELECT TEXT FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP_B','alert_DATABASE.log.2020-06-23'));

生成跟踪文件并跟踪会话

由于没有任何 ALTER SESSION 限制,Oracle 中用于生成跟踪文件的许多标准方法对于 Amazon RDS 数据库实例仍然可用。为需要更大访问权限的跟踪文件提供了以下程序。

Oracle 方法 Amazon RDS 方法

oradebug hanganalyze 3

EXEC rdsadmin.manage_tracefiles.hanganalyze;

oradebug dump systemstate 266

EXEC rdsadmin.manage_tracefiles.dump_systemstate;

您可以使用很多标准方法来跟踪连接到 Amazon RDS 中的 Oracle 数据库实例的各个会话。要启用对会话的跟踪,您可以运行 Oracle 提供的 PL/SQL 程序包中的子程序,如 DBMS_SESSIONDBMS_MONITOR。有关更多信息,请参阅 Oracle 文档中的启用会话跟踪

检索跟踪文件

对于 Amazon RDS 管理的外部表,您可以使用标准 SQL 查询检索 background_dump_dest 中的任何跟踪文件。要使用此方法,必须执行此程序以将此表的位置设置到指定跟踪文件。

例如,可以使用前面提到的 rdsadmin.tracefile_listing 视图列出系统上的所有跟踪文件。然后,可以使用以下过程设置 tracefile_table 视图,从而使视图指向预定的跟踪文件。

EXEC rdsadmin.manage_tracefiles.set_tracefile_table_location('CUST01_ora_3260_SYSTEMSTATE.trc');

以下示例在当前架构中创建了一个外部表,并将表位置设定在提供的文件中。可以使用 SQL 查询将内容检索到本地文件中。

SPOOL /tmp/tracefile.txt SELECT * FROM tracefile_table; SPOOL OFF;

清除跟踪文件

跟踪文件会累积并占用磁盘空间。Amazon RDS 默认清除跟踪文件和超过 7 天的日志文件。可以使用 show_configuration 过程查看和设置跟踪文件保留期。您应运行命令 SET SERVEROUTPUT ON,以便查看配置结果。

以下示例显示了当前的跟踪文件保留期,然后设置了新的跟踪文件保留期。

# Show the current tracefile retention SQL> EXEC rdsadmin.rdsadmin_util.show_configuration; NAME:tracefile retention VALUE:10080 DESCRIPTION:tracefile expiration specifies the duration in minutes before tracefiles in bdump are automatically deleted. # Set the tracefile retention to 24 hours: SQL> EXEC rdsadmin.rdsadmin_util.set_configuration('tracefile retention',1440); SQL> commit; #show the new tracefile retention SQL> EXEC rdsadmin.rdsadmin_util.show_configuration; NAME:tracefile retention VALUE:1440 DESCRIPTION:tracefile expiration specifies the duration in minutes before tracefiles in bdump are automatically deleted.

除定期清除过程外,您可以从 background_dump_dest 中手动删除文件。以下示例显示了如何清除保留时间已超过五分钟的所有文件。

EXEC rdsadmin.manage_tracefiles.purge_tracefiles(5);

您还可清除与特定模式匹配的所有文件(如果这样做,则不要包括 .trc 等文件扩展名)。以下示例介绍如何清除以 SCHPOC1_ora_5935 开头的所有文件。

EXEC rdsadmin.manage_tracefiles.purge_tracefiles('SCHPOC1_ora_5935');

将 Oracle 日志发布到 Amazon CloudWatch Logs

您可以配置 RDS for Oracle 数据库实例,以将日志数据发布到 Amazon CloudWatch Logs 中的日志组。利用 CloudWatch Logs,可以对日志数据进行分析并使用 CloudWatch 创建警报和查看指标。您可以使用 CloudWatch Logs 在高持久性存储中存储日志记录。

Amazon RDS 将每个 Oracle 数据库日志作为日志组中的单独数据库流进行发布。例如,如果将导出功能配置为包括审核日志,则审核数据将存储在 /aws/rds/instance/my_instance/audit 日志组中的审核日志流中。下表总结了 RDS for Oracle 将日志发布到 Amazon CloudWatch Logs 的要求。

日志名称 要求 默认

提醒日志

无。您无法禁用此日志。

已启用

跟踪日志

trace_enabled 参数设置 TRUE 或将其保留为默认值。

TRUE

审计日志

audit_trail 参数设置为 OSXMLEXTENDED

NONE

侦听器日志

无。您无法禁用此日志。

已启用

Oracle Management Agent 日志

无。您无法禁用此日志。

已启用

此 Oracle Management Agent 日志由下表中显示的日志组组成。

日志名称 CloudWatch 日志组
emctl.log oemagent-emctl
emdctlj.log oemagent-emdctlj
gcagent.log oemagent-gcagent
gcagent_errors.log oemagent-gcagent-errors
emagent.nohup oemagent-emagent-nohup
secure.log oemagent-secure

有关详细信息,请参阅 Oracle 文档中的 查找 Management Agent 日志和跟踪文件

从Amazon Web Services Management Console将 Oracle 数据库日志发布到 CloudWatch Logs
  1. 通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Databases (数据库),然后选择要修改的数据库实例。

  3. 选择修改

  4. Log exports (日志导出) 部分中,选择要开始发布到 CloudWatch Logs 的日志。

  5. 选择继续,然后选择摘要页面上的修改数据库实例

要发布 Oracle 日志,您可以使用具有以下参数的 modify-db-instance 命令:

  • --db-instance-identifier

  • --cloudwatch-logs-export-configuration

注意

--cloudwatch-logs-export-configuration 选项进行的更改始终立即应用于数据库实例。因此,--apply-immediately--no-apply-immediately 选项没有影响。

您还可以使用以下命令来发布 Oracle 日志:

以下示例将创建一个启用了 CloudWatch Logs 发布的 Oracle 数据库实例。--cloudwatch-logs-export-configuration 值是 JSON 字符串数组。这些字符串可以是 alertauditlistenertrace 的任意组合。

对于 Linux、macOS 或 Unix:

aws rds create-db-instance \ --db-instance-identifier mydbinstance \ --cloudwatch-logs-export-configuration '["trace","audit","alert","listener","oemagent"]' \ --db-instance-class db.m5.large \ --allocated-storage 20 \ --engine oracle-ee \ --engine-version 12.1.0.2.v18 \ --license-model bring-your-own-license \ --master-username myadmin \ --manage-master-user-password

对于 Windows:

aws rds create-db-instance ^ --db-instance-identifier mydbinstance ^ --cloudwatch-logs-export-configuration trace alert audit listener oemagent ^ --db-instance-class db.m5.large ^ --allocated-storage 20 ^ --engine oracle-ee ^ --engine-version 12.1.0.2.v18 ^ --license-model bring-your-own-license ^ --master-username myadmin ^ --manage-master-user-password

以下示例修改现有的 Oracle 数据库实例以将日志文件发布到 CloudWatch Logs。--cloudwatch-logs-export-configuration 值是 JSON 对象。此对象的键是 EnableLogTypes,其值是具有 alertauditlistenertrace 的任意组合的字符串的数组。

对于 Linux、macOS 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["trace","alert","audit","listener","oemagent"]}'

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --cloudwatch-logs-export-configuration EnableLogTypes=\"trace\",\"alert\",\"audit\",\"listener\",\"oemagent\"

以下示例修改现有的 Oracle 数据库实例以禁用将审核和侦听器日志文件发布到 CloudWatch Logs 的功能。--cloudwatch-logs-export-configuration 值是 JSON 对象。此对象的键是 DisableLogTypes,其值是具有 alertauditlistenertrace 的任意组合的字符串的数组。

对于 Linux、macOS 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --cloudwatch-logs-export-configuration '{"DisableLogTypes":["audit","listener"]}'

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --cloudwatch-logs-export-configuration DisableLogTypes=\"audit\",\"listener\"

您可以使用 RDS API 来发布 Oracle 数据库日志。您可以使用以下参数调用 ModifyDBInstance 操作:

  • DBInstanceIdentifier

  • CloudwatchLogsExportConfiguration

注意

CloudwatchLogsExportConfiguration 参数进行的更改始终立即应用于数据库实例。因此,ApplyImmediately 参数没有影响。

您还可以通过调用以下 RDS API 操作来发布 Oracle 日志:

使用以下参数运行这些 RDS API 操作之一:

  • DBInstanceIdentifier

  • EnableCloudwatchLogsExports

  • Engine

  • DBInstanceClass

根据您运行的 RDS 操作,可能需要其他参数。

以前用于访问警报日志和侦听器日志的方法

您可以使用 Amazon RDS 控制台查看警告日志。您还可以使用以下 SQL 语句访问警报日志。

SELECT message_text FROM alertlog;

listenerlog 视图包含 Oracle 数据库 12.1.0.2 版本及更早版本的条目。要访问这些数据库版本的侦听器日志,请使用以下查询。

SELECT message_text FROM listenerlog;

对于 Oracle 数据库 12.2.0.1 版本及更高版本,请使用 Amazon CloudWatch Logs 访问侦听器日志。

注意

当警报和侦听器日志超过 10MB 时,Oracle 会轮换这些日志,此时它们不会显示在 Amazon RDS 视图中。