本页面包含有关以下方面的信息:
- 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
。在值 (Value) 字段中,输入
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) 身份验证。
- 以下数据类型不受支持,也不会复制到目标位置:
SQL_VARIANT
HIERARCHYID
GEOMETRY
GEOGRAPHY
- Datastream 会复制用户定义的数据类型,但存储在目标位置的是您派生用户定义类型所依据的基本数据类型。例如,如果您基于
VARCHAR(50)
数据类型定义USERNAME
数据类型,则数据在目标位置存储为VARCHAR(50)
。 对于没有唯一索引的表,Datastream 不支持对大型对象列(
TEXT
、NTEXT
、XML
、IMAGE
)和最大可变长度列(VARCHAR(MAX)
、VARBINARY(MAX)
、NVARCHAR(MAX)
)进行 CDC。如果流中不包含大型对象列,则支持 CDC。
使用变更表 CDC 方法时,Datastream 不支持复制以下源架构更改:
- 舍弃列:这些列中的数据会被替换为
NULL
值。 - 修改数据类型:Datastream 会尝试将数据插入目标位置,如果数据被拒绝,则会引发错误。
- 重命名列:如果启用了 CDC,则不支持 SQL Server。
此类架构更改可能会导致数据损坏或无法处理事件。
- 舍弃列:这些列中的数据会被替换为
Datastream 不支持数据遮盖。数据在未脱敏的情况下复制。
Datastream 不支持复制使用数据层应用包 (DACPAC) 应用到数据库的更改。
Datastream 不会复制使用
WRITETEXT
或UPDATETEXT
语句所做的更改。Datastream 不支持复制计算列,除非该列标记为
PERSISTED
。Datastream 不支持
PAGE
、COLUMNSTORE
或COLUMNSTORE ARCHIVE
压缩类型。
使用事务日志方法时的其他限制
如果您使用事务日志 CDC 方法,则还需遵守以下限制:
- 不支持透明数据加密 (TDE)。
- 不支持列级加密。这些列中的数据会被替换为
NULL
值。 - 使用事务日志 CDC 方法时,Datastream 不支持复制在创建数据流后添加到源架构的列。系统不会将新列复制到目标位置。
- Datastream 不支持
ROLLBACK TO SAVEPOINT
语句。 系统会忽略此类回滚事件,并且不会将其复制到目标位置。 - 对于以下类型的表,Datastream 不支持对超过 8 KB 的行进行 CDC:
- 没有唯一索引的表
- 仅包含一个唯一非聚簇索引且具有一个或多个可变长度列(
VARCHAR
、VARBINARY
、NVARCHAR
)的表
Datastream 不支持以下类型的表中的大型对象列(
TEXT
、NTEXT
、XML
、IMAGE
)的 CDC:- 没有唯一索引的表
- 仅包含一个唯一非聚簇索引且具有一个或多个可变长度列(
VARCHAR
、VARBINARY
、NVARCHAR
)的表
如果大型对象列未包含在数据流中,则只有当此类表具有有效索引时,才支持 CDC。
后续步骤
- 了解如何配置 SQL Server 源以用于 Datastream。