跳到主要内容

Sybase 迁移同步到 PostgreSQL

NineData 数据复制支持将 Sybase 的数据复制到 PostgreSQL,支持全量复制和增量复制。

功能介绍

NineData 数据复制支持数据源之间的结构、全量数据、增量数据的高性能复制,对于部分数据源,还提供双向复制功能,实现快捷构建异地多活业务架构。

  • 结构:支持同构及异构数据源之间的对象结构复制,很大程度上降低了两个数据源之间的数据复制门槛。
  • 全量数据:通过智能数据分片实现行级并发批量复制能力,有效保障复制性能。自主研发的新型断点续传技术,保证无主键表的数据准确性。
  • 增量数据:支持全对象类型的 DML|DDL 增量数据复制,结合行级并发、热点合并等技术,提供强劲复制性能。
  • 双向数据实时复制:直接多个节点之间的数据双向复制,保证所有节点的数据均保持最新状态。

通过以上功能,可以轻松高效地实现全量|增量数据复制全量|增量数据迁移全量|增量数据同步数据集成不停机无缝迁移等场景,为企业提供灵活和可靠的数据复制解决方案。

前提条件

  • 已将源和目标数据源添加至 NineData。如何添加,请参见创建数据源

  • 已在目标数据源(PostgreSQL)中手动创建表,该表结构必须和源数据源(Sybase)中需要复制的表结构一致。由于当前不支持 Sybase 到 PostgreSQL 的结构复制,您可以根据业务需求调整目标表结构。常见数据类型映射和建表建议,请参见附录二

  • 如需进行双向复制,已为参与复制任务的所有数据源添加多活标记。如何添加,请参见本文附录

  • 源和目标数据源的版本见下表。

    源数据源目标数据源
    Sybase 16.0、15.7PostgreSQL 16、15、14
  • 您必须拥有源数据源和目标数据源的如下权限。

    复制类型
    Sybase
    PostgreSQL
    单向复制全量和增量replication_role、sso_roleAll Privileges on Schema、All Privileges on All Tables
    双向复制全量和增量sa_roleDatabase Owner、Table Owner、All Privileges on Schema、Replication Role
  • 如需查看 Sybase → PostgreSQL、PostgreSQL → Sybase,以及双向复制场景的权限差异、触发器说明和授权示例,请参见PostgreSQL 与 Sybase 复制链路权限说明

使用限制

  • 如果您的 Sybase 数据源是主备架构部署,并且需要进行双向复制,则在录入数据源的时候,必须同时录入主节点(Primary Server)和备节点(Staging Server)的连接地址,否则数据从 PostgreSQL 回流至 Sybase 时会失败。

    sybase_masterslave

  • 执行数据同步前需评估源数据源和目标数据源的性能,同时建议业务低峰期执行数据同步。否则全量数据初始化时将占用源数据源和目标数据源一定的读写资源,导致数据库负载上升。
  • 需要确保同步对象中的每张表都有主键或唯一约束、列名具有唯一性,否则可能会重复同步相同数据。

字段映射说明

  • 在该链路的映射页中,目标字段需要填写 PostgreSQL 目标表中已经存在的列名。
  • 配置映射 > 映射与过滤 > 字段表达式 中,可以为已存在的目标列配置字段表达式。

关于字段表达式的入口、使用规则和常见写法,请参见 ETL 函数说明

操作步骤

商业化通知

