本页面包含以下信息:
- Datastream 如何处理从来源 SQL Server 数据库中拉取的数据的行为。
- Datastream 支持的变更数据捕获 (CDC) 方法。
- Datastream 支持的 SQL Server 数据库版本。
- 将 SQL Server 数据库用作来源的已知限制。
行为
Datastream 使用以下 CDC 方法之一跟踪数据操纵语言 (DML) 更改:
变更表
变更表 CDC 方法允许用户保留日志的时间较短,从而节省存储空间,但与事务日志方法相比,吞吐量较低。与事务日志相比,此方法的限制更少。例如,它消除了日志截断导致数据流永久失败的风险,并支持复制加密表。如需了解详情,请参阅 已知限制。
使用此 CDC 方法时,系统会使用专用变更表跟踪来源的更改。事务日志仍在使用,但使用范围有限,您无需长时间保留它们。当 DML 事件应用于源表时,更改会复制到相应的变更表。 变更表的结构与源表的结构相同,但包含额外的列,以包含更改的元数据。只有已提交的事务才会添加到变更表中,同时还会添加提交操作的日志序列号 (LSN)。
Datastream 如何处理来源架构的 DDL 更改
使用变更表 CDC 方法时,系统会为每个变更表创建捕获实例。每个捕获实例都与它捕获和跟踪的列列表相关联。默认情况下,在创建捕获实例后,如果来源中发生数据定义语言 (DDL) 更改,该实例会忽略此更改。不过,您可以将 SQL Server 数据流配置为复制在创建数据流和捕获实例后添加到来源架构的列。
准备工作
- 确保为 Datastream 用户分配了
db_owner权限。
复制添加到来源架构的列
如需让 Datastream 支持复制在创建数据流后添加到来源架构的列,您需要将 enable_ddl_support_for_ct 标签添加到数据流:
前往数据流 页面,在 Google Cloud 控制台中。
点击要修改的 SQL Server 数据流。
在数据流详情 页面上,点击暂停 。
依次点击修改 > 修改数据流设置 。
点击添加标签 。
在密钥 字段中,输入
enable_ddl_support_for_ct。在值 字段中,输入
true。点击保存 。
点击开始 以恢复数据流。
Datastream 每 5 分钟检查一次
cdc.ddl_history
表中是否有新的 DDL。如果向数据流配置中包含的表添加了新列,Datastream 会验证该表是否具有两个捕获实例:
如果没有,Datastream 会创建一个新的捕获实例,读取原始捕获实例的数据,直到 DDL 发生的那一刻,然后开始从新的捕获实例读取数据。
如果有,系统会添加一条日志条目,指出由于捕获实例数量已达到上限,因此无法处理 DDL 更改。
事务日志
使用此 CDC 方法时,Datastream 会直接从事务日志中读取来源的更改。此方法所需的资源较少,并且可以更快地检索数据,但限制更多。
为防止数据丢失,请务必确保在 Datastream 读取日志之前不要截断日志。另一方面,如果您将日志文件保留的时间过长,它们会占用存储空间,这最终可能会导致数据库实例进入只读模式。
为确保 CDC 读取器有足够的时间读取日志,同时允许日志截断以释放存储空间,您需要应用额外的配置步骤,例如更改轮询间隔和设置截断保护措施。 这些步骤提供了一层额外的保护,以确保即使 Datastream 端出现停机或来源数据库与 Datastream 之间存在连接问题,Datastream 也能读取数据。
如需详细了解如何应用这些额外措施,请参阅 配置来源 SQL Server 数据库 页面,然后选择您的数据库类型。
版本
Datastream 支持以下版本的 SQL Server 数据库:
- 使用以下版本的自行管理型(本地或云端托管型):
- 企业版:2008 及更高版本
- 标准版:2016 SP1 及更高版本
- 开发者版:2008 及更高版本
- Amazon RDS for SQL Server
Azure SQL 数据库(S3 及更高级别)。
Cloud SQL for SQL Server
Datastream 不支持以下版本的 SQL Server 数据库:
- SQL Server Standard 版本(2008 至 2014 版)
- SQL Server Express
- SQL Server Web
已知限制
将 SQL Server 数据库用作来源的已知限制包括:
- 数据流限 10,000 个表。
- 如果表超过 5 亿行,则无法回填,除非满足以下条件:
- 该表具有唯一索引。
- 所有索引列均不可为 null。
- 所有索引列都包含在数据流中。
- 不支持启用延迟耐用性或加速数据库恢复 (ADR) 的数据库。
- 不支持将更改流式传输到系统表。
- 不支持 Windows Active Directory (AD) 身份验证。
Datastream 支持所有 SQL Server 排序规则,但代码页为
0的排序规则除外。如需检查特定排序规则的代码页,请在 SQL Server 实例上运行以下查询:SELECT *, CAST(COLLATIONPROPERTY(name, 'CodePage') AS INT) FROMsys.fn_helpcollations() WHERE name = COLLATION_NAME; 不支持以下数据类型,并且不会复制到目标:
SQL_VARIANTHIERARCHYIDGEOMETRYGEOGRAPHY
Datastream 会复制用户定义的数据类型,但存储在目标中的是您从中派生用户定义类型的基本数据类型。例如,如果您根据
VARCHAR(50)数据类型定义USERNAME数据类型,则数据在目标中存储为VARCHAR(50)。对于没有唯一 索引的表中的大型对象列(
TEXTNTEXT、XML、IMAGE)和最大可变长度列 (VARCHAR(MAX)、VARBINARY(MAX)、NVARCHAR(MAX)),Datastream 不支持 CDC。如果大型对象列未包含在数据流中,则支持 CDC。
使用变更表 CDC 方法时,不支持复制以下来源架构更改,并且可能会导致数据损坏或无法处理事件:
- 删除列:这些列中的数据将替换为
NULL值。 - 重命名列:如果启用了 CDC,则不支持 SQL Server。
修改数据类型:SQL Server CDC 捕获作业仅传播以下数据类型更改:
- 更改字符串的最大长度:例如,将
VARCHAR(50)数据类型更改为VARCHAR(100)。BigQuerySTRING列没有固定长度,并且接受较长的字符串。 - 增加整数值范围:例如,将
INT数据类型更改为BIGINT。BigQueryINT64数据类型可容纳新类型,而无需更改架构。 - 更改数值的精度和小数位数:例如,将
DECIMAL(10, 2)数据类型更改为DECIMAL(18, 4)。BigQueryNUMERIC类型具有较大的固定精度 (38) 和小数位数 (9),并且支持此类更改。
对于其他数据类型修改,Datastream 会尝试将数据插入到目标,如果数据被拒绝,则会引发错误。
- 更改字符串的最大长度:例如,将
- 删除列:这些列中的数据将替换为
Datastream 不支持复制包含数据脱敏列的表。数据在复制时不会脱敏。
Datastream 不支持复制使用数据层应用软件包 (DACPAC) 软件包应用于数据库的更改。
Datastream 不会复制使用
WRITETEXT或UPDATETEXT语句进行的更改。如果您使用
enable_ddl_support_for_ct标签复制添加到来源架构的列,则不能将多个数据流附加到同一个 SQL Server 源表。由于 SQL Server 每个表最多支持两个捕获实例,因此架构更改可能会导致 Datastream 尝试创建捕获实例时出现争用情况,这可能会导致数据流失败。Datastream 不支持复制 计算列,除非该列标记为
PERSISTED。Datastream 不支持
PAGE、COLUMNSTORE或COLUMNSTORE ARCHIVE压缩类型。
使用事务日志方法时的其他限制
如果您使用事务日志 CDC 方法,则适用以下其他限制:
- 不支持透明数据加密 (TDE)。
- 不支持列级加密。这些列中的数据将替换为
NULL值。 - 使用事务日志 CDC 方法时,Datastream 不支持复制在创建数据流后添加到来源架构的列。 新列不会复制到目标。
- Datastream 不支持
ROLLBACK TO SAVEPOINT语句。 此类回滚事件会被忽略,并且不会复制到目标。 - 对于以下类型的表中大于 8 KB 的行,Datastream 不支持 CDC:
- 没有唯一索引的表
- 仅包含一个唯一非聚簇索引且具有一个或多个
可变长度列(
VARCHAR、VARBINARY、NVARCHAR)的表
对于以下类型的表中的大型对象列(
TEXT、NTEXT、XML、IMAGE),Datastream 不支持 CDC:- 没有唯一索引的表
- 仅包含一个唯一非聚簇索引且具有一个或多个
可变长度列(
VARCHAR、VARBINARY、NVARCHAR)的表
如果大型对象列未包含在数据流中,则仅当此类表具有有效索引时,才支持 CDC。
后续步骤
- 了解如何配置 SQL Server 来源 以供 Datastream 使用。