0

我有一个 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 小时。或者我应该在数据库方面做些什么?

4

1 回答 1

1

我在这个数据库中了解到日志文件每天都会被删除。我的连接器是否试图读取不再存在的旧日志文件?

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

例如,我如何告诉我的连接器只检查最后 12 小时。

你不能。

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

或者我应该在数据库端做些什么

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

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

于 2022-01-13T07:21:02.083 回答