NineData 数据复制产品已商业化,您仍然可以保有 10 条复制任务免费使用,注意事项如下:

  • 10 条复制任务中可以包含 1 条增量复制任务,规格为 Micro
  • 状态为已终止的任务不算在 10 条任务的限制内,如果您已经创建了 10 条复制任务,还想要继续创建,可以先终止之前的复制任务,然后再创建新任务。
  • 创建复制任务时,仅可选择您已购买的复制规格,未购买的规格将以灰度显示,无法选择。如需购买,请通过页面右下角的客服图标联系我们。
  1. 登录 NineData 控制台

  2. 在左侧导航栏单击数据复制。

  3. 数据复制页面,单击右上角的创建复制

  4. 数据源与目标页签,按照下表进行配置,并单击下一步

    参数
    说明
    任务名称输入数据同步任务的名称,为了方便后续查找和管理,请尽量使用有意义的名称。最多支持 64 个字符。
    源数据源同步对象所在的数据源。
    目标数据源接收同步对象的数据源。
    复制方式选择复制方式。
    • 单向复制:从源数据源到目标数据源方向的单向数据复制任务。
    • 双向复制:源和目标两个数据源之间进行的双向增量数据复制任务。
    复制类型仅在复制方式单向复制时显示。
    • 全量复制:同步源数据源的所有对象和数据,即全量数据复制。右侧的开关为周期性全量复制的开关,更多信息,请参见周期性全量复制
    • 增量复制:在全量同步完成后,基于源数据源的日志进行增量同步。
    正向复制类型源数据源到目标数据源方向的复制类型,仅在复制方式双向复制时显示。其中增量复制默认选中,无法关闭。
    正向增量开始时间复制方式双向复制,且正向复制类型仅为增量复制时需要选择。
    • 从启动时间开始:以当前复制任务开始时间为基准,进行增量复制。
    • 自定义时间:选择增量复制开始的时间点,您可以根据您的业务所在地域按需选择时区。
    反向复制类型目标数据源到源数据源方向的复制类型,仅在复制方式双向复制时显示。仅支持增量复制,且默认选中无法关闭。
    目标库同名对象处理策略
    • 预检查报错并停止任务:预检查阶段检测到目标表中存在数据时,停止任务。
    • 忽略存量数据,追加写入:预检查阶段检测到目标表中存在数据时,忽略该部分数据,追加写入其他数据。
    • 清空存量数据,重新写入:预检查阶段检测到目标表中存在数据时,删除该部分数据,重新写入。
  5. 选择复制对象页签,配置下列参数,然后单击下一步

    参数
    说明
    复制对象选择需要复制的内容,您可以选择全部实例复制源库所有内容,也可以选择自定义对象,在源对象列表中选中需要复制的内容,单击>添加到右侧目标对象列表。

    如果您需要创建多条相同复制对象的复制链路,可以创建一个配置文件,在新建任务的时候导入即可。单击右上角的导入配置,再单击下载模板,将配置文件模版下载到本地,编辑完成后单击上传文件上传该配置文件即可实现批量导入。配置文件说明:

    参数
    说明
    source_table_name需同步的对象所在的源表名。
    destination_table_name接收同步对象的目标表名。
    source_schema_name需同步的对象所在的源 Schema 名。
    destination_schema_name接收同步对象的目标 Schema 名。
    source_database_name需同步的对象所在的源库名。
    target_database_name接收同步对象的目标库名。
    column_list需要同步的字段列表。
    extra_configuration额外的配置信息,您可以在这里配置如下信息:
    • column_rules:用于定义字段的映射关系与取值规则。字段说明:
      • column_name:原列名。
      • destination_column_name:指定目标列名。
      • column_value:指定字段值,可为 SQL 函数或常量值。
    • filter_condition:用于指定行级数据的过滤条件,只有满足条件的行会被复制。
    提示
    • extra_configuration 的示例内容如下:

      {
      "extra_config":{
      "column_rules":[
      {
      "column_name": "created_time", //指定需要执行列名映射的原列名。
      "destination_column_name": "migrated_time", //目标列名映射为 "migrated_time"。
      "column_value": "current_timestamp()" //将列的字段取值更改为当前时间戳。
      }
      ],
      "filter_condition": "id != 0" //ID 不为 0 的行才会同步。
      }
      }
    • 配置文件的整体示例内容请参见下载的模版。

  6. 在"配置映射"页签,系统默认选择目标数据源中的同名数据库,如果不存在,则需要手动选择目标库,然后单击保存并预检查。如果在配置映射阶段,源和目标数据源中有更新,可以单击页面右上角的刷新元数据按钮,重新获取源和目标数据源的信息。

  7. 预检查页签,等待系统完成预检查,预检查通过后,单击启动任务

    提示
    • 您可以勾选开启数据一致性对比。在同步任务完成后,自动开启基于源数据源的数据一致性对比,保证两端数据一致。根据您选择的复制类型开启数据一致性对比的启动时机如下:
      • 全量复制:全量复制完成后启动。
      • 全量复制+增量复制增量复制:当增量数据首次和源数据源一致且延迟为 0 秒时启动。您可以单击查看详情,在复制详情页面中查看同步延迟。sync_delay
    • 如果预检查未通过,需要单击目标检查项右侧操作列的详情,排查失败的原因,手动修复后单击重新检查重新执行预检查,直到通过。
    • 检查结果警告的检查项,可视具体情况修复或忽略。
  8. 启动任务页面,提示启动成功,同步任务开始运行。此时您可以进行如下操作:

    • 单击查看详情查看同步任务各个阶段的执行情况。
    • 单击返回列表可以返回数据复制任务列表页面。

