重要
现已弃用 Attunity 的 Oracle 变更数据捕获功能。 有关详细信息,请参阅公告。
本部分介绍 Oracle CDC 服务的一些重要概念。 本节中包含的概念包括:
-
本部分介绍此数据库中所包含的表,以及这些表对于 CDC 的重要性。
-
本部分简要介绍了 CDC 数据库。 这些数据库是使用 Oracle 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 实例。
另请参阅:
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 数据库角色的成员,或者是 sysadmin 或 serveradmin 固定服务器角色的其他成员。
有关 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 实例的 sysadmin 或 serveradmin 角色的成员。
dbo.xdbcdc_stop(dbname)
dbo.xdbcdc_stop过程向 CDC 服务发送停止请求,该服务处理所选 CDC 实例以停止更改处理。
若要使用 dbo.xcdcdc_stop 过程,用户必须是 CDC 数据库的 db_owner 数据库角色的成员,或者是 SQL Server 实例的 sysadmin 或 serveradmin 角色的成员。
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 服务的以下命令。
配置
使用 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-account、 windows-password 是正在更新的服务的 Windows 帐户凭据。
sql-username、 sql-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-account、 windows-password 是与要创建的 Oracle CDC 服务关联的帐户名称和密码。
sql-username、 sql-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")。