影子表同步

数据管理DMS的影子表同步功能支持根据源表的表结构自动在当前库中创建影子表(新的数据表名是通过在源表名上增加前缀或后缀的方式生成的),支持周期性同步,适用于全链路压测等场景。

前提条件

  • 支持的数据库类型如下:

    • MySQL:RDS MySQLPolarDB MySQL版MyBase MySQLPolarDB分布式版AnalyticDB MySQL 3.0、其他来源MySQL

    • SQL Server:RDS SQL ServerMyBase SQL Server、其他来源SQL Server

    • PostgreSQL:RDS PostgreSQLPolarDB PostgreSQL版MyBase PostgreSQLAnalyticDB PostgreSQL版、其他来源PostgreSQL

    • MariaDB:RDS MariaDB、其他来源MariaDB

    • OceanBase MySQL模式

    • PolarDB PostgreSQL版(兼容Oracle)

  • 拥有来源库的查询与变更权限。更多信息,请参见查看我的权限

  • 来源库已打开开启执行能力开关。更多信息,请参见开启执行能力

    说明

    若未开启,库表同步仅能对比表结构差异,无SQL执行能力。

操作步骤

  1. 登录数据管理DMS 5.0
  2. 在顶部菜单栏中,选择数据库开发 > 结构变更 > 影子表同步

    说明

    若您使用的是极简模式的控制台,请单击控制台左上角的2023-01-28_15-57-17.png图标,选择全部功能 > 数据库开发 > 结构变更 > 影子表同步

  3. 库表同步工单申请页面,配置工单参数。部分参数说明如下:

    参数

    说明

    来源库

    搜索并选择创建影子表的来源库。

    说明

    您需要有该库的查询与变更权限。更多信息,请参见查看我的权限

    前缀 / 后缀

    支持以“前缀+源表名”(默认)或“源表名+后缀”的格式创建影子表名称,并且支持自定义前、后缀。

    影子表名默认为__test_源表名

    同步的表

    选择需要同步的表:

    • 部分表:选定的表在当前库中创建影子表。

    • 全部表:来源库中所有的表都会在当前库中创建影子表。

    同步策略

    选择同步的频率,支持的选项:

    • 立即同步:立即执行同步任务(仅同步一次)。

    • 定时同步:定期定时执行同步任务。您可以根据需求配置Crontab表达式。更多信息,请参见Crontab表达式

      任务最小时间间隔为1小时,默认每天02:00执行任务。

    是否忽略报错

    选择是否忽略报错,支持的选项:

    • 不忽略:在执行过程中,遇到出错则中断后面的SQL脚本,不再执行。

    • 忽略:在执行过程中,遇到错误会跳过当前失败SQL脚本,继续往下执行,并执行完所有SQL脚本。

  4. 单击提交申请
    系统将进行结构分析。
    说明 若数据结构在此过程中发生变更,请在工单中单击重新分析
  5. 单击提交审批,等待审批通过。
  6. 单击提交,同步目标库
  7. 确认待执行的SQL脚本,单击确认进行同步
    单击后,系统将开始执行同步脚本,您可以单击详情按钮,查看执行日志详细,包括执行语句、执行所用时间、调度详情等信息。

Crontab表达式

时间间隔的单位可以是秒、分钟、小时、日、周或月的任意组合。Crontab表达式是一组字符串,由5个空格隔开,6个域组合而成,取值说明如下:

允许的数值

允许的特殊字符

备注

0-59

- * /

-

0-59

- * /

-

小时

0-23

- * /

-

日期

1-31

- * ? / L W C

-

月份

1-12

JAN~DEC - * /

-

星期

1-7

SUN~SAT - * ? / L C #

1表示星期天,2表示星期一,依次类推。

说明

日期和星期两个域,仅能二选一,因为这两个域会相互影响。若指定了日期域,请在星期域中填入?,反之相同。

特殊字符的含义说明:

字符

含义

示例

*

表示匹配域的所有值。

在分域使用 *,表示每分钟都会触发事件。

?

表示匹配域的任意值,但只能用在日期和星期两个域,因为这两个域会相互影响。

在每月的20号触发调度的写法:13 13 15 20 * ?

说明

日期域已指定了20号,最后一位星期域只能用?,不能使用*

-

表示起止范围。

在分域使用5-20,表示在指定小时的第5分钟到第20分钟, 每分钟触发一次事件。

/

表示起始时间开始触发,然后每隔固定时间触发一次。

在分域使用 5/20,表示在指定小时的第5分钟触发一次事件,然后每隔20分钟触发一次事件。例如,第二次触发事件的时间是指定小时的第25分钟。

,

表示列出枚举值。

在分域使用5,20,表示在指定小时的第5分钟和第20分钟分别触发一次事件。

L

表示最后,只能出现在日和星期两个域。

在星期域使用5L,表示在指定月份的最后一个星期四触发事件。

W

表示有效工作日(周一到周五),只能出现在日这个域,系统将在离指定日期最近的有效工作日触发事件。

在日域使用5W:

  • 如果指定月份的第5日为工作日,事件在5日触发,且仅在指定月份生效。

  • 如果指定月份的第5日为星期六,最近的工作日为星期五,即事件在指定月份的4日触发。

  • 如果指定月份的第5日为星期日,则事件在指定月份的6日(周一)触发。

LW

这两个字符可以连用,表示在某个月最后一个工作日。

#

表示每个月第几个星期几,只能出现在星期这个域。

在星期域使用4#2,表示在指定月份的第二个星期三触发事件。

  • 4表示星期三。

  • 2表示指定月份的第二个星期。

Crontab表达式示例:

  • 每星期六、星期日的23:00执行:0 0 23 ? * 7,1

  • 每月5、15、25日的09:30执行:0 30 9 5,15,25 * ?

  • 每隔两天的零点执行:0 0 0 */2 * ?