查看同步结果

  1. 登录 NineData 控制台

  2. 在左侧导航栏单击数据复制 > 数据复制

  3. 数据复制页面单击目标同步任务的任务 ID,页面说明如下。

    result_sybase

    序号
    功能
    说明
    1同步延迟源数据源和目标数据源之间的数据同步延迟,0 秒表示两端之间没有延迟,此时您可以选择将业务切换到目标数据源,实现平滑迁移。
    2配置告警配置告警后,系统会在任务失败时通过您选择的方式通知您。
    3更多
    • 暂停:暂停写入至目标,此时源端的读取任务将持续运行,仅状态为运行中的任务可选。
    • 暂停增量 Reader:暂停源端读取任务,仅应在任务对源端业务产生影响时使用,暂停期间源端日志被清理将可能无法写入完整的增量数据至目标。仅状态为运行中的任务可选。
    • 类似创建:创建一个和当前任务配置相同的新复制任务。
    • 终止:结束未完成或监听中(即增量同步中)的任务,终止任务后无法重启任务,请谨慎操作。如果同步对象中包含触发器,会弹出触发器复制选项,请按需选择。
    • 删除:删除任务,任务删除后无法恢复,请谨慎操作。
    4全量复制(包含全量复制的场景下显示)展示全量复制的进度和详细信息。
    • 单击页面右侧的监控:查看全量复制过程中的各监控指标。全量复制过程中,还可以单击监控指标页面右侧的限流设置,限制每秒写入到目标数据源的行数(Row/S)。
    • 单击页面右侧的日志:查看全量复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    5增量复制(包含增量复制的场景下显示)展示增量复制的各项监控指标。
    • 单击页面右侧的查看线程:查看当前复制任务正在执行中的操作,包含:
      • 线程号:复制任务分多个线程执行复制操作,展示当前进行中的线程号。
      • 执行 SQL:当前线程正在执行中的 SQL 语句详情。
      • 提交响应时间:当前线程的响应时间,如果该数值变大,则代表当前线程可能由于某些原因卡住。
      • 事件时间:当前线程开启的时间戳。
      • 状态:当前线程的状态。
    • 单击页面右侧的限流设置:限制每秒写入到目标数据源的行数(Row/S)。
    • 单击页面右侧的日志:查看增量复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    6修改对象展示同步对象的修改记录。
    • 单击页面右侧的修改同步对象,可对同步对象进行配置。
    • 单击页面右侧的refresh:查看最新的信息。
    7数据对比展示源数据源和目标数据源之间对比的结果。如果您未开启数据对比,请单击页面中的开启数据对比
    • 单击页面右侧的重新对比:对当前源和目标两端数据重新发起对比。
    • 单击页面右侧的停止:对比任务开始后,可单击该按钮立即停止对比任务。
    • 单击页面右侧的日志:查看一致性对比的执行日志。
    • 单击页面右侧的监控(仅数据对比显示):查看对比 RPS(每秒对比的记录数)的走势图。单击详情可以查看更早之前的记录。
    • 在对比列表右侧操作列单击details数据页签下只在不一致情况下显示):查看源端和目标端的对比详情。
    • 在对比列表右侧操作列单击sql(不一致情况下显示):生成变更 SQL,您可以直接复制该 SQL 到目标数据源执行,修改不一致的内容。
    8查看反向在双向复制任务中,单击可查看目标数据源到源数据源的复制详情。
    9更多展示当前复制任务的详细信息。

附录:为参与复制的所有数据源添加多活标记

为防止发生数据循环复制,您需要为参与复制任务的所有数据源添加多活标记。

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击数据源管理 > 数据源

  3. 单击目标数据源 ID,打开数据源详情页面。

  4. 在数据源详情区域(即包含数据源名称、ID、创建人、创建时间等信息的区域),单击更多

  5. 找到多活标记,单击其右侧的edit图标。

  6. 输入多活标记,单击确定

    提示
    • 多活标记可包含 1~64 个字符。
    • 多活标记需为全局唯一,不可和其他多活标记重复。

附录二:数据类型映射与目标表建表建议

Sybase 到 PostgreSQL 的复制当前不支持结构复制,以下内容用于手动建表参考。实际创建目标表时,您可以根据字段语义、精度要求、应用兼容性和查询场景,对 PostgreSQL 字段类型和约束进行调整。

数据类型映射表

