使用 Oracle CDC 服务

重要

现已弃用 Attunity 的 Oracle 变更数据捕获功能。 有关详细信息,请参阅公告

本部分介绍 Oracle CDC 服务的一些重要概念。 本节中包含的概念包括:

  • MSXDBCDC 数据库

    本部分介绍此数据库中所包含的表,以及这些表对于 CDC 的重要性。

  • CDC 数据库

    本部分简要介绍了 CDC 数据库。 这些数据库是使用 Oracle CDC 设计器控制台创建的。 有关 CDC 数据库的详细信息,请参阅 CDC 设计器控制台安装随附的文档。

  • 使用命令行配置 CDC 服务

    本部分介绍可用于配置 Oracle CDC 服务的命令行命令。

MSXDBCDC 数据库

MSXDBCDC(Microsoft External-Database CDC)数据库是一个特殊数据库,在将适用于 Oracle 的 CDC 服务用于 SQL Server 实例时是必需的。

无法更改此数据库的名称。 如果主机 SQL Server 实例上存在名为 MSXDBCDC 的数据库,并且包含除 Oracle CDC 服务定义之外的表,则无法使用主机 SQL Server 实例。

此数据库的主要用途是:

  • 充当与 SQL Server 实例关联的 Oracle CDC 服务的注册表。 此信息用于服务的配置和设计组件,帮助协调在不同节点上以相同名称运行的多个 CDC 服务,并确定其中一个为活动服务。

  • 充当 SQL Server 实例中包含的 Oracle CDC 实例的注册表、处理每个实例的 CDC 服务以及每个使用的配置版本。 此信息相当于 master 数据库的 sys.databases 表中的is_cdc_enabled 列。 CDC 服务定期扫描 dbo.xdbcdc_databases 表,以确定对 CDC 配置或捕获实例列表所做的更改。

  • 保存 sysadmin 拥有的存储过程,以帮助创建和维护 CDC 实例。 这些过程类似于用于实现 SQL Server CDC 功能的系统过程。

创建 MSXDBCDC 数据库

必须先创建 MSXDBCDC 数据库,然后才能定义 Oracle CDC 服务。 只能在 SQL Server 实例上创建一个 MSXDBCDC 数据库。 为 Oracle CDC 准备 SQL Server 数据库时,会创建 MSXDBCDC 数据库。 这可以通过使用 Oracle CDC 服务配置控制台或运行 CDC 服务配置控制台生成的创建脚本来完成。

此数据库的所有者是 Oracle CDC 服务管理员,可以控制 SQL Server 实例下托管的所有 Oracle CDC 实例。

另请参阅:

如何为 CDC 准备 SQL Server

MSXDBCDC 数据库表

本部分介绍 MSXDBCDC 数据库中的下表。

dbo.xdbcdc_trace

此表存储 Oracle CDC 服务的跟踪信息。 此表中存储的信息包括值得注意的状态更改和跟踪记录。

Oracle CDC 服务将错误记录和一些信息记录写入 Windows 事件日志和跟踪表。 在某些情况下,跟踪表可能无法访问,在这种情况下,可以从事件日志访问错误信息。

下面介绍了 dbo.xdbcdc_trace 表中包括的项。

条目 DESCRIPTION
时间戳 写入跟踪记录时的确切 UTC 时间戳。
类型 包含以下值之一。

错误

信息

追踪
节点 写入记录的节点的名称。
地位 状态表使用的状态代码。
子状态 状态表使用的子状态代码。
状态信息 状态表使用的状态消息。
来源 生成跟踪记录的 Oracle CDC 组件的名称。
text_data 错误或跟踪记录包含文本内容时的其他文本数据。
二进制数据 错误或跟踪记录中包含二进制有效负载时的附加二进制数据。

Oracle CDC 实例将根据更改表保留策略删除旧的跟踪表行。

dbo.xdbcdc_databases

此表包含当前 SQL Server 实例中 Oracle CDC 数据库的 CDC 服务的名称。 每个数据库对应于 Oracle CDC 实例。 Oracle CDC 服务使用此表来确定要启动或停止的实例以及要重新配置哪些实例。

下表描述了 dbo.xdbcdc_databases 表中包括的项。

条目 DESCRIPTION
姓名 SQL Server 实例中的 Oracle 数据库的名称。
配置版本 相应 CDC 数据库 xdbcdc_config 表中最后一次更改的时间戳(UTC)或该表中当前行的时间戳(UTC)。

UPDATE 触发器为此项强制设定 GETUTCDATE() 函数的值。 config_version 允许 CDC 服务标识需要检查的配置更改或启用/禁用的 CDC 实例。
cdc_service_name 此项确定哪个 Oracle CDC 服务处理所选 Oracle 数据库。
启用 指示 Oracle CDC 实例是活动(1)还是已禁用(0)。 当 Oracle CDC 服务启动时,仅启动标记为“启用”(1)的实例。

