需求场景:
将整个Oracle数据库迁移到PostgreSQL,要求Oracle停机时间不超过12小时,而Oracle的数据量为200G左右,全量导出再导入PostgreSQL超过12小时。
对于这种情况,应使用ora2pg做全量,配合OracleGoldenGate(OGG)做增量。方法是:导出全量数据之前,Oracle用OGG捕获增量数据,这样在导出全量数据的时间段内的增量数据也被捕获下来,然后向PG导入全量数据,再用OGG向PG同步增量数据。这个过程中,会有一部分增量数据和全量数据重叠,但OGG可以妥善处理,见HANDLECOLLISIONS参数的说明
HANDLECOLLISIONS | NOHANDLECOLLISIONS
正因为OGG有这个功能,这种全量加增量的迁移模式,既可用于Oracle到Oracle的迁移(使用数据泵做全量),也可以用于Oracle到PG。
这个过程是一个逻辑复制的过程。
对于有主键的表,这种迁移方式非常适用,不会出现重复或缺少(只要严格按照步骤进行)。
对于没有主键或唯一键的表,这种迁移方式会引入重复记录。
下面记录了在公司系统上测试时,Oracle端和PG端OGG的配置和经验:
Oracle端OGG配置:
使用OGG从Oracle向PG同步,需要在Oracle和PG所在机器上分别安装各自版本的OGG。
为了数据的一致性,在全量导出之前,就要配置好Oracle端OGG,并开始捕获变更数据,但是并不向PG端应用这些变更数据,只有在全量导入PG之后,才在PG端应用变更数据。
下图1->2->3->4->5->6->7->8->9是OGG增量同步过程:
源端(左):
Extract进程通过分析Oracle redo/archive日志,捕获数据变更,结果写到Trail文件,Data pump进程读取Trail文件发给目标端。
目标端(右):
collector进程接收Trail并写到目标端目录,Replicat进程读取Trail,转换为对PG的操作。除了图中的Extract进程、Data pump进程、collector进程、Replicat进程和Trail文件,在源端和目标端还需开启manager进程,它负责控制Extract、Data pump、collecor和Replicat。
安装OGG:
源端安装Oracle OGG:213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip
目标端安装PG OGG:213000_ggs_Linux_x64_PostgreSQL_64bit.zip
PG端,解压后即完成安装,只需将安装目录加入环境变量PATH,cd到安装目录下执行ggsci。
Oracle端,以oracle用户,解压213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip
unzip 213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip -d ogg-for-oracle
cd ogg-for-oracle/fbo_ggs_Linux_x64_shiphome/Disk1/response
修改配置文件:
cp oggcore.rsp oggcore-setup.rsp
vim oggcore-setup.rsp
修改下面几项,例如:
INSTALL_OPTION=ora21c
SOFTWARE_LOCATION=/oracle/app/ogg21
START_MANAGER=false
然后执行:
cd ogg-for-oracle/fbo_ggs_Linux_x64_shiphome/Disk1
./runInstaller -silent -responseFile /home/oracle/ogg-for-oracle/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore-setup.rsp
OGG将安装在/oracle/app/ogg21目录下,配置环境变量:
export OGG_HOME=/oracle/app/ogg21
export LD_LIBRARY_PATH=/oracle/app/ogg21:$LD_LIBRARY_PATH
export PATH=/oracle/app/ogg21:$PATH
OGG增量同步需要Oracle端开启归档日志和补充日志,例如:
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER SYSTEM SET log_archive_dest='/mnt/disk01/oracle_archive_log';
ALTER DATABASE ARCHIVELOG;
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=TRUE;
ALTER DATABASE FORCE LOGGING;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE OPEN;
ARCHIVE LOG LIST;
(对于FLASHBACK功能,我的设想是,开启FLASHBACK功能后,对于无主键表,全量导出时指定SCN,向PG应用变更时,指定同样的SCN,这样可以避免引入重复行。)
配置Oracle端OGG:
进入安装目录cd $OGG_HOME,执行ggsci启动终端。以后的配置操作,都在这个终端下进行。
第一步,创建子目录,这是初始化步骤,只需要第一次进入GGSCI执行:
GGSCI > create subdirs
第二步,配置manager,编辑manager配置文件:
GGSCI > edit param mgr
PORT 37809 --监听端口
AUTOSTART ER *
AUTORESTART ER *
第三步,启动manager:
GGSCI > start manager
可选,关闭manager
GGSCI > stop manager
第四步,用户登录:
GGSCI中的操作,需要用户连接到数据库,这个用户要有足够权限。
例如,用户oggtest,给他赋予如下权限:
GRANT CREATE SESSION, ALTER SESSION,RESOURCE, CONNECT,SELECT ANY DICTIONARY,SELECT ANY TRANSACTION TO OGGTEST;
在GGSCI中连接Oracle
GGSCI >DBLOGIN USERID OGGTEST@172.32.150.13:1521/nlpass01 PASSWORD 123456
第五步,配置、启动Extract:
编辑Extract配置文件,文件名随便取(这里是extora),与对应Extract组名相同,编辑完后,$OGG_HOME/dirprm目录下将创建名为extora.prm的文本文件:
GGSCI >edit param extora
EXTRACT extora -- Extract组名
-- 客户端的编码,如果oracle字符串编码不是UTF8会转为UTF8
SETENV (NLS_LANG="AMERICAN_AMERICA.UTF8")
-- 连接Oracle服务器的信息,最好OGG与Oracle安装在同一台机器上
USERID oggtest@172.32.150.13:1521/nlpass01, PASSWORD 123456
-- discard文件,出错时可查看详细信息
DISCARDFILE ./dirrpt/extora.dsc, APPEND, MEGABYTES 1024
-- Trail文件路径,会生成多个Trail文件,文件名为前缀ex+文件编号
EXTTRAIL /mnt/disk03/ogg_trail/ex
--支持truncate
GETTRUNCATES
-- 捕获delete、update不使用压缩方式
NOCOMPRESSDELETES FETCHMISSINGCOLUMNS
NOCOMPRESSDELETES
NOCOMPRESSUPDATES
-- 需要捕获的表,每个表一行,全部列出,包含schema名
TABLE PAASTEST.ACT_EVT_LOG;
.....
更详细的命令和参数说明,参考:https://docs.oracle.com/goldengate/c1221/gg-winux/GWURF/summary-oracle-goldengate-commands.htm#GWURF884
创建Extract组:
一个Extract组代表逻辑上的Extract进程,执行add extract命令,创建Extract组,组名与前面配置文件里的EXTRACT参数相同:
GGSCI (dkapp12 as PAASTEST@nlpass01) >ADD EXTRACT extora,TRANLOG,BEGIN NOW
或者指定捕获时间点
GGSCI (dkapp12 as PAASTEST@nlpass01) >ADD EXTRACT extora,TRANLOG,BEGIN 2022-03-25 17:00
注册:
GGSCI (dkapp12 as PAASTEST@nlpass01) >register extract extora, database
(否则启动Extract时,会有ERROR OGG-02022 Logmining server does not exist on this Oracle database)
删除Extract组:
GGSCI >DELETE EXTRACT extora
GGSCI (dkapp12 as PAASTEST@nlpass01) >unregister extract extora, database
创建Trail文件:
GGSCI >ADD EXTTRAIL /mnt/disk03/ogg_trail/ex, EXTRACT extora, MEGABYTES 200
增量数据缓存在Trail文件里,Trail文件会有多个,以ex开头,在目录/mnt/disk03/ogg_trail/下,确保目录所在磁盘足够大。EXTRACT extora 是将Trail文件和Extract组关联,MEGABYTES 200表示每个Trail文件最大200M。
删除Trail文件:
DELETE EXTTRAIL /mnt/disk03/ogg_trail/ex
rm /mnt/disk03/ogg_trail/ex*
启动:
GGSCI >start extract extora
停止:
GGSCI >stop extract extora
查看状态:
GGSCI >info extora
GGSCI >stats extora
GGSCI >status extora
如果成功运行,会在本地Trail路径下应该生成文件,如果出错,查看错误原因:
GGSCI >view report extora
第六步,配置、启动Data Pump:
编辑Data Pump配置文件,文件名随便取(这里是pumpora):
GGSCI >edit param pumpora
-- Data Pump组名称
EXTRACT pumpora
-- 不处理数据,直接转发给目标端
PASSTHRU
-- 目标端IP和manager监听端口
RMTHOST 172.32.148.154, MGRPORT 11357
-- 目标端Trail文件所在目录,可以用绝对目录或相对目录,相对于OGG安装目录
-- 注意,目标端的trail文件是re开头的
RMTTRAIL /mnt/disk01/ogg-for-pg-21/dirdat/re
-- 需要转发给目的端的表名,每个表一行,包括schema名称
TABLE PAASTEST.ACT_EVT_LOG;
......
执行add extract命令,创建Data Pump组,Data Pump进程也是一种Extract进程,只因配置不同而功能不同。
GGSCI >ADD EXTRACT pumpora, EXTTRAILSOURCE /mnt/disk03/ogg_trail/ex
前面Data Pump配置文件里的组名,要与这里的pumpora相同,EXTTRAILSOURCE指前面extora的Trail文件。
创建远程(目标端)Trail文件路径:
Data Pump从本地Trail文件提取的变更,保存到远程Trail文件路径的位置,一个本地(源端)Trail文件可以分成多个远程Trail文件,在远程用多个Replicat同步,以增大速度。
GGSCI >ADD RMTTRAIL /mnt/disk01/ogg-for-pg-21/dirdat/re, EXTRACT pumpora, MEGABYTES 200
删除Data Pump组:
DELETE EXTRACT pumpora
删除远程Trail文件:
DELETE RMTTRAIL /mnt/disk01/ogg-for-pg-21/dirdat/re
rm /mnt/disk01/ogg-for-pg-21/dirdat/re*
启动:
(注意:这一步要先启动PG端的manager)
GGSCI >start extract pumpora
查看状态:
GGSCI >stats pumpora
GGSCI >status pumpora
GGSCI >info pumpora
如果成功运行,在远程的Trail目录下应该生成文件,如果出错,查看错误内容:
GGSCI >view report pump
如果要重新从第一个Trail文件的头部开始pump,就要删除pump再重建。pump主要就是把Extract产生的Trail文件复制到目标端的指定目录下。
多个Extract进程和多个Replicat进程
实际测试发现,增量同步时,在源端和目标端,只用一个Extract进程和一个Replicat进程,速度太慢。根据文档,可以配置一个Extract对应多个Replicat或多个Extract对应多个Replicat,目标端使用多个Replicat可增加同步速度,参考:
https://docs.oracle.com/goldengate/c1221/gg-winux/GWUAD/tuning-performance-oracle-goldengate.htm#GWUAD1139
测试环境700多个表,总数据量200G,配置3个Extract,产生3个本地Trail。在Extract的配置文件中,将700多个表分配到3个本地Trail。每个Pump对应一个Extract和它的本地Trail,Pump再把一个本地Trail里的表,分为多个远程Trail,三个Pump总共分出了20个远程Trail。在PG端,每个远程Trail创建一个Replicat进程向PG应用同步。实测这样的同步速度很快,延时很小,还可以进一步对于变更较快的表,数据量较大的表,和无主键的表,单独建立Extract-Pump-Replicat。
下面记录一下配置:
Extract配置:
DBLOGIN USERID PAASAPP@10.33.249.93:1521/platdb PASSWORD Paas1015
ADD EXTRACT ext1,TRANLOG,BEGIN 2022-03-24 18:00
ADD EXTRACT ext2,TRANLOG,BEGIN 2022-03-24 18:00
ADD EXTRACT ext3,TRANLOG,BEGIN 2022-03-24 18:00
register extract ext1, database
register extract ext2, database
register extract ext3, database
ADD EXTTRAIL /data5/ogg_trail_1/ex, EXTRACT ext1, MEGABYTES 200
ADD EXTTRAIL /data5/ogg_trail_2/ex, EXTRACT ext2, MEGABYTES 200
ADD EXTTRAIL /data5/ogg_trail_3/ex, EXTRACT ext3, MEGABYTES 200
Extract配置文件示例:
EXTRACT ext1
SETENV (NLS_LANG="AMERICAN_AMERICA.UTF8")
USERID paasapp@10.33.249.93:1521/platdb, PASSWORD Paas1015
DISCARDFILE ./dirrpt/ext1.dsc, APPEND, MEGABYTES 1024
GETTRUNCATES
NOCOMPRESSDELETES FETCHMISSINGCOLUMNS
NOCOMPRESSDELETES
NOCOMPRESSUPDATES
EXTTRAIL /data5/ogg_trail_1/ex
TABLE PAASAPP.ACT_EVT_LOG;
TABLE PAASAPP.ACT_GE_BYTEARRAY;
TABLE PAASAPP.ACT_GE_PROPERTY;
。。。
Data Pump配置:
ADD EXTRACT pump1, EXTTRAILSOURCE /data5/ogg_trail_1/ex
ADD EXTRACT pump2, EXTTRAILSOURCE /data5/ogg_trail_2/ex
ADD EXTRACT pump3, EXTTRAILSOURCE /data5/ogg_trail_3/ex
ADD RMTTRAIL /data3/ogg_trail/01, EXTRACT pump1, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/02, EXTRACT pump1, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/03, EXTRACT pump1, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/04, EXTRACT pump1, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/05, EXTRACT pump1, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/06, EXTRACT pump2, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/07, EXTRACT pump2, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/08, EXTRACT pump2, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/09, EXTRACT pump2, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/10, EXTRACT pump2, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/11, EXTRACT pump2, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/12, EXTRACT pump2, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/13, EXTRACT pump3, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/14, EXTRACT pump3, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/15, EXTRACT pump3, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/16, EXTRACT pump3, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/17, EXTRACT pump3, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/18, EXTRACT pump3, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/19, EXTRACT pump3, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/20, EXTRACT pump3, MEGABYTES 200
Data Pump配置文件示例:
EXTRACT pump1
PASSTHRU
RMTHOST 10.33.249.91, MGRPORT 21357
RMTTRAIL /data3/ogg_trail/01
TABLE PAASAPP.ACT_EVT_LOG;
TABLE PAASAPP.ACT_GE_BYTEARRAY;
。。。
RMTTRAIL /data3/ogg_trail/02
TABLE PAASAPP.APM_AGG_QUERY_HISTORY;
TABLE PAASAPP.APM_ALARM_RECORD;
。。。
配置PostgreSQL端OGG:
目标端(PG)的OGG,包括manager、collector和replicat进程,和源端传来的Trail。
启动manager后,会自动启动collector,此时就可以接收Oracle端data pump发来的Trail文件。Oracle端的data pump进程,要在目标端启动manager后才可以启动。
manager是需要配置的,collector不需要配置。
Replicat读取Trail文件,转换为对PG的增删改,replicat使用ODBC连接PG,OGG PG端安装文件自带了PG ODBC相关库。
Replicat需要记录应用变更的进度,这个信息存储在一张PG表中,称为checkpoint表。
213000_ggs_Linux_x64_PostgreSQL_64bit.zip 解压到目录/mnt/disk01/ogg-for-pg-21,加入下面的环境变量:
export OGG_HOME=/mnt/disk01/ogg-for-pg-21
export PATH=/mnt/disk01/ogg-for-pg-21:$PATH
export LD_LIBRARY_PATH=/mnt/disk01/ogg-for-pg-21:/mnt/disk01/ogg-for-pg-21/lib:$LD_LIBRARY_PATH
配置PG ODBC:
213000_ggs_Linux_x64_PostgreSQL_64bit.zip里面包含了ODBC库,在lib目录下,编辑ODBC配置文件odbc.ini,将环境变量ODBCINI指向odbc.ini:
export ODBCINI=/mnt/disk01/ogg-for-pg-21/odbc.ini
odbc.ini内容如下:
[ODBC]
# 106代表UTF-8
IANAAppCodePage=106
[pg] # ODBC数据源名称,可以随意起名,OGG配置中使用这个名称
Driver=/mnt/disk01/ogg-for-pg-21/lib/GGpsql25.so
Description=DataDirect 12.6 PostgreSQL Wire Protocol
Database=postgres
HostName=172.32.148.155
PortNumber=1921
LogonID=oggtest
Password=123456
到$OGG_HOME下执行ggsci,进入命令行,以后的命令都在命令行里执行。
GGSCI>dblogin sourcedb pg
表示ODBC配置正确。
Trail中包含了表定义,在同步之前,应该已经在PG上创建了与Oracle相同的表结构定义,表名、列名、顺序、主键都应该相同,并且已经完成的全量迁移,这样同步的表和数据就能够正确对应。
第一步,创建子目录:
GGSCI > create subdirs
(不要有分号)
第二步,配置、启动manager:
GGSCI > edit param mgr
PORT 1357
AUTOSTART ER *
AUTORESTART ER *
ACCESSRULE, PROG *, IPADDR *, ALLOW
设置全局参数ALLOWOUTPUTDIR,这样manager可以在RMTTRAIL目录下创建文件,否则会有报错:OGG-01223 Output file /data3/ogg_trail/re000000 is not in any allowed output directories
参考:OGG-01031 Output file is not in any allowed output directories - ORACLE-SCN
GGSCI > edit param ./GLOBALS
ALLOWOUTPUTDIR /data3/ogg_trail
启动manager
GGSCI > start manager
关闭manager
GGSCI > stop manager
第四步,在GGSCI中登录PG
GGSCI >dblogin sourcedb pg
GGSCI中许多操作,都要求登入数据,其中pg是前面ODBC配置的数据源名称,不是数据库名。
第三步,创建checkpoint表
checkpoint表就是一个普通的PG表,目标端Replicat从Trail文件提取变更,应用到PG,进度保存到checkpoint表里。
GGSCI >add checkpointtable chkpt.checkpointtab
这个命令会在chkpt schema下,创建名为checkpointtab的checkpoint表。
如果要Replicat从头再次应用Trail文件,可以删除或清空checkpoint表,然后调整Replicat进程读取Trail的指针:
alter repg, extseqno 0, extrba 0
repg是Replicat组名(也可以理解成Replicat进程名)。
extseqno是Trail文件的编号,就是文件名的数字部分。
extrba 是记录(事务?)在Trail文件内的偏移,rba表示relative byte address。
再start repg
删除checkopint表
delete checkpointtable chkpt.checkpointtab
第四步,swap分区
实践中发现Replicat需要有swap分区,如果没有swap分区,创建一个文件作为swap分区,例如,创建一个16G的文件/mnt/disk01/swapfile作为swap分区以root用户执行:
dd if=/dev/zero of=/mnt/disk01/swapfile bs=1M count=16K
chmod -R 0600 /mnt/disk01/swapfile
mkswap /mnt/disk01/swapfile
swapon /mnt/disk01/swapfile
# 开机启动swap分区
vim /etc/fstab
/mnt/disk01/swapfile swap swap defaults 0 0
swapon -s
第五步,配置、启动Replicat
编辑Replicat配置文件
GGSCI >edit param repg
-- Replicat组名
REPLICAT repg
-- 连接PG数据库的信息,pgdb是ODBC数据源名称
TARGETDB pgdb userid oggtest, password 123456
DISCARDFILE ./dirrpt/repg.dsc, APPEND
GETTRUNCATES
ALLOWNOOPUPDATES
INSERTMISSINGUPDATES
RESTARTCOLLISIONS
HANDLECOLLISIONS
BATCHSQL BATCHERRORMODE
-- 将Oracle oggtest下的表映射为PG oggtest下的表。
MAP oggtest.*, TARGET oggtest.*;
创建Replicat组:
GGSCI > add replicat repg, exttrail /mnt/disk01/ogg-for-pg-21/dirdat/re, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
repg需要与配置文件中REPLICAT参数相同
exttrail 是源端data pump发来的Trail文件的路径,需要与源端data pump配置文件的远程Trail路径相对应。begin 2022-03-25 17:00的时间应该是源端add extract 命令里指定的时间,或者至少比开始全量导出的时间早,数据才不会有丢失。
删除Replicat组
delete replicat repg
启动Replicat:
GGSCI >start replicat repg
查看状态:
GGSCI >stats repg
GGSCI >info repg
多个Extract进程和多个Replicat进程
与Oracle端对应的PG端多Replicat进程配置:
dblogin sourcedb pg
Replicat配置文件示例
GGSCI>edit param repl20:
REPLICAT repl20
TARGETDB pg
DISCARDFILE ./dirrpt/repl20.dsc, APPEND
GETTRUNCATES
ALLOWNOOPUPDATES
INSERTMISSINGUPDATES
RESTARTCOLLISIONS
HANDLECOLLISIONS
BATCHSQL BATCHERRORMODE
MAP oggtest.*, TARGET oggtest.*;
创建Replicat:
add replicat repl01, exttrail /data3/chkpt_trail/01, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl02, exttrail /data3/chkpt_trail/02, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl03, exttrail /data3/chkpt_trail/03, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl04, exttrail /data3/chkpt_trail/04, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl05, exttrail /data3/chkpt_trail/05, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl06, exttrail /data3/chkpt_trail/06, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl07, exttrail /data3/chkpt_trail/07, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl08, exttrail /data3/chkpt_trail/08, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl09, exttrail /data3/chkpt_trail/09, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl10, exttrail /data3/chkpt_trail/10, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl11, exttrail /data3/chkpt_trail/11, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl12, exttrail /data3/chkpt_trail/12, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl13, exttrail /data3/chkpt_trail/13, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl14, exttrail /data3/chkpt_trail/14, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl15, exttrail /data3/chkpt_trail/15, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl16, exttrail /data3/chkpt_trail/16, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl17, exttrail /data3/chkpt_trail/17, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl18, exttrail /data3/chkpt_trail/18, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl19, exttrail /data3/chkpt_trail/19, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl20, exttrail /data3/chkpt_trail/20, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab