SQLServer全量迁移

oG_datasync_full_migration工具介绍

oG_datasync_full_migration是一个用Java编写的SQLServer到openGauss的离线迁移工具。该工具提供了全量数据、对象的复制。全量数据复制采用多表并行复制, 全量对象支持表、约束、索引、外键、视图、函数、触发器、存储过程和序列的复制。

注意事项

一般性限制

  • 工具支持的SQLServer版本为2016+,openGauss版本为7.0.0+
  • 创建openGauss迁移库时需要指定编码格式与SQLServer一致
  • 列存储索引、全文索引、xml索引、包含列索引以及索引的填充因子暂不支持迁移
  • time、datetime2、datetimeoffset在SQL Server中精度默认为7,openGauss仅支持0-6,通过配置文件的isTimeMigrate参数控制是否接受精度损失
  • SQL Server中money和smallmoney数据类型精确到它们所代表的货币单位的万分之一,openGauss的money类型精确到它们所代表的货币单位的百分之一,该参数控制是否迁移货币类型
  • 表和列的注释暂不支持迁移
  • 几何类型(geometry和geography)暂不支持迁移
  • SQL Server的real(4字节)精度约为7位十进制数字,float(8字节)类型约为15~16位十进制数字,openGauss分别为6位和15位,迁移前后可能有有微小差别
  • 由于SQL Server分区表底层均基于Range分区实现,所以目前迁移到openGauss均为Range类型
  • 视图、函数、触发器和存储过程目前仅支持迁移流程,迁移成功还需语法兼容

对象迁移限制

  • 由于内核兼容性在持续增强,对象迁移采用先透传再翻译的原则进行,即先直接透传对象创建语句在openGauss端执行,若执行失败,再借助开源三方件druid进行翻译。

使用指南

安装方法

安装包下载地址:https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/tools/full-oG_datasync_full_migration-7.0.0rc2.tar.gz 其中7.0.0rc2表示当前版本号。 下载完成后,解压压缩包

tar -zxvf oG_datasync_full_migration-7.0.0rc2.tar.gz

解压后的oG_datasync_full_migration文件夹中有一个config文件夹以及一个jar包,config文件夹下存储配置文件模板。

配置文件说明

配置文件使用yaml文件规则配置,需要特别注意对齐,缩进表示层级关系,缩进时不允许使用Tab键,只允许使用空格,缩进的空格数目不重要,但相同层级的元素左侧需要对齐。

# global settings
# 是否记录进度
isDumpJson: true
# 是否删除迁移成功的csv文件
isDeleteCsv: true
# 是否保留原有schema
isKeepExistingSchema: false
# 目标端数据库配置
ogConn:
host: "192.168.0.2"
port: 5432
user: "username"
password: "password"
database: "database"
charset: "utf8"
params:
sourceConfig:
# 查询表的线程数
readerNum: 4
# 写表的线程数
writerNum: 4
# 全量数据文件大小划分配置,支持K、M、G大小配置,没有单位默认按照M单位处理,默认值为 2M
fileSize: 2M
# 源端数据库连接信息
dbConn:
host: "192.168.0.1"
port: "1433"
user: "username"
password: "password"
database: "database"
charset: 'utf8'
connectTimeout: 10
# schema映射关系
schemaMappings:
test: ogtest
# 复制表白名单,不配置则复制所有表
limitTables:
- test.Students
# 复制表黑名单
skipTables:
# 目标端建表添加with(segment=on)选项;opengauss迁移至openGauss时,源端表有with(segment=on),迁移时会默认添加
addSegmentTables:
csvDir: /**/**
# sqlserver中time,datetime2和datetimeoffset类型精度为0-7,openGauss中对应类型精度为0-6,可能会有精度损失,该参数控制是否迁移这三种类型
isTimeMigrate: true
# sqlserver中money和smallmoney数据类型精确到它们所代表的货币单位的万分之一,openGauss的money类型精确到它们所代表的货币单位的百分之一,该参数控制是否迁移货币类型
isMoneyMigrate: true
# 是否迁移源库的默认值到openGauss
isMigrateDefaultValue: Yes
# 是否记录快照
isRecordSnapshot: No