类别Sybase 数据类型PostgreSQL 推荐类型可选类型及说明
字符CHAR(n)CHAR(n) / CHARACTER(n)需要保持定长语义时使用。
字符VARCHAR(n)VARCHAR(n) / CHARACTER VARYING(n)长度定义通常可直接沿用。
字符TEXTTEXT适合长文本字段。
字符UNITEXTTEXT如果业务仍需长度限制,也可改为 VARCHAR(n)
字符UNICHAR(n)CHAR(n)如果业务更关注变长存储,也可改为 VARCHAR(n)
字符UNIVARCHAR(n)VARCHAR(n)常用于 Unicode 变长字符。
字符NCHAR(n)NCHAR(n) / CHAR(n)PostgreSQL 中也可统一使用 CHAR(n)
字符NVARCHAR(n)VARCHAR(n)如果不希望保留长度限制,也可改为 TEXT
数值BIGINTBIGINT适合 64 位有符号整数。
数值UNSIGNED BIGINTNUMERICPostgreSQL 不支持无符号整型;如需保留更大正数范围,可使用 NUMERICDECIMAL(p,0)
数值INTINTEGER可写作 INTINT4
数值UNSIGNED INTBIGINT如果业务数据范围确认不会超出 INTEGER,也可自行降为 INTEGER
数值SMALLINTSMALLINT可写作 INT2
数值UNSIGNED SMALLINTINTEGER用于承接更大的正数范围。
数值TINYINTSMALLINTPostgreSQL 无 TINYINT
数值DECIMAL(p,s)NUMERIC(p,s)PostgreSQL 中 DECIMALNUMERIC 可按需要任选其一。
数值NUMERIC(p,s)NUMERIC(p,s)精度和小数位通常可直接沿用。
数值REALREAL对应单精度浮点。
数值FLOATDOUBLE PRECISION也可根据精度和兼容性要求改为 REALFLOAT8
数值DOUBLE PRECISIONDOUBLE PRECISIONFLOAT8 等价。
数值BITBIT(1)如果该字段表达的是布尔语义,也可改为 BOOLEAN
数值MONEYMONEY如果希望统一金额精度和运算规则,也可改为 NUMERIC(p,s)
数值SMALLMONEYMONEY也可按业务需要改为 NUMERIC(p,s)
二进制BINARY(n)BYTEAPostgreSQL 使用 BYTEA 承接定长和变长二进制内容。
二进制VARBINARY(n)BYTEABINARY(n) 一样通常映射到 BYTEA
二进制IMAGEBYTEA适合图片、文件等大对象二进制数据。
日期时间DATEDATE可直接沿用。
日期时间DATETIMETIMESTAMP如需显式声明,可写作 TIMESTAMP WITHOUT TIME ZONE
日期时间SMALLDATETIMETIMESTAMP(0)如果不强调秒级精度,也可直接使用 TIMESTAMP
日期时间TIMETIME可写作 TIME WITHOUT TIME ZONE
日期时间BIGDATETIMETIMESTAMP(6)如果对精度要求不高,也可直接使用 TIMESTAMP
日期时间BIGTIMEINTERVAL如果该字段表达的是一天内的时间点,也可改为 TIME;如果表达的是时长,建议使用 INTERVAL

目标表结构建议

Sybase 结构特性PostgreSQL 建议写法说明
IDENTITYGENERATED BY DEFAULT AS IDENTITY / GENERATED ALWAYS AS IDENTITY / SERIAL / BIGSERIAL由于目标表需要手动创建,可按 PostgreSQL 版本、回写行为和应用兼容性选择自增方案。
主键手动补充 PRIMARY KEY建议为同步对象保留主键;如果无法保留,至少应保证存在稳定的唯一约束。
唯一键手动补充 UNIQUE单列唯一键、多列唯一键都需要在目标端显式创建。
可空唯一键按业务语义决定是否保留 NULL如果既要允许空值,又要约束非空记录唯一性,可结合 PostgreSQL 的唯一索引策略单独设计。
普通索引手动补充 CREATE INDEX可在完成基础建表后按查询场景补充索引。
外键手动补充 FOREIGN KEY如果全量初始化阶段希望减少约束影响,也可在数据初始化后再补充。
命名规则按业务需要保留或调整对象名、列名如果使用保留字、特殊字符或大小写敏感名称,建议在 PostgreSQL 中使用双引号。

附录三:预检查项列表

检查项检查内容
源对象存在性检查检查目标端中存在的表,当前在源端是否存在
源数据源连接检查检查源数据源网关状态、实例是否可达、用户名及密码准确性
目标数据源连接检查检查目标数据源网关状态、实例是否可达、用户名及密码准确性
目标库权限检查检查目标数据库的账号权限是否满足要求
源库权限检查检查源数据库的账号权限是否满足要求
双向复制多活单元标记检查检查多活单元标记是否存在
目标库数据存在性检查检查待复制对象在目标数据库中是否已存在数据
目标库同名对象存在性检查检查待复制对象在目标数据库中是否已存在
循环链路检查检查环路是否存在