ltdts_recvlogical

ltdts_recvlogical — 是从 lt_recvlogical 分支出来的,因此它具有 lt_recvlogical 中的大部分行为,例如控制 LightDB 逻辑解码流。之后,它使用 wal2sql 插件将来自 LightDB 的更改转换为 Oracle 数据库,并将来支持 Redis、Kafka、LightDB-A 等。

Synopsis

ltdts_recvlogical [option...]

描述

ltdts_recvlogical 控制逻辑解码复制插槽并从这些复制插槽中流数据。

Note

在 HA 环境中,请确保您启动了 $LTHOME/bin/ltdts_logicalrepl_copier.sh

它创建一个复制模式的连接,因此受到与 lt_receivewal 相同的约束, 再加上逻辑复制的约束(请参见 Chapter 47)。

ltdts_recvlogical 没有逻辑解码 SQL 接口的 peek 和 get 模式的等价物。 它在接收到数据时惰性地发送回放确认,并在干净退出时发送。要检查插槽中未消耗的待处理数据, 请使用 pg_logical_slot_peek_changes

选项

必须指定以下至少一个选项来选择一个操作:

--create-slot

使用由 --plugin 指定的输出插件,为由 --dbname 指定的数据库, 创建一个名为 --slot 的新逻辑复制插槽。

--drop-slot

删除名为 --slot 的复制插槽,然后退出。

--start

从由 --slot 指定的逻辑复制插槽开始流式传输更改,直到被信号终止。 如果服务器端更改流以服务器关闭或断开连接结束,则在一个循环中重试,除非指定了 --no-loop

流格式由创建插槽时指定的输出插件确定。

连接必须是与用于创建插槽的相同数据库连接。

--create-slot--start 可以一起指定。 --drop-slot 不能与其他操作结合使用。

以下命令行选项控制输出的位置和格式以及其他复制行为:

-E lsn
--endpos=lsn

--start 模式下,当接收到指定的 LSN 时自动停止复制并以正常退出状态 0 退出。 如果不在 --start 模式下指定,则会引发错误。

如果存在 LSN 等于 lsn 的记录,则该记录将被输出。

--endpos 选项不知道事务边界,可能会在事务的中途截断输出。 任何部分输出的事务都不会被消耗,并将在下次从插槽读取时再次重放。单个消息永远不会被截断。

-f filename
--file=filename

将接收到和解码的事务数据写入此文件中。使用 - 表示 stdout

-F interval_seconds
--fsync-interval=interval_seconds

指定 ltdts_recvlogical 应该多久发出一次 fsync() 调用, 以确保输出文件被安全地刷新到磁盘。

服务器偶尔会要求客户端执行刷新操作,并将刷新位置报告给服务器。此设置除了执行更频繁的刷新操作之外,还要进行刷新操作。

指定间隔为 0 将完全禁用 fsync() 调用,但仍会向服务器报告进度。在这种情况下, 在崩溃事件中可能会丢失数据。

-I lsn
--startpos=lsn

--start 模式下,从给定的 LSN 开始进行复制。有关此的详细信息,请参见 Chapter 47Section 51.4 中的文档。在其他模式下忽略。

--if-not-exists

在指定 --create-slot 并且使用指定名称的插槽已经存在时,不会出错。

-n
--no-loop

连接到服务器时,如果失去连接,则不要在循环中重试,只需退出。

-o name[=value]
--option=name[=value]

将选项 name 和(如果指定)选项值 value 传递给输出插件。 存在哪些选项以及它们的效果取决于所使用的输出插件。

-P plugin
--plugin=plugin

在创建插槽时,使用指定的逻辑解码输出插件。请参见 Chapter 47。如果插槽已经存在,则此选项不起作用。

-s interval_seconds
--status-interval=interval_seconds

此选项与 lt_receivewal 中同名选项具有相同的效果。请参见那里的描述。

-S slot_name
--slot=slot_name

--start 模式下,使用名为 slot_name 的现有逻辑复制插槽。 在 --create-slot 模式下,创建具有此名称的插槽。在 --drop-slot 模式下,删除具有此名称的插槽。

-v
--no-verbose

禁用详细模式。

以下命令行选项控制数据库连接参数。

-d dbname
--dbname=dbname

要连接的数据库。有关详细信息,请参见操作的描述。 dbname 可以是 连接字符串。 如果是这样,连接字符串参数将覆盖任何冲突的命令行选项。默认为用户名。

-h hostname-or-ip
--host=hostname-or-ip

指定运行服务器的计算机的主机名。如果值以斜杠开头,则将其用作 Unix 域套接字的目录。如果设置了 LTHOST 环境变量,则使用默认值,否则尝试进行 Unix 域套接字连接。

-p port
--port=port

指定服务器用于侦听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。如果设置了 LTPORT 环境变量,则默认为该环境变量的值,否则使用编译时的默认值。

-U user
--username=user

要连接的用户名称。默认为当前操作系统用户名称。

-w
--no-password

永远不提示输入密码。如果服务器需要密码身份验证,并且没有其他方式(例如 .pgpass 文件)提供密码,则连接尝试将失败。此选项可用于批处理作业和脚本,其中没有用户输入密码。

-W
--password

强制 ltdts_recvlogical 在连接到数据库之前提示输入密码。

此选项从未是必要的,因为如果服务器要求密码身份验证,ltdts_recvlogical 将自动提示输入密码。然而,ltdts_recvlogical 将浪费一次连接尝试来发现服务器需要密码。在某些情况下,值得输入 -W 以避免额外的连接尝试。

-T target_type
--target=target_type

同步到何处。only-debug|oracle|lightdb|redis|kafka|es|mysql。 LightDB 22.2 仅支持 only-debug(不插入 Oracle,只进行 JSON 解析)| Oracle 目标。

以下命令行选项控制 Oracle 数据库连接参数。

-t tnsname
--tnsname=TNSNAME

要连接的 Oracle tnsname。

-u Oracle username
--oracle-username=NAME

指定连接到 Oracle 的用户名。

-k Oracle password
--oracle-password=PASSWORD

指定连接到 Oracle 的密码。

--ignore-duplicate

在插入到 Oracle 时忽略重复错误。

--ignore-not-found

在更新或删除 Oracle 时忽略 0 行受影响。

-z date format
--date_format=DATE_FORMAT

nls_date_format,默认为 YYYY-MM-DD HH24:MI:SS

-Z date format
--timestamp_format=TIMESTAMP_FORMAT

nls_timestamp_format,默认为 YYYY-MM-DD HH24:MI:SS.FF6

以下是可用的其他选项:

-V
--version

打印 ltdts_recvlogical 的版本并退出。

-?
--help

显示关于 ltdts_recvlogical 命令行参数的帮助信息,并退出。

环境变量

与大多数其他 LightDB 实用程序一样,此实用程序使用由 libpq 支持的环境变量(参见 Section 32.14)。

环境变量 LT_COLOR 指定是否在诊断消息中使用颜色。可能的值为 alwaysautonever

注意事项

如果源集群启用了组权限,则 ltdts_recvlogical 将保留接收到的 WAL 文件的组权限。

另请参阅

lt_receivewal