文档首页/ 数据复制服务 DRS/ 实时同步/ 入云/ 将Microsoft SQL Server同步到GaussDB主备版
更新时间:2024-11-29 GMT+08:00

将Microsoft SQL Server同步到GaussDB主备版

支持的源和目标数据库

表1 支持的数据库

源数据库

目标数据库

  • 本地自建Microsoft SQL Server(企业版2012、2014、2016、2017、2019、2022版本,标准版2016 SP2及以上版本、2017、2019、2022版本)
  • ECS自建Microsoft SQL Server数据库(企业版2012、2014、2016、2017、2019、2022版本,标准版2016 SP2及以上版本、2017、2019、2022版本)
  • 其他云上完全兼容Microsoft SQL Server的数据库(企业版2012、2014、2016、2017、2019、2022版本,标准版2016 SP2及以上版本、2017、2019、2022版本)
  • RDS for SQL Server(企业版2012、2014、2016、2017、2019、2022版本,标准版2016 SP2及以上版本、2017、2019、2022版本)

GaussDB主备版(1.0.0及以上版本)

数据库账号权限要求

在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。

  • 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。
  • 连接源和目标数据库的账号密码修改后,请参考修改连接信息章节修改DRS任务的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
表2 数据库账号权限

类型名称

全量同步

增量、全量+增量同步

源数据库连接账号

需要具备sysadmin权限,或者待同步数据库的db_datareader或db_owner权限。

需要具备sysadmin权限,或者view server state权限以及待同步数据库的db_datareader或db_owner权限。

目标数据库连接账号

  • 库级权限:需要使用root或其他有sysadmin角色的DATABASE用户登录postgres基库,赋予用户DATABASE的CREATE、CONNECT权限。
  • SCHEMA级权限:需要使用 root、或其他有sysadmin角色的DATABASE用户、或使用数据库的OWNER用户登录数据库,赋予用户SCHEMA的CREATE、USAGE权限。
  • 表级权限:需要使用 root、或其他有sysadmin角色的DATABASE用户、或使用数据库的OWNER用户登录数据库 ,赋予用户SCHEMA下所有表的SELECT,UPDATE,INSERT和DELETE权限。
  • 目标库使用gsloader等工具创建相关系统表(如 public.pgxc_copy_error_log,public.gs_copy_summary)时,DRS访问相关系统表需要有系统表的all privilege权限,详细信息可参考《GaussDB工具参考》

支持的同步对象范围

在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查

表3 支持的同步对象

类型名称

使用须知

同步对象范围

  • 支持的字段类型

    TINYINT、SMALLINT、INT、BIGINT、DECIMAL、NUMERIC、FLOAT、REAL、SMALLMONEY、MONEY、BIT、DATE、SMALLDATETIME、DATETIME、DATETIME2、DATETIMEOFFSET、TIME、TIMESTAMP、XML、CHAR、VARCHAR、NCHAR、NVARCHAR、BINARY、VARBINARY、IMAGE、HIERARCHYID、NTEXT、TEXT、UNIQUEIDENTIFIER。

  • 不支持的字段类型:SQL_VARIANT、GEOMETRY、GEOGRAPHY。
  • 全量同步的范围
    • 支持选中表的表结构、数据和索引。
    • 同步表结构时支持以下函数作为默认值:now、newid、getutcdate、getdate。将这些函数作为default值时,需要目标库也有相同功能的函数。对于目标库不存在对应函数的情况,可能会出现以下结果:

      1. 默认值函数可能会被置空。

      2. 创建表失败,导致对象对比不一致或者任务失败。

    • 同步对象的库名、表名只能包含如下字符:字母、数字、下划线和中划线,库名长度不能超过64个字符。
    • 同步对象选择的表个数不能超过1000。对于超过1000个表的情况,建议分批次同步(待上一个同步任务结束后,再重新创建任务)。
    • 不支持同步源数据库中开启TDE(Transparent Data Encryption)加密的数据库。若不需要同步TDE加密的库,请在对象选择中去掉;若需要同步TDE加密的库,请先将TDE关闭。
    • 不支持列加密。
    • 全量阶段同步表结构时,源数据库自增列同步到目标端为普通列,不同步自增属性。
    • 单全量支持同步源端计算列到目标端普通列。
  • 增量同步的范围
    • 支持DML(Data Manipulation Language):包括INSERT、UPDATE、DELETE。
    • 不支持DDL(Data Definition Language)。
    • 增量不支持同步源端计算列。

注意事项

为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考预检查项。除了预检查项目之外,您还需要注意的事情参见表4

表4 注意事项

类型名称

使用和操作限制

源数据库限制

源数据库如果开启客户端配置中的“强制协议加密(Force Protocol Encrypton)”,必须同时开启“信任服务器证书(trust server certificate)”,如下图1所示:
图1 查看客户端属性

使用限制

通用:

  • 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。
  • 请勿在目标库做写入操作,否则可能导致数据不一致。
  • 为保证同步任务正常和数据的一致性,如有以上诉求,建议在业务低峰期时重新创建DRS任务。

全量同步阶段:

请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。

增量同步阶段:

  • 支持DML(Data Manipulation Language):包括INSERT、UPDATE、DELETE。
  • 不支持DDL操作,源数据库进行的DDL操作不会同步到目标数据库。
  • 不支持大数据类型IMAGE、TEXT、NTEXT的删除操作。
  • 不支持DELETE和UPDATE目标端主键类型为BLOB、TEXT、CLOB、NCLOB、BYTEA的表。
  • 单增量任务再编辑增加同步对象时,在子任务变更结束前,不建议对新增同步的表进行DML操作,否则可能导致部分数据无法同步到目标数据库。

同步对比阶段:

  • 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。
  • 在增量同步过程中做对比时,源库如果存在写入,则对比结果可能不一致。
  • 不支持在全量同步过程中做对比。
  • 不支持数据对比过程中做限速。

常见故障排查:

  • 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。

其他限制

  • 同步表结构时支持以下函数作为默认值:now、newid、getutcdate、getdate。将这些函数作为default值时,需要目标数据库也有相同功能的函数。对于目标数据库不存在对应函数的情况,可能会出现以下结果:
    • 默认值函数可能会被置空。
    • 创建表失败,导致对象对比不一致或者任务失败。
  • 不支持源数据库主备切换,源数据库主备切换会导致同步任务失败。
  • 不支持源数据库Microsoft SQL Server为TLS 1.0、TLS 1.1协议的同步,如果需要同步,建议源库升级到TLS 1.2及以上版本。
  • 不建议在数据库中使用日期类型做主键,因存在精度损失,该特性影响DRS增量场景下对 UPDATE、DELETE语句的同步。
  • 目标数据库为Oracle兼容模式时,会将写入的空字符串作为NULL处理,源数据库存在空字符串且具有非空约束时,会导致写入失败。
  • DRS全量同步表结构时,目标库存在与某用户名称同名的schema,用其他用户进行同步表结构到schema时,需要使用grant [role] to [role]的方式为此用户赋权,否则可能因为无法创建表结构而导致同步失败。
  • 对象名同步到目标库后会转换成小写,因此选择的源库表中不能存在表名称字母相同但大小写不同的表,否则会导致同步失败。
  • 因为部分SQL Server(例如Azure SQL)不支持use语法,不支持同步多库,所以如果需要同步多库时请创建多个同步任务。

操作步骤