迁移命令

  • 迁移表

    java -jar oG_datasync_full_migration-7.0.0rc2.jar --start table --source sqlserver --config /**/**/config.yml

  • 迁移主键

    java -jar oG_datasync_full_migration-7.0.0rc2.jar --start primarykey --source sqlserver --config /**/**/config.yml

  • 迁移外键

    java -jar oG_datasync_full_migration-7.0.0rc2.jar --start foreignkey --source sqlserver --config /**/**/config.yml

  • 迁移索引

    java -jar oG_datasync_full_migration-7.0.0rc2.jar --start index --source sqlserver --config /**/**/config.yml

  • 迁移视图

    java -jar oG_datasync_full_migration-7.0.0rc2.jar --start view --source sqlserver --config /**/**/config.yml

  • 迁移函数

    java -jar oG_datasync_full_migration-7.0.0rc2.jar --start function --source sqlserver --config /**/**/config.yml

  • 迁移触发器

    java -jar oG_datasync_full_migration-7.0.0rc2.jar --start trigger --source sqlserver --config /**/**/config.yml

  • 迁移存储过程

    java -jar oG_datasync_full_migration-7.0.0rc2.jar --start procedure --source sqlserver --config /**/**/config.yml

  • 迁移序列

    java -jar oG_datasync_full_migration-7.0.0rc2.jar --start sequence --source sqlserver --config /**/**/config.yml

默认的类型转换规则

列类型转换

SQL ServeropenGauss备注
tinyinttinyint兼容
smallintsmallint兼容
intint兼容
bigintbigint兼容
bitboolean兼容
decimaldecimal兼容
numericnumeric兼容
moneymoney兼容
smallmoneymoney兼容
floatfloat兼容,float(24)会以real类型迁移
realreal兼容,相当于float(24)
double precisionfloat兼容,相当于float(53)
charchar兼容
varcharvarchar兼容
ncharnchar兼容
nvarcharnvarchar兼容
ntexttext兼容
binarybytea兼容,bytea不指定长度,最大为1GB-8203字节
varbinarybytea兼容,bytea不指定长度,最大为1GB-8203字节
imagetext暂未支持longtext类型,后续兼容性适配,超范围的文本会报错
texttext暂未支持longtext类型,后续兼容性适配,超范围的文本会报错
datedate兼容
datetimetimestamp兼容
smalldatetimetimestamp兼容
timetime[(p)][without time zone]SQL Server精度0-7,默认7,openGauss仅支持0-6,通过配置文件的isTimeMigrate参数控制是否接受精度损失
datetime2timestampSQL Server精度0-7,默认7,openGauss仅支持0-6,通过配置文件的isTimeMigrate参数控制是否接受精度损失
datetimeoffsettimestamp[(p)][with time zone]SQL Server精度0-7,默认7,openGauss仅支持0-6,通过配置文件的isTimeMigrate参数控制是否接受精度损失
hierarchyidnvarchar(4000)不兼容
jsonjsonbSQLServer的json类型底层为nvarchar
rowversiontimestampjdbc查询该类型为timestamp
sql_variant暂不支持,后续兼容性适配
uniqueidentifieruuid兼容
xmlxml兼容

索引类型转换

SQL ServeropenGauss备注
Clustered IndexB-tree Index待兼容性支持
Non-Clustered IndexB-tree Index待兼容性支持
Unique IndexUnique Index待兼容性支持
Full-Text Index不兼容
Spatial IndexGist Index兼容
XML Index不兼容
Filtered Index索引including列仅Ustore类型数据库支持
意见反馈
编组 3备份
    openGauss 2025-09-20 07:42:17
    取消