我有一个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小时,例如。或者我应该在数据库端做些什么?
1条答案
按热度按时间q9rjltbz1#
我在这个数据库中了解到日志文件每天都会被删除。我的连接器是否试图读取一个已经不存在的旧日志文件?
删除不再需要的归档日志是可以的,但务必确保没有删除Oracle Connector执行挖掘仍需要的日志。在特定情况下,连接器仍然需要
thread_1_seq_53874.3204.1093111215
,但日志已不在文件系统上,因此连接器将停止并出现错误。此错误会在任何其他连接器(如MySQL)上发生如果您在连接器完成阅读binlog之前删除了binlog。例如,如何告诉连接器仅检查最近12小时。
你不可以。
Debezium连接器的设计方式是,它们旨在按时间顺序从日志中读取所有更改,以保证没有更改数据事件丢失。如果删除了一个需要的日志,而我们没有抛出错误,那么您将出现缺口,源数据库中的更改将不会表示为更改事件,因此您的使用者将无法保持同步。
或者我应该在数据库端做些什么
归档日志需要保留到连接器需要的时间为止。Oracle连接器的延迟既取决于数据库的易失性,也取决于许多因素,如数据库服务器硬件(磁盘和CPU)的性能,重做日志的大小等。
由于空间限制,某些环境可能无法在预设目的地位置长时间保留存盘日志。这就是为什么我们引入了一种方法,让您设定Oracle将存盘日志写入次要目的地位置,以便在较长的时间内保留日志,通常是透过网络挂载。然后可以显式地告诉连接器使用该存档目标名称,而不是系统的第一个有效/默认位置。