

# Amazon RDS for Oracle 数据库日志文件
<a name="USER_LogAccess.Concepts.Oracle"></a>

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

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

[https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBLogFiles.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBLogFiles.html) API 操作列出可用于数据库实例的 Oracle 日志文件，该操作会忽略 `MaxRecords` 参数，最多返回 1000 个记录。该调用返回 `LastWritten` 作为 POSIX 日期（单位：毫秒）。

**Topics**
+ [保留计划](#USER_LogAccess.Concepts.Oracle.Retention)
+ [使用 Oracle 跟踪文件](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles)
+ [将 Oracle 日志发布到 Amazon CloudWatch Logs](#USER_LogAccess.Oracle.PublishtoCloudWatchLogs)
+ [访问警报日志和侦听器日志](#USER_LogAccess.Concepts.Oracle.AlertLogAndListenerLog)

## 保留计划
<a name="USER_LogAccess.Concepts.Oracle.Retention"></a>

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

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


****  

| 日志类型 | 保留计划 | 
| --- | --- | 
|  警报日志  |   文本警报日志每天轮换，并具有由 Amazon RDS 管理的 30 天保留期。XML 警报日志至少保留七天。可以使用 `ALERTLOG` 视图访问此日志。  | 
|  审核文件  |   审核文件默认的保留期为七天。Amazon RDS 可能会删除超过七天的审核文件。  | 
|  跟踪文件  |  跟踪文件默认的保留期为七天。Amazon RDS 可能会删除超过七天的跟踪文件。  | 
|  侦听器日志  |   侦听器日志默认的保留期为七天。Amazon RDS 可能会删除超过 7 天的侦听器日志。  | 

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

## 使用 Oracle 跟踪文件
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles"></a>

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

**Topics**
+ [列出文件](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.ViewingBackgroundDumpDest)
+ [生成跟踪文件并跟踪会话](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Generating)
+ [检索跟踪文件](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Retrieving)
+ [清除跟踪文件](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Purging)

### 列出文件
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.ViewingBackgroundDumpDest"></a>

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

```
1. EXEC rdsadmin.manage_tracefiles.refresh_tracefile_listing;
```

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

```
1. SELECT * FROM rdsadmin.tracefile_listing;
```

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

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

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

```
1. 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` 的内容。

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

### 生成跟踪文件并跟踪会话
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Generating"></a>

由于没有任何 `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_SESSION` 和 `DBMS_MONITOR`。有关更多信息，请参阅 Oracle 文档中的[启用会话跟踪](https://docs.oracle.com/database/121/TGSQL/tgsql_trace.htm#GUID-F872D6F9-E015-481F-80F6-8A7036A6AD29)。

### 检索跟踪文件
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Retrieving"></a>

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

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

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

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

```
1. SPOOL /tmp/tracefile.txt
2. SELECT * FROM tracefile_table;
3. SPOOL OFF;
```

### 清除跟踪文件
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Purging"></a>

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

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

```
 1. # Show the current tracefile retention
 2. SQL> EXEC rdsadmin.rdsadmin_util.show_configuration;
 3. NAME:tracefile retention
 4. VALUE:10080
 5. DESCRIPTION:tracefile expiration specifies the duration in minutes before tracefiles in bdump are automatically deleted.
 6. 		
 7. # Set the tracefile retention to 24 hours:
 8. SQL> EXEC rdsadmin.rdsadmin_util.set_configuration('tracefile retention',1440);
 9. SQL> commit;
10. 
11. #show the new tracefile retention
12. SQL> EXEC rdsadmin.rdsadmin_util.show_configuration;
13. NAME:tracefile retention
14. VALUE:1440
15. 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` 开头的所有文件。

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

## 将 Oracle 日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.Oracle.PublishtoCloudWatchLogs"></a>

您可以配置 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` 参数设置为以下允许的任何值： <pre>{ none | os | db [, extended] | xml [, extended] }</pre>  |  `none`  | 
|  侦听器日志  |  无。您无法禁用此日志。  |  已启用  | 
|  Oracle Management Agent 日志  |  无。您无法禁用此日志。  |  已启用  | 

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


****  

| 日志名称 | CloudWatch 日志组 | 
| --- | --- | 
| emctl.log | oemagent-emctl | 
| emdctlj.log | oemagent-emdctlj | 
| gcagent.log | oemagent-gcagent | 
| gcagent\$1errors.log | oemagent-gcagent-errors | 
| emagent.nohup | oemagent-emagent-nohup | 
| secure.log | oemagent-secure | 

有关详细信息，请参阅 Oracle 文档中的 [查找 Management Agent 日志和跟踪文件](https://docs.oracle.com/en/enterprise-manager/cloud-control/enterprise-manager-cloud-control/13.4/emadm/locating-management-agent-log-and-trace-files1.html#GUID-9C710D78-6AA4-42E4-83CD-47B5FF4892DF)。

### 控制台
<a name="USER_LogAccess.Oracle.PublishtoCloudWatchLogs.console"></a>

**从AWS 管理控制台将 Oracle 数据库日志发布到 CloudWatch Logs**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

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

1. 选择**修改**。

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

1. 选择**继续**，然后选择摘要页面上的**修改数据库实例**。

### AWS CLI
<a name="USER_LogAccess.Oracle.PublishtoCloudWatchLogs.CLI"></a>

要发布 Oracle 日志，您可以使用具有以下参数的 [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令：
+ `--db-instance-identifier`
+ `--cloudwatch-logs-export-configuration`

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

您还可以使用以下命令来发布 Oracle 日志：
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)

**Example**  
以下示例将创建一个启用了 CloudWatch Logs 发布的 Oracle 数据库实例。`--cloudwatch-logs-export-configuration` 值是 JSON 字符串数组。这些字符串可以是 `alert`、`audit`、`listener` 和 `trace` 的任意组合。  
对于 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 19.0.0.0.ru-2024-04.rur-2024-04.r1 \
    --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 19.0.0.0.ru-2024-04.rur-2024-04.r1 ^
    --license-model bring-your-own-license ^
    --master-username myadmin ^
    --manage-master-user-password
```

**Example**  
以下示例修改现有的 Oracle 数据库实例以将日志文件发布到 CloudWatch Logs。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `EnableLogTypes`，其值是具有 `alert`、`audit`、`listener` 和 `trace` 的任意组合的字符串的数组。  
对于 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\"
```

**Example**  
以下示例修改现有的 Oracle 数据库实例以禁用将审核和侦听器日志文件发布到 CloudWatch Logs 的功能。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `DisableLogTypes`，其值是具有 `alert`、`audit`、`listener` 和 `trace` 的任意组合的字符串的数组。  
对于 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
<a name="USER_LogAccess.Oracle.PublishtoCloudWatchLogs.API"></a>

您可以使用 RDS API 来发布 Oracle 数据库日志。您可以使用以下参数调用 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作：
+ `DBInstanceIdentifier`
+ `CloudwatchLogsExportConfiguration`

**注意**  
对 `CloudwatchLogsExportConfiguration` 参数进行的更改始终立即应用于数据库实例。因此，`ApplyImmediately` 参数没有影响。

您还可以通过调用以下 RDS API 操作来发布 Oracle 日志：
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html)

使用以下参数运行这些 RDS API 操作之一：
+ `DBInstanceIdentifier`
+ `EnableCloudwatchLogsExports`
+ `Engine`
+ `DBInstanceClass`

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

## 访问警报日志和侦听器日志
<a name="USER_LogAccess.Concepts.Oracle.AlertLogAndListenerLog"></a>

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

```
1. SELECT message_text FROM alertlog;
```

使用 Amazon CloudWatch Logs 访问侦听器日志。

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