Debezium 连接器尝试打开旧日志文件

Debezium Connector tries to open old log file

我有一个 debezium 连接器,在有限的时间内运行良好。这些错误出现在日志文件中:

Caused by: java.sql.SQLException: ORA-00308: cannot open archived log '+RECO/XXXXXXXX/ARCHIVELOG/2022_01_04/thread_1_seq_53874.3204.1093111215'
ORA-17503: ksfdopn:2 Failed to open file +RECO/XXXXXXXX/ARCHIVELOG/2022_01_04/thread_1_seq_53874.3204.1093111215
ORA-15012: ASM file '+RECO/XXXXXX/ARCHIVELOG/2022_01_04/thread_1_seq_53874.3204.1093111215' does not exist

我了解到这个数据库中的日志文件每天都会被删除。我的连接器是否正在尝试读取不再存在的旧日志文件?例如,我如何告诉我的连接器只检查最近 12 小时。或者我应该在数据库方面做些什么?

I've learnt in this database log files are deleted daily. Is my connector trying to read an old log file, which does not exist anymore?

删除不再需要的存档日志是可以的,但确保您没有删除 Oracle Connector 仍然需要以执行挖掘的日志是至关重要的。在您的特定情况下,连接器仍然需要 thread_1_seq_53874.3204.1093111215 但日志不再位于文件系统上,因此连接器将因错误而停止。如果您在连接器完成读取二进制日志之前删除二进制日志,则任何其他连接器都会发生此错误,例如 MySQL。

How can I tell my connector to check only last 12 hours, for example.

你不能。

Debezium 连接器的设计方式是它们旨在按时间顺序从日志中读取所有 更改,以保证没有更改数据事件丢失。如果要删除需要的日志并且我们没有抛出错误,那么您将有间隙,其中来自源数据库的更改不会表示为更改事件,因此您的消费者不会保持同步。

Or should I do something in database side

只要连接器需要,存档日志就需要保留。 Oracle 连接器的延迟既取决于数据库的波动性,也取决于许多因素,例如数据库服务器硬件的性能(磁盘和 cpu)、重做日志的大小等。

由于 space 限制,某些环境可能无法在默认目标位置长时间保留存档日志。这就是为什么我们引入了一种方法,您可以设置 Oracle 将存档日志写入辅助目标位置,该位置能够将日志保留更长时间(通常通过网络安装),然后您可以明确告诉连接器使用该存档目标名称而不是系统的第一个 valid/default 位置。