源 SQL Server 数据库

本页面包含有关以下方面的信息:

  • 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 标签:

  1. 前往 Google Cloud 控制台中的数据流页面。

    转到“数据流”页面

  2. 点击要修改的 SQL Server 数据流。

  3. 数据流详情页面上,点击暂停

  4. 依次点击修改 > 修改直播设置

  5. 点击添加标签

  6. 密钥字段中,输入 enable_ddl_support_for_ct

  7. (Value) 字段中,输入 true

  8. 点击保存

  9. 点击开始以继续直播。

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 亿,则无法回填,除非满足以下条件:
    1. 该表具有唯一索引。
    2. 所有索引列都不可为 null。
    3. 索引的所有列都包含在数据流中。
  • 不支持启用延迟耐用性或加速数据库恢复 (ADR) 的数据库。
  • 不支持将更改流式传输到系统表。
  • 不支持 Windows Active Directory (AD) 身份验证。
  • 以下数据类型不受支持,也不会复制到目标位置:
    • SQL_VARIANT
    • HIERARCHYID
    • GEOMETRY
    • GEOGRAPHY
  • Datastream 会复制用户定义的数据类型,但存储在目标位置的是您派生用户定义类型所依据的基本数据类型。例如,如果您基于 VARCHAR(50) 数据类型定义 USERNAME 数据类型,则数据在目标位置存储为 VARCHAR(50)
  • 对于没有唯一索引的表,Datastream 不支持对大型对象列(TEXTNTEXTXMLIMAGE)和最大可变长度列(VARCHAR(MAX)VARBINARY(MAX)NVARCHAR(MAX))进行 CDC。

    如果流中不包含大型对象列,则支持 CDC。

  • 使用变更表 CDC 方法时,Datastream 不支持复制以下源架构更改:

    • 舍弃列:这些列中的数据会被替换为 NULL 值。
    • 修改数据类型:Datastream 会尝试将数据插入目标位置,如果数据被拒绝,则会引发错误。
    • 重命名列:如果启用了 CDC,则不支持 SQL Server。

    此类架构更改可能会导致数据损坏或无法处理事件。

  • Datastream 不支持数据遮盖。数据在未脱敏的情况下复制。

  • Datastream 不支持复制使用数据层应用包 (DACPAC) 应用到数据库的更改。

  • Datastream 不会复制使用 WRITETEXTUPDATETEXT 语句所做的更改。

  • Datastream 不支持复制计算列,除非该列标记为 PERSISTED

  • Datastream 不支持 PAGECOLUMNSTORECOLUMNSTORE ARCHIVE 压缩类型。

使用事务日志方法时的其他限制

如果您使用事务日志 CDC 方法,则还需遵守以下限制:

  • 不支持透明数据加密 (TDE)。
  • 不支持列级加密。这些列中的数据会被替换为 NULL 值。
  • 使用事务日志 CDC 方法时,Datastream 不支持复制在创建数据流后添加到源架构的列。系统不会将新列复制到目标位置。
  • Datastream 不支持 ROLLBACK TO SAVEPOINT 语句。 系统会忽略此类回滚事件,并且不会将其复制到目标位置。
  • 对于以下类型的表,Datastream 不支持对超过 8 KB 的行进行 CDC:
    • 没有唯一索引的表
    • 仅包含一个唯一非聚簇索引且具有一个或多个可变长度列(VARCHARVARBINARYNVARCHAR)的表
  • Datastream 不支持以下类型的表中的大型对象列(TEXTNTEXTXMLIMAGE)的 CDC:

    • 没有唯一索引的表
    • 仅包含一个唯一非聚簇索引且具有一个或多个可变长度列(VARCHARVARBINARYNVARCHAR)的表

    如果大型对象列未包含在数据流中,则只有当此类表具有有效索引时,才支持 CDC。

后续步骤