

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Oracle 端点故障排除
<a name="CHAP_Troubleshooting_Latency_Source_Oracle"></a>

本节包含特定于 Oracle 的复制场景。

## 源读取暂停
<a name="CHAP_Troubleshooting_Latency_Source_Oracle_Sourcereadingpaused"></a>

AWS DMS 在以下情况下，会暂停从 Oracle 来源读取。此行为是设计使然。您可以使用任务日志调查这种情况的原因。在任务日志中查找类似于以下内容的消息。有关使用任务日志的更多信息，请参阅[查看和管理 AWS DMS 任务日志](CHAP_Monitoring.md#CHAP_Monitoring.ManagingLogs)。
+ **SORTER 消息**：这表明 DMS 正在缓存复制实例上的事务。有关更多信息，请参阅下面的[任务日志中的 SORTER 消息](CHAP_Troubleshooting_Latency_Target.md#CHAP_Troubleshooting_Latency_Target_Sorter)。
+ **调试任务日志**：如果 DMS 中断了读取进程，则您的任务会将以下消息重复写入调试任务日志，而不会更改上下文字段或时间戳：
  + **Binary Reader**：

    ```
    [SOURCE_CAPTURE  ]T:  Produce CTI event: 
    context '00000020.f23ec6e5.00000002.000a.00.0000:190805.3477731.16' 
    xid [00000000001e0018] timestamp '2021-07-19 06:57:55' 
    thread 2  (oradcdc_oralog.c:817)
    ```
  + **Logminer**：

    ```
    [SOURCE_CAPTURE  ]T:  Produce INSERT event: 
    object id 1309826 context '000000000F2CECAA010000010005A8F500000275016C0000000000000F2CEC58' 
    xid [000014e06411d996] timestamp '2021-08-12 09:20:32' thread 1  (oracdc_reader.c:2269)
    ```
+ AWS DMS 为每个新的重做或存档日志操作记录以下消息。

  ```
  00007298: 2021-08-13T22:00:34 [SOURCE_CAPTURE ]I: Start processing archived Redo log sequence 14850 thread 2 name XXXXX/XXXXX/ARCHIVELOG/2021_08_14/thread_2_seq_14850.22977.1080547209 (oradcdc_redo.c:754)
  ```

  如果源有新的重做或归档日志操作， AWS DMS 并且没有将这些消息写入日志，则表示该任务没有处理事件。

## 重做生成速率高
<a name="CHAP_Troubleshooting_Latency_Source_Oracle_Highredo"></a>

如果您的任务正在处理重做或存档日志，但源延迟仍然很高，请尝试确定重做日志的生成速率和生成模式。如果您有很高的重做日志生成水平，这会增加源延迟，因为任务会读取所有重做和存档日志，以便提取与复制的表相关的更改。

要确定重做生成速率，请使用以下查询。
+ 每日重做生成速率：

  ```
  select trunc(COMPLETION_TIME,'DD') Day, thread#, 
  round(sum(BLOCKS*BLOCK_SIZE)/1024/1024/1024) GB,
  count(*) Archives_Generated from v$archived_log 
  where completion_time > sysdate- 1
  group by trunc(COMPLETION_TIME,'DD'),thread# order by 1;
  ```
+ 每小时重做生成速率：

  ```
  Alter session set nls_date_format = 'DD-MON-YYYY HH24:MI:SS';
  select trunc(COMPLETION_TIME,'HH') Hour,thread# , 
  round(sum(BLOCKS*BLOCK_SIZE)/1024/1024) "REDO PER HOUR (MB)",
  count(*) Archives from v$archived_log 
  where completion_time > sysdate- 1
  group by trunc(COMPLETION_TIME,'HH'),thread#  order by 1 ;
  ```

在此场景中要排除延迟问题，请检查以下内容：
+ 检查网络带宽和复制的单线程性能，确保底层网络可以支持源重做生成速率。有关网络带宽如何影响复制性能的信息，请参见前文中的[网络速度和带宽](CHAP_Troubleshooting_Latency.md#CHAP_Troubleshooting_Latency_Causes_Replication_Network)。
+ 检查您是否正确设置了补充日志记录。请避免在源上进行额外的日志记录，例如在表的所有列上启用日志记录。有关设置补充日志记录的信息，请参阅[设置补充日志记录](CHAP_Source.Oracle.md#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging)。
+ 确认您使用了正确的 API 来读取重做或归档日志。您可以使用 Oracle LogMiner 或 AWS DMS 二进制阅读器。 LogMiner 读取在线重做日志和存档的重做日志文件时，Binary Reader 会直接读取和解析原始重做日志文件。因此，Binary Reader 的性能更高。如果您的重做日志生成速率超过 10 GB/小时，建议您使用 Binary Reader。有关更多信息，请参阅 [在 CDC 中使用 Oracle LogMiner 或 AWS DMS 二进制阅读器](CHAP_Source.Oracle.md#CHAP_Source.Oracle.CDC)。
+ 检查 `ArchivedLogsOnly` 是否设置为 `Y`。如果设置了此端点设置，则 AWS DMS 会从存档重做日志进行读取。这会增加源延迟，因为要 AWS DMS 等待在线重做日志存档后再读取。有关更多信息，请参阅 [ArchivedLogsOnly](https://docs.aws.amazon.com/dms/latest/APIReference/API_OracleSettings.html#DMS-Type-OracleSettings-ArchivedLogsOnly)。
+ 如果您的 Oracle 源使用自动存储管理（ASM），有关如何正确配置数据存储的信息，请参阅 [使用 Oracle 作为源时在 Oracle ASM 上存储 REDO AWS DMS](CHAP_Source.Oracle.md#CHAP_Source.Oracle.REDOonASM)。您还可以使用 `asmUsePLSQLArray` 额外连接属性（ECA）进一步优化读取性能。有关使用 `asmUsePLSQLArray` 的信息，请参阅 [使用 Oracle 作为来源时的终端节点设置 AWS DMS](CHAP_Source.Oracle.md#CHAP_Source.Oracle.ConnectionAttrib)。