注意:Oracle CDC 实例可能会因为无法重试的错误而禁用。 在这种情况下,必须在解决错误后手动重启实例。

dbo.xdbcdc_services

下表列出了与主机 SQL Server 实例关联的 CDC 服务。 CDC 设计器控制台使用此表来确定为本地 SQL Server 实例配置的 CDC 服务列表。 CDC 服务也使用它来确保只有一个正在运行的 Windows 服务处理给定的 Oracle CDC 服务名称。

下面介绍了 dbo.xdbcdc_databases 表中包括的捕获状态项。

条目 DESCRIPTION
cdc服务名称 Oracle CDC 服务的名称(Windows 服务名称)。
cdc_service_sql_login Oracle CDC 服务用来连接到 SQL Server 实例的 SQL Server 登录名的名称。 创建一个名为 cdc_service 的新 SQL 用户,并将其与此登录名相关联。然后,将该用户作为服务处理的每个 CDC 数据库的固定数据库角色 db_ddladmin、db_datareader 和 db_datawriter 的成员添加。
ref_count 此项计算安装了同一 Oracle CDC 服务的计算机数。 它随同名 Oracle CDC 服务的每个添加而递增,并在删除此类服务时递减。 当计数器达到零时,将删除此行。
活动服务节点 当前处理 CDC 服务的 Windows 节点的名称。 正确停止服务后,此列将设置为 null,指示不再有活动服务。
活动服务心跳 此项跟踪当前 CDC 服务,以确定它是否仍然处于活动状态。

此项目会定期使用当前活动的 CDC 服务数据库的 UTC 时间戳进行更新。 默认间隔为 30 秒,但间隔可配置。

当挂起的 CDC 服务检测到在配置间隔过后心跳信号未更新时,将启动挂起服务以尝试接管活动 CDC 服务的角色。
选项 此项指定次要选项,例如跟踪或调整。 它以 名称[=value][; ]的形式编写。 选项字符串使用与 ODBC 连接字符串相同的语义。 如果选项为布尔值(值为 yes/no),则该值只能包含名称。

trace 具有以下可能的值。

true





off

<class name>[,class name>]



默认值是 false

service_heartbeat_interval 是服务更新active_service_heartbeat列的时间间隔(以秒为单位)。 默认值为 30 。 最大值为 3600

service_config_polling_interval 是 CDC 服务检查配置更改的轮询间隔(以秒为单位)。 默认值为 30 。 最大值为 3600

sql_command_timeout 是适用于 SQL Server 的命令超时。 默认值是 1秒。 最大值为 3600

MSXDBCDC 数据库存储过程

本部分介绍 MSXDBCDC 数据库中的以下存储过程。

dbo.xcbcdc_reset_db(数据库名称)

此过程清除 Oracle CDC 实例的数据。 它被使用:

  • 若要在忽略以前的数据的情况下重新开始数据捕获,例如,在源数据库恢复之后或在某些 Oracle 事务日志不可用且处于非活动状态时。

  • 当 CDC 状态存在损坏时(特别是在任何 cdc.*表数据中)。

dbo.xcbcdc_reset_db过程执行以下任务:

  • 停止 CDC 实例(如果处于活动状态)。

  • 截断变更表、cdc_lsn_mapping 表和 cdc_ddl_history 表。

  • 清除 cdc_xdbcdc_state 表。

  • 清除cdc_change_table的每一行的start_lsn列。

若要使用 dbo.xcbcdc_reset_db 过程,用户必须是所命名的 CDC 实例数据库的 db_owner 数据库角色的成员,或者是 sysadminserveradmin 固定服务器角色的其他成员。

有关 CDC 表的详细信息,请参阅 CDC 设计器控制台中帮助系统中的 CDC 数据库

dbo.xdbcdc_disable_db(dbname)

dbo.xcbcdc_disable_db过程执行以下任务:

  • 删除MSXDBCDC.xdbcdc_databases表中所选 CDC 数据库的条目。

若要使用dbo.xcbcdc_disable_db过程,用户必须是所命名的 CDC 实例db_owner数据库角色的成员或 sysadmin 或 serveradmin 固定服务器角色的成员。

有关 CDC 表的详细信息,请参阅 CDC 设计器控制台中帮助系统中的 CDC 数据库。

dbo.xcbcdc_add_service(svcname,sqlusr)

dbo.xcbcdc_add_service过程向MSXDBCDC.xdbcdc_services表添加一个条目,并将一个条目添加到MSXDBCDC.xdbcdc_services表中服务名称的ref_count列中。 当ref_count为 0 时,它会删除该行。

若要使用dbo.xcbcdc_add_service<服务名称、用户名>过程,用户必须是所命名的 CDC 实例数据库的db_owner数据库角色的成员,或者是 sysadmin 或 serveradmin 固定服务器角色的成员。

dbo.xdbcdc_start(dbname)

dbo.xdbcdc_start过程向 CDC 服务发送启动请求,该服务处理所选 CDC 实例以启动更改处理。