本小节以Microsoft SQL Server->GaussDB主备版的入云同步为示例,介绍如何使用数据复制服务配置公网网络场景下的实时同步任务。

  1. 在“实时同步管理”页面,单击“创建同步任务”。
  2. 在“同步实例”页面,填选区域、项目、任务名称、描述、同步实例信息,单击“开始创建”

    • 任务信息
      图2 同步任务信息
      表5 任务和描述

      参数

      描述

      区域

      当前所在区域,可进行切换。

      项目

      当前区域对应的项目,可进行切换。

      任务名称

      任务名称在4到50位之间,必须以字母开头,可以包含字母、数字、中划线或下划线,不能包含其他的特殊字符。

      描述

      描述不能超过256位,且不能包含! = < > & ' " \ 特殊字符。

    • 同步实例信息
      图3 同步实例信息
      表6 同步实例信息

      参数

      描述

      数据流动方向

      选择“入云”

      源数据库引擎

      选择“Microsoft SQL Server”

      目标数据库引擎

      选择GaussDB主备版”

      网络类型

      此处以“公网网络”为示例,可选“公网网络”“VPC网络”“VPN、专线网络”

      • VPC网络:适合云上同账号同Region同VPC场景下数据库之间的同步。
      • 公网网络:适合通过公网网络把其他云下或其他平台的数据库同步到目标数据库,该类型要求数据库绑定弹性公网IP(EIP)。
      • VPN、专线网络:适合VPN、专线、CC、VPCEP、或者用户已打通VPC对等连接的网络场景,实现其他云下自建数据库与云上数据库同步、云上同Region跨账号、或云上跨Region的数据库之间的同步。

      目标数据库实例

      目标数据库为GaussDB主备版实例。

      同步实例所在子网

      请选择同步实例所在的子网。也可以单击“查看子网”,跳转至“网络控制台”查看实例所在子网帮助选择。

      默认值为当前所选数据库实例所在子网,请选择有可用IP地址的子网。为确保同步实例创建成功,仅显示已经开启DHCP的子网。

      同步模式

      DRS任务支持的同步模式,此处以“全量+增量”为示例。DRS全量、增量底层实现原理可参考产品架构和功能原理

      • “全量+增量”

        该模式为数据持续性实时同步,通过全量过程完成目标端数据库的初始化后,增量同步阶段通过解析日志等技术,将源端和目标端数据保持数据持续一致。

      • “全量”

        该模式为数据库一次性同步,适用于可中断业务的数据库同步场景,全量同步将非系统数据库的全部数据库对象和数据一次性同步至目标端数据库。

      • “增量”

        增量同步通过解析日志等技术,将源端产生的增量数据同步至目标端。

      指定公网IP

      网络类型选择“公网网络”时可见,选择为DRS实例绑定的弹性公网IP。任务创建时,DRS将会自动绑定该弹性公网IP,等待任务结束后将自动解绑该弹性公网IP。指定公网IP数量需要与实例数量匹配。

      公网网络迁移产生的数据传输费用收取标准请参见:弹性公网IP价格计算器

    • 可用区
      图4 可用区
      表7 任务可用区

      参数

      描述

      可用区

      DRS任务创建的可用区,选择跟源或目标库相同的可用区性能更优。

    • 企业项目和标签
      图5 企业项目和标签

      表8 企业项目和标签

      参数

      描述

      企业项目

      企业项目是一种云资源管理方式,企业项目管理服务提供统一的云资源按项目管理,以及项目内的资源管理、成员管理。请在下拉框中选择所在的企业项目,其中,default为默认项目。

      更多关于企业项目的信息,请参见《企业管理用户指南》

      如果需要自定义企业项目,请在控制台右上角单击“企业”,进入“企业项目管理”页面创建,具体请参见《企业管理用户指南》中“创建企业项目”的内容。

      标签

      • 可选配置,对同步任务的标识。使用标签可方便管理您的任务。每个任务最多支持20个标签配额。
      • 如果您的组织已经设定DRS的相关标签策略,则需按照标签策略规则为任务添加标签。标签如果不符合标签策略的规则,则可能会导致任务创建失败,请联系组织管理员了解标签策略详情。
      • 任务创建成功后,您可以单击任务名称,在“标签”页签下查看对应标签。关于标签的详细操作,请参见标签管理

    对于创建失败的任务,DRS默认保留3天,超过3天将会自动结束任务。

  3. 在“源库及目标库”页面,同步实例创建成功后,填写源库信息和目标库信息,单击“源库和目标库”处的“测试连接”,分别测试并确定与源库和目标库连通后,勾选协议,单击“下一步”

    测试连接时需要确保DRS任务与源库、目标库的连通性。

    • 网络连通性:确保源库和目标库允许DRS访问,通常至少需要放通DRS的IP。公网网络的DRS任务放通DRS的公网IP,VPC网络、VPN、专线网络的DRS任务放通DRS的内网IP,可参考网络准备章节进行网络打通。
    • 账号连通性:确保源库和目标库允许DRS通过用户名和密码访问。
    图6 源库信息
    表9 源库信息

    参数

    描述

    数据库类型

    选择“RDS实例”。

    数据库实例名称

    选择源数据库Microsoft SQL Server实例。

    数据库用户名

    源数据库Microsoft SQL Server的用户名。

    数据库密码

    源数据库Microsoft SQL Server的用户名所对应的密码。

    图7 目标库信息
    表10 目标库信息

    参数

    描述

    数据库实例名称

    默认为创建任务时选择的GaussDB主备版实例,不可进行修改。

    数据库用户名

    目标数据库的用户名。

    数据库密码

    目标数据库的用户名所对应的密码。

    源和目标数据库用户名和密码将在同步过程中被加密暂存到数据库和同步实例主机上,待该任务删除后会永久清除。

  4. “设置同步”页面,选择同步对象类型和同步对象,单击“下一步”

    图8 同步模式
    表11 同步对象

    参数

    描述

    流速模式

    流速模式支持限速和不限速,默认为不限速。限速模式只对全量阶段生效,增量阶段不生效。

    • 限速

      自定义的最大同步速度,全量同步过程中每个任务(多任务时为每个子任务)的同步速度将不会超过该速度。

      当流速模式选择了“限速”时,您需要通过流速设置来定时控制同步速度。流速设置通常包括限速时间段和流速大小的设置。默认的限速时间段为“全天限流”,您也可以根据业务需求选择“时段限流”。自定义的时段限流支持最多设置10个定时任务,每个定时任务之间不能存在交叉的时间段,未设定在限速时间段的时间默认为不限速。

      流速的大小需要根据业务场景来设置,不能超过9999MB/s。

      图9 设置流速模式
    • 不限速
      对同步速度不进行限制,通常会最大化使用源数据库的出口带宽。该流速模式同时会对源数据库造成读消耗,消耗取决于源数据库的出口带宽。比如源数据库的出口带宽为100MB/s,假设高速模式使用了80%带宽,则同步对源数据库将造成80MB/s的读操作IO消耗。
      说明:
      • 限速模式只对全量阶段生效,增量阶段不生效。
      • 您也可以在创建任务后修改流速模式。具体方法请参见修改流速模式

    全量同步对象类型

    全量同步对象类型,可选同步表结构、同步数据、同步索引,根据实际需求进行选择要同步内容。

    • 同步数据为必选项。
    • 选择同步表结构的时候目标库不能有同名的表。
    • 不选同步表结构的时候目标库必须有相应的表,且要保证表结构与所选表结构相同。

    增量阶段冲突策略

    该冲突策略特指增量同步中的冲突处理策略,全量阶段的冲突默认忽略。冲突策略目前支持如下形式:

    • 忽略

      当同步数据与目标数据库已有数据冲突时(主键/唯一键存在重复等),将跳过冲突数据,继续进行后续同步。选择忽略可能导致源库与目标库数据不一致。

    • 覆盖

      当同步数据与目标数据库已有数据冲突时(主键/唯一键存在重复等),将覆盖原来的冲突数据。

    DML同步

    选择需要同步的DML操作,默认都勾选。

    不勾选Delete则不会同步源库增量数据中的Delete语句,可能会导致数据不一致,因此存在数据冲突或任务失败的风险。

    同步对象

    左侧框是源数据库对象,右侧框是已经选择的对象,同步对象支持表级同步,您可以根据业务场景选择对应的数据进行同步。

    • 在同步对象右侧已选对象框中,可以使用对象名映射功能进行源数据库和目标数据库中的同步对象映射,具体操作可参考对象名修改(对象名映射)
    • 同步对象选择的表个数不能超过1000。对于超过1000个表的情况,建议分批次同步(待上一个同步任务结束后,再重新创建任务)。
    说明:
    • 选择对象的时候支持对展开的库进行搜索,以便您快速选择需要的数据库对象。
    • 如果有切换源数据库的操作或源库同步对象变化的情况,请在选择同步对象前单击右上角的,以确保待选择的对象为最新源数据库对象。
    • 当对象名称包含空格时,名称前后的空格不显示,中间如有多个空格只显示一个空格。
    • 选择的同步对象名称中不能包含空格。

    启动位点

    步骤2的同步模式选择“增量”时可见,增量同步的启动位点,任务的源库日志从位点后开始获取(不含当前启动位点)。

    若不指定,以当前数据库lsn位点启动(SQL Server为cdc.lsn_time_mapping系统表中 start_lsn列 (LSN) 的最大日志序列号)

    若指定,有效lsn范围为:[待同步表cdc中保留最小lsn, 当前数据库lsn],同步>指定lsn后的数据变更

    1、查询待同步表cdc中保留最小lsn:

    select min(start_lsn) as minLsn from cdc.change_tables where source_object_id in (OBJECT_ID('[schemaXXX].[tableXXX]'));

    当捕获实例不存在或调用方未获得访问与该捕获实例关联的更改数据的授权时,将返回 0x00000000000000000000

    2、查询当前数据库lsn

    select sys.fn_cdc_get_max_lsn ();

    具体请参考 DRS增量同步怎样填启动位点

  5. “预检查”页面,进行同步任务预校验,校验是否可进行。

    • 查看检查结果,如有不通过的检查项,需要修复不通过项后,单击“重新校验”按钮重新进行任务预校验。

      预检查不通过项处理建议请参见《数据复制服务用户指南》中的“预检查不通过项修复方法”。

    • 预检查完成后,且所有检查项结果均通过时,单击“下一步”

      所有检查项结果均通过时,若存在请确认项,需要阅读并确认详情后才可以继续执行下一步操作。

  6. “任务确认”页面,设置同步任务的启动时间、任务异常通知设置、SMN主题、时延阈值、任务异常自动结束时间,并确认同步任务信息无误后,勾选协议,单击“启动任务”,提交同步任务。

    图10 任务启动设置

    表12 任务启动设置

    参数

    描述

    启动时间

    同步任务的启动时间可以根据业务需求,设置为“立即启动”或“稍后启动”。

    说明:

    预计同步任务启动后,会对源数据库和目标数据库的性能产生影响,建议选择业务低峰期,合理设置同步任务的启动时间。

    任务异常通知设置

    该项为可选参数,开启之后,选择对应的SMN主题。当同步任务状态、时延指标或数据异常时,系统将发送通知。

    SMN主题

    “任务异常通知设置”项开启后可见,需提前在SMN上申请主题并添加订阅。

    SMN主题申请和订阅可参考《消息通知服务用户指南》

    时延阈值

    在增量同步阶段,源数据库和目标数据库之间的同步有时会存在一个时间差,称为时延,单位为秒。

    时延阈值设置是指时延超过一定的值后(时延阈值范围为0到3600s),DRS可以发送告警通知。告警通知将在时延稳定超过设定的阈值6min后发送,避免出现由于时延波动反复发送告警通知的情况。

    说明:
    • 当时延阈值设置为0时,不会发送通知给收件人。
    • 首次进入增量同步阶段,会有较多数据等待同步,存在较大的时延,属于正常情况,不在此功能的监控范围之内。
    • 设置时延阈值之前,需要设置任务异常通知。

    数据异常通知

    该项为可选参数,开启之后,当同步任务数据异常时,系统将发送通知。

    任务异常自动结束时间(天)

    设置任务异常自动结束天数,输入值必须在14到100之间,默认值14。

    说明:
    • 仅按需计费任务支持设置任务异常自动结束时间,包年/包月任务不支持。
    • 异常状态下的任务仍然会计费,而长时间异常的任务无法续传和恢复。设置任务异常自动结束天数后,异常且超时的任务将会自动结束,以免产生不必要的费用。

  7. 同步任务提交后,您可在“实时同步管理”页面,查看并管理自己的任务

    • 您可查看任务提交后的状态,状态请参见任务状态说明
    • 在任务列表的右上角,单击刷新列表,可查看到最新的任务状态。
    • 对于未启动、状态为配置中的任务,DRS默认保留3天,超过3天DRS会自动删除后台资源,当前任务状态不变。当用户再次配置时,DRS会重新申请资源,此时DRS任务IP会发生改变。
    • 对于公网网络类型的任务,由于DRS需要在任务结束后删除后台资源,所以该任务绑定的弹性公网IP需要等待一段时间,才能恢复为解绑状态。