文档首页> 数据库和应用迁移 UGO> 用户指南> 转换配置文件> 配置说明> Microsoft SQL Server To GaussDB配置项使用说明
更新时间:2024-04-22 GMT+08:00
分享

Microsoft SQL Server To GaussDB配置项使用说明

问题描述

配置建议

建议值

Microsoft SQL Server 表字段支持IDENTITY属性,但GaussDB不支持该属性,默认无法迁移。

建议配置”IDENTITY列“解决该类问题。

将IDENTITY属性列转换为SERIAL类型。

影响:序列号数据类型是四个字节的自增整数。取值范围为1至2147483647。超过这个上限,GaussDB将报错,DML语句执行失败。

Microsoft SQL Server 表字段支持bit类型,但是GaussDB,不支持该属性,默认无法迁移。

建议配置“bit类型”解决该类问题。

将bit类型转化为boolean类型。

影响:boolean类型的取值相比bit类型多了一个“null”

Microsoft SQL Server支持datetimeoffset数据类型,但是GaussDB不支持,

默认转成timestamptz(二者最大秒数精度存在差异),时间函数year等转换方案处理结果在特殊情况下存在差异。

建议配置"datetimeoffset类型转换"解决该类问题

将datetimeoffset类型转换为varchar2类型。

影响:datetimeoffset类型转换为varchar2类型。

高斯O模式空字符串''等同于null,ISNULL等函数转换方案存在语义问题。

建议配置"忽略空字符串''为null的风险"解决该类问题。

不忽略空字符串''为null的风险。

影响:存在空字符串''风险的函数不进行转换。

GaussDB 分布式不支持外键约束,相关CREATE TABLE以及ALTER TABLE语句涉及外键约束会导致执行异常,需要根据实际业务情况选择是否需要外键特性。

建议配置"FOREIGN KEY约束"解决该类问题。

影响:注释FOREIGN KEY约束,注释后,原表的外键约束失效,不能确保数据保持一致,有可能创建不一致的数据。

GaussDB 数据库不支持Microsoft SQL Server表变量(包括多语句表值函数返回表定义),目前GaussDB 较为接近的转换方案为临时表,二者在部分使用场景下有区别,用户根据需要选择是否开启对表变量类型的转换。

建议配置"是否转换表变量(包括多语句表值函数返回表定义)"解决该类问题。

将表变量转换临时表。

影响:Microsoft SQL Server中显式表变量不遵循事务的回滚语义,GaussDB中临时表遵循事务回滚语义,需要关注业务语义是否发生变化。

GaussDB 数据库不支持存储过程内的SELECT语句,目前GaussDB 较为接近的转换方案为使用动态游标将结果从存储过程内传递出来。

建议配置"是否将存储过程中的SELECT语句利用游标处理"解决该类问题。

利用游标处理存储过程中的SELECT语句。

影响:如果需要获取存储过程中的结果集,则需要对相关调用形式进行修改。

创建索引过程不阻塞DML操作

建议配置:“CREATE INDEX的CONCURRENTLY子句”解决该类问题

建议值:如果业务非常需要这个功能,建议选择添加CONCURRENTLY关键字选项。

影响:创建这类索引时候,容易造成死锁,同时对Astore的表索引的创建比正常更长。

GaussDB 保留对象名称大小写需要使用双引号引用对象名称。

建议配置 “对象名称大小写转换” 解决该类问题。

建议值:对象名称全部转换为小写。

Microsoft SQL Server中LIKE运算符两侧表达式内数据类型要求为字符串加“+”可以视为风险字符串拼接。

建议配置"是否将LIKE运算符两侧表达式内的加号视为字符串拼接"解决该类问题。

建议值:将LIKE运算符两侧表达式内的加号视为字符串拼接。

影响:部分场景可能会错误的将原来表示算数运算的“+”转换为字符串拼接符。

Gauss中索引以及约束要求名称全局唯一,且大小不超过63字节。

建议配置"索引/约束名称防止冲突映射策略"解决该类问题。

建议值:将表名与索引/约束名称拼接防止命名冲突,当拼接后的名称超过63字节时使用SHA-1进行散列。

影响:解决命名冲突问题,但是当名称较长时丧失名称的可读性,且在后续的DROP、RENAME等维护过程中,也需要使用UGO转换SQL才能正确执行。

SQL Server中触发器内使用的函数UPDATE(column)在GaussDB中无完美对应物。

建议配置"UPDATE(column)语法"解决该类问题。

建议值:将 UPDATE(column) 转换为 case TG_OP when 'UPDATE' then NEW.column <> OLD.column when 'INSERT' then true else false end。

影响:此配置在column更新后值保持不变的场景下会与Microsoft SQL Server产生差异。当column更新前后值未发生变化时,Microsoft SQL Server中UPDATE(column)条件的结果为True,但GaussDB中(NEW.column <> OLD.column)条件的结果为False。

GaussDB分布式中分布键应该为唯一性约束的一部分。

建议配置"分布式环境(多数据节点)的唯一约束和索引"解决该类问题。

说明:

仅分布式有此特性。

如果唯一约束和唯一索引中不存在分布键,需添加分布键。

影响:目标数据库是分布式部署,分布键应该是约束的一部分。该配置将约束键附加到分布键中。

分享:

    相关文档

    相关产品