若要使用 dbo.xcdcdc_start 过程,用户必须是 CDC 数据库的 db_owner 数据库角色的成员,或者是 SQL Server 实例的 sysadminserveradmin 角色的成员。

dbo.xdbcdc_stop(dbname)

dbo.xdbcdc_stop过程向 CDC 服务发送停止请求,该服务处理所选 CDC 实例以停止更改处理。

若要使用 dbo.xcdcdc_stop 过程,用户必须是 CDC 数据库的 db_owner 数据库角色的成员,或者是 SQL Server 实例的 sysadminserveradmin 角色的成员。

CDC 数据库

CDC 服务中使用的每个 Oracle CDC 实例都与称为 CDC 数据库的特定 SQL Server 数据库相关联。 此 SQL Server 数据库托管在与 Oracle CDC 服务关联的 SQL Server 实例中。

CDC 数据库包含特殊的 cdc 架构。 Oracle CDC 服务将此架构与具有前缀 xdbcdc_的表名一起使用。 此架构用于安全性和一致性目的。

Oracle CDC 实例和 CDC 数据库都使用 Oracle CDC 设计器控制台创建。 有关 CDC 数据库的详细信息,请参阅 Oracle CDC 设计器控制台安装随附的文档。

使用命令行配置 CDC 服务

可以从命令行操作 Oracle CDC 服务程序(xdbcdcsvc.exe)。 CDC 服务程序是本机 32 位/64 位 Windows 可执行文件。

另请参阅

如何使用 CDC 服务 Command-Line 接口

服务程序命令

本部分介绍用于配置 CDC 服务的以下命令。

配置

使用 Config 从脚本更新 Oracle CDC 服务配置。 该命令可用于仅更新 CDC 服务配置的特定部分(例如,只有连接字符串而不知道非对称密钥密码)。 该命令必须由计算机管理员运行。 下面是命令的示例 Config

"<path>xdbcdcsvc.exe" config  
     <cdc-service-name>  
     [connect= <sql-server-connection-string>]  
     [key= <asym-key-password>]  
     [svcacct= <windows-account> <windows-password>]  
     [sqlacct= <sql-username> <sql-password>]  
  

地点:

cdc-service-name 是要更新的 CDC 服务的名称。 这是必需参数。

sql-server-connection-string 是要更新的连接字符串。 如果连接字符串包含空格或引号,则必须用双引号 () 包装它。 嵌入的引号通过加倍引号进行转义。

asym-key-password 是所需更新的密码。

windows-accountwindows-password 是正在更新的服务的 Windows 帐户凭据。

sql-usernamesql-password 是正在更新的 SQL Server 身份验证凭据。 如果 sqlacct 同时具有空用户名和密码,则 Oracle CDC 服务将使用 Windows 身份验证连接到 SQL Server。

注意:包含空格或双引号的任何参数都必须用双引号包装()。 嵌入的双引号必须加倍(例如,使用"A#B" D 作为密码时输入""A#B"" D")。

创建

使用 Create 从脚本创建 Oracle CDC 服务。 该命令必须由计算机管理员运行。 下面是命令的示例 Create

"<path>xdbcdcsvc.exe" create  
     <cdc-service-name>  
     [connect= "<sql-server-connection-string>"]  
     [key= <asym-key-password>]  
     [svcacct <windows-account> <windows-password>]  
     [sqlacct <sql-username> <sql-password>]  

地点:

cdc-service-name 是新创建的服务的名称。 如果已有具有此名称的服务,程序将返回错误。 不应将长名称或名称与空格一起使用。 字符“/”和“\”不是服务名称中的有效字符。 这是必需参数。

sql-server-connection-string 是用于连接到与新 Oracle CDC 服务关联的 SQL Server 实例的连接字符串。

asym-key-password 是保护用于存储源数据库日志挖掘凭据的非对称密钥的密码。

windows-accountwindows-password 是与要创建的 Oracle CDC 服务关联的帐户名称和密码。

sql-usernamesql-password 是用于连接到 SQL Server 实例的 SQL Server 帐户名称和密码。 如果这两个参数均为空,则 Oracle CDC Service 使用 Windows 身份验证连接到 SQL Server。

注意:包含空格或双引号的任何参数都必须用双引号包装()。 必须将嵌入的双引号加倍(例如,要使用"A#B" D作为密码,请输入""A#B"" D")。

删除

使用 Delete 从脚本中删除 Oracle CDC 服务。 此命令必须由计算机管理员运行。 下面是命令的示例 Delete

"<path>xdbcdcsvc.exe" delete  
    <cdc-service-name>  
  

地点:

cdc-service-name 是要删除的 CDC 服务的名称。

注意:包含空格或双引号的任何参数都必须用双引号包装()。 嵌入的双引号必须加倍(例如,使用"A#B" D 作为密码时输入""A#B"" D")。

另请参阅

如何使用 CDC 服务 Command-Line 接口
如何为 CDC 准备 SQL Server