本章节为使用者介绍统一SQL配置相关内容。

4.1. 配置文件

统一SQL提供配置文件夹 config(24.1.8版本之前为unisqlconf) ,相关的配置文件必须放在该文件夹下,供统一SQL动态库第一次加载调用时初始化。 config文件夹内配置文件包括:

  • 系统配置文件:unisql.conf

  • 兜底策略配置文件:oracle2gaussdb_oracle.json、mysql2goldendb_mysql.json

4.2. 目录层级

.
└── workspace
    ├── xxx
    ├── start.sh
    ├── xxx
    └── config -- 统一SQL配置目录
        ├── unisql.conf -- 系统参数配置文件
        ├── oracle2gaussdb_oracle.json -- 兜底配置文件
        └── mysql2goldendb_mysql.json -- 兜底配置文件

4.3. 配置方式

统一SQL寻找配置文件方法有两种,建议使用第二种方式,手动将config目录放在当前工作目录下。

  1. 通过环境变量: unisql_conf_dir 指定统一SQL配置所在目录

    • 例如:export unisql_conf_dir=/xxx/xxx/cres/fbase/workspace/config

  2. 如果没有配置环境变量则会去业务启动脚本所在目录(业务当前工作目录)的 config 目录下寻找

注意

  • 优先级:环境变量>工作目录>默认配置。

  • 建议使用第二种方式,将 config 目录放在当前工作目录下。如果一个服务器上部署了多个不同业务应用,环境变量可能会被覆盖,因此不推荐使用环境变量。

4.4. unisql.conf文件说明

统一SQL支持unisql.conf配置文件设置系统参数,配置以key=value形式,每一行一个配置参数。

unisql.lib.full-path

定义

指定动态库所在完整路径

取值范围及说明

具有最高优先级,例如:/path/lib/unisql.xxx.x86_64.so(动态库寻找优先级:unisql.lib.full-path > Maven 依赖 > unisql.lib.dir)

是否可运行修改

应用范围

不限制

参数详细说明

指定统一SQL动态库所在完整路径

unisql.lib.dir

定义

指定动态库所在的目录

取值范围及说明

最低优先级,例如:/path/lib/ (动态库寻找优先级:unisql.lib.full-path > Maven 依赖 > unisql.lib.dir)

是否可运行修改

应用范围

不限制

参数详细说明

指定统一SQL动态库所在的目录

unisql.go.gomemlimit

定义

GOMEMLIMIT参数,用于指定动态库最大内存使用量

取值范围及说明

正整数, 单位:MB

是否可运行修改

应用范围

不限制

参数详细说明

统一 SQL 动态库的 GOMEMLIMIT 配置,可指定 动态库 最大内存使用量, MB 为单位,默认 256 MB,非必要无需调整。

unisql.go.gogc

定义

GOGC 参数,用于设置动态库垃圾回收目标百分比

取值范围及说明

正整数

是否可运行修改

应用范围

不限制

参数详细说明

默认值为1000,该值表示堆内存增长的比例阈值。例如,设为 100 时,堆内存增长 100% 后会触发 GC。改大该值会减少 GC 频率,但可能增加内存使用;减小该值会增加 GC 频率,减少内存使用但可能影响性能,非必要无需调整。

unisql.gen.lastinsertid.after.insert

定义

是否在解析 insert 语句的时候生成额外的一条 select last_insert_id() from dual 语句。

取值范围及说明

默认关闭,只有 1 才可以开启

是否可运行修改

应用范围

源:mysql(8.x),目标:oceanbase_oracle

参数详细说明

解析生成的额外语句不需要用户直接使用,而是由 java 侧代码管理。

unisql.cache

定义

缓存开关

取值范围及说明

1或true:开启,0或false:关闭;默认为开启;在取值范围之外的按照默认值处理

是否可运行修改

应用范围

不限制

参数详细说明

缓存开关,统一SQL会将SQL转换结果进行缓存,来提高效率。

unisql.skip

定义

全局透传开关

取值范围及说明

1或true:开启,0或false:关闭;默认为关闭;在取值范围之外的按照默认值处理

是否可运行修改

应用范围

不限制

参数详细说明

开关开启时,所有SQL都不进行转换,直接透传;但是以下两种情况仍然会进行转换:

  1. SQL中有 /*+noSkipTransform*/ 提示符。

  2. SQL中包含有 unisql.skipTransform.exception.keywords 中指定的关键字

unisql.error.skip

定义

全局异常透传开关

取值范围及说明

1或true:开启,0或false:关闭;默认为关闭;在取值范围之外的按照默认值处理

是否可运行修改

应用范围

不限制

参数详细说明

开关开启时,统一SQL转换过程中出现任何异常,SQL保持原样透传;开关关闭时,统一SQL转换过程中出现任何异常,返回报错提示信息。

unisql.skipTransform.exception.keywords

定义

在全局透传开启时,包含特定关键字的SQL仍然进行转换

取值范围及说明

关键字列表

是否可运行修改

应用范围

不限制

参数详细说明

仅在全局透传开关 unisql.skip 开启时生效, SQL中包含此关键字时,在全局透传开关开启时仍然进行转换

unisql.global.replace.sql

定义

全局替换SQL配置

取值范围及说明

sql语句;默认为空字符串

是否可运行修改

应用范围

不限制

参数详细说明

配置了全局替换SQL时,对于目标库不支持的特性,返回用户配置的SQL。如果未配置替换SQL,对于目标库不支持的特性,是否报错以unisql.error.skip配置项为准。

目前明确已知的不支持项包括:目标库为gauss-oracle时,不支持特性如下:alter table … move tablespace …; alter table … convert to charset; flush privileges; set foreign_key_checks;

unisql.charset

定义

编码格式设置

取值范围及说明

0:utf-8 ,1:gbk ;默认为 utf-8 ;在取值范围之外的按照默认值处理

是否可运行修改

应用范围

不限制

参数详细说明

编码格式,统一SQL支持源sql的编码格式。

unisql.schema

定义

指定自定义函数所在Schema

取值范围及说明

schema或database名称,默认值为 unisql

是否可运行修改

应用范围

不限制

参数详细说明

统一SQL自定义函数脚本执行所在的schema或database,指定的schema或database需要人工手动创建在目标数据库中,对于统一SQL默认的‘unisql’ schema, 统一SQL提供的脚本会自动创建,用户无需手动创建。创建schema或database之前需要授予创建用户相应权限。

unisql.remove.doubleQuoted

定义

移除列名双引号开关

取值范围及说明

1:开启,0:关闭;默认关闭

是否可运行修改

应用范围

源:mysql(8.x)/oracle(11g或19c),目标:gaussdb_oracle(v500或v505)

参数详细说明

当转换目标库为Gaussdb-Oracle,移除 insert、insert all、create table、create index、alter table语句中列上的双引号

unisql.change.database.to.schema

定义

database替换为schema开关

取值范围及说明

0:不替换,1:替换 ;默认值0不替换

是否可运行修改

应用范围

源:mysql(8.x)/oracle(11g或19c)/mariadb(10.x),目标:gaussdb_oracle(v500或v505)/gaussdb_mysql(M模式 V505)/gaussdb_mysql_b(b模式,V505.2)

参数详细说明

是否将SQL的语句中关键字database替换成schema,0不替换,1替换

unisql.decode.parameters.funcnames

定义

指定decode函数参数转化为相同类型(支持text、numeric、date、timestamp)

取值范围及说明

数据库内置函数名,多个函数名之间用英文逗号分割;默认为空

是否可运行修改

应用范围

源:oracle(11g或19c),目标:gaussdb_oracle(v500或v505),其他数据源不生效。

参数详细说明

当转换目标库为Gaussdb-Oracle,decode函数的参数为函数且函数名在本参数的配置内时 ,会调用统一SQL自定义函数decode且参数类型转化为相同类型。 例如: oracle中SQL语句为: select decode(CONCAT(‘11’,’11’), 12, 12) 转换为gaussdb_oracle SQL语句为: SELECT unisql.decode(CAST(CONCAT(‘11’, ‘11’) AS text), 12, 12)

unisql.print.sysinfo

定义

打印内存信息开关

取值范围及说明

1:开启,0:关闭;默认关闭

是否可运行修改

应用范围

不限制

参数详细说明

是否开启打印内存信息(注意:本参数仅适合在开发/测试环境开启观察内存使用情况,不允许在生产环境开启)。

unisql.print.logMemMinute

定义

周期打印内存信息时间间隔设置

取值范围及说明

整型数字,默认为10

是否可运行修改

应用范围

不限制

参数详细说明

每隔多少分钟打印一次内存dump信息(在unisql.print.sysinfo=1时生效)

unisql.table.column.name.random

定义

窗口函数使用,将转换后SQL中自定义表或字段添加随机别名

取值范围及说明

1:随机,0:不随机;默认不随机;在取值范围之外的按照默认值处理

是否可运行修改

应用范围

源端为oracle11g或19c,目标端为gaussdb_oracle(v500或v505)

参数详细说明

当SQL中使用窗口函数时,转换后的SQL中自定义表或字段会添加随机别名,以避免冲突。

例如: oracle中SQL语句为:

select e.ename11, e.sal, e.deptno, PERCENTILE_CONT(0) within group( order by e.sal DESC ) over(partition by e.deptno) max_sal
FROM unisql_sales e order BY e.empno

转换后SQL为:

SELECT e.ename11, e.sal, e.deptno, unisql_right_2472996466.max_sal AS max_sal
FROM unisql_sales AS e JOIN ( SELECT e.deptno,  PERCENTILE_CONT(0) WITHIN GROUP ( ORDER BY e.sal DESC ) AS max_sal
FROM unisql_sales AS e GROUP BY  e.deptno ) AS unisql_right_2472996466 ON e.deptno = unisql_right_2472996466.deptno
ORDER BY e.empno

unisql.keyword.doublequotes

定义

关键字配置

取值范围及说明

数据库关键字,如果配置多个用逗号隔开不能又空格;默认为空

是否可运行修改

应用范围

不限制

参数详细说明

配置关键字,对象名如果匹配到了此配置参数中配置的关键字则使用双引号包裹,每个关键字之间用逗号分隔

unisql.on.update.currentimestamp.columns

定义

指定mysql表中列含有ON UPDATE current_timestamp()属性

取值范围及说明

配置表名及列名,格式:tableName:column1,column2

是否可运行修改

应用范围

源:mysql(8.x),目标:gaussdb_oracle(v500)

参数详细说明

对于mysql表中含有ON UPDATE current_timestamp()属性的列,在配置指定该列后,若更新语句中未指定该列的值,则会自动使用当前时间赋值

unisql.mysql.backslash.escapes

定义

转义字符配置

取值范围及说明

1:开启,0:关闭;默认开启

是否可运行修改

应用范围

源:mysql(8.x),目标:gaussdb_oracle(V500), oceanbase oracle

参数详细说明

源库是mysql时,是否识别 ’\’ 为转义字符

unisql.auto.increment.column

定义

自增列配置

取值范围及说明

配置格式为 tableName1:column1,column11;tableName2:column2;默认为空

是否可运行修改

应用范围

源:mysql(8.x),目标:gaussdb_oracle(v500)

参数详细说明

兼容mysqlToGuassDB,对于auto_increment约束的列,insert into语句会将配置的列去掉, 不插入自增列的值,完全随数据库自增模式; 例如:配置项为 tableName1:column1 oracle语句为:insert into tableName1(column1,name) values(100, ‘test’) 转换为:insert into tableName1(name) values(‘test’)

unisql.table.column.replace.datatype

定义

数据类型转换配置

取值范围及说明

配置格式为 tableName:columnName:datatype;默认为空

是否可运行修改

应用范围

源:mysql(8.x),目标:gaussdb_oracle(v500), gaussdb_mysql_b

参数详细说明

源库是mysql时,指定表中字段转换后的数据类型

(如果 create table…/alter table add | modify | change… 语句中表的字段和配置匹配,

则使用指定的数据类型,否则使用统一SQL正常转换数据类型,见数据类型章节),格式: tableName:columnName:datatype;…,

tableName为表名,columnName为字段名,datatype为数据类型,如int、varchar(100);表名,字段名大小写敏感(需要填写数据库中创建后真实名称);

表名、字段名、数据类型不能为空;原始语句使用时不支持反引号中带双引号,例如: `”object”`

unisql.table.column.metadata.schemas

定义

获取元数据时指定目标库schema

取值范围及说明

字符串,指定目标库schema,默认为当前库连接当前操作schema,元数据包括:表名,列名,列数据类型,主键标识,唯一索引标识,自增键标识

是否可运行修改

应用范围

不限制

参数详细说明

配置获取元数据的所在目标端schema,多个用逗号隔开

unisql.table.metadata.schedule.switch

定义

定时拉取元数据开关

取值范围及说明

1:开启,0:关闭;默认关闭

是否可运行修改

应用范围

不限制

参数详细说明

定时拉取最新元数据更新到缓存中开关,开启之后会周期性的去系统表拉取最新的元数据信息缓存到本地

unisql.table.metadata.schedule.frequency

定义

定时拉取元数据频率设置

取值范围及说明

正整数数字,默认为1440

是否可运行修改

应用范围

不限制

参数详细说明

用于设置周期性拉取元数据更新到缓存的频率,

当开启拉取缓存定时任务后会根据设置频率周期性拉取元数据更新到缓存,单位分钟,默认一天

unisql.null.table.columns

定义

查询列为空转化配置

取值范围及说明

配置格式为  tableName1:column1,column11;tableName2:column2;tableName3:*; 其中列名为*,指表中所有列;默认为空

是否可运行修改

应用范围

源:mysql(8.x),目标:gaussdb_oracle(v500)

参数详细说明

源库是mysql,在查询语句中,为了解决列名的绑定变量值为空的转化问题,指定表名和列名后,

会将 where columnName = ? `` 转化成 ``where (columnName =? or (cast ? as dataType) is null and columnName is null)

unisql.datatype.number.replace.integer

定义

number类型转为int类型配置

取值范围及说明

0:不转换,1:转换;默认不转换

是否可运行修改

应用范围

源:oracle,目标:postgresql

参数详细说明

源库为oracle,目标库为postgresql时,是否将number数据类型转为integer,

 0 不转,1 转,默认为 0 。在取值范围之外的按照默认值处理 。

unisql.drop.notnull.for.default.empty(@Deprecated)

定义

按需去除 not null

取值范围及说明

1:去除not null,0:不去除not null,默认为0

是否可运行修改

应用范围

源:mysql(8.x),目标:gaussdb_oracle(v500)

参数详细说明

ddl中对于列约束为 not null default ‘’ 时,允许用户设置是否去除 not null。 1:去除not null,0:不去除not null,默认为0。 null和空在gauss-oracle中是相同的含义,not null default ‘’ 时也需要显式指定插入值,该配置项用于解决此问题,不建议使用,后期会作废,请使用参数 “unisql.notnull.behavior”。

unisql.notnull.behavior

定义

处理字段约束包含not null

取值范围及说明

0:不变,1:not null default ‘’去除not null转换后default ‘’,2:not null default ‘’转换到not null default ‘ ‘,默认值是0

是否可运行修改

应用范围

源:mysql(8.x),目标:gaussdb_oracle(v500)

参数详细说明

ddl中对于列约束为 not null 的处理。 0:不变, 1:not null default ‘’去除not null转换后default ‘’, 2:not null default ‘’转换后not null default ‘ ‘, null和空在gauss-oracle中是相同的含义,not null default ‘’ 时也需要显式指定插入值,该配置项用于解决此问题。

unisql.table.column.upper.case

定义

配置哪些表的哪些列查询时需要忽略大小写

取值范围及说明

配置格式为 表名1:列名1,列名2;表名2:列名1;

是否可运行修改

应用范围

源:mysql(8.x),目标:gaussdb_oracle(v500)

参数详细说明

mysql查询字符串列值时默认是忽略大小写的,Gaussdb-Oracle不支持此特性,

该功能会将满足条件的字段和条件值通过Upper函数包裹来实现查询时忽略大小写的功能。暂时只支持=、!=、like、not like。

同时会在统一SQL配置目录下生成create_index.sql文件, 提供业务手动创建索引。(索引名称是否超长、是否已创建和能否创建成功由业务方自己保证,和修改)。

unisql.table.column.upper.case.print.sql.switch

定义

指定表的字段查询大小写不敏感时,解析DDL生成创建索引语句时,是否日志提示还是启动失败

取值范围及说明

0:提示且不启动统一SQL,1:提示并启动统一SQL。默认为0

是否可运行修改

应用范围

源:mysql(8.x),目标:gaussdb_oracle(v500)

参数详细说明

如果配置了unisql.table.column.upper.case参数,

指定表的字段查询大小写不敏感时,此参数才会生效,

用于提示业务在统一SQL配置目录下生成的create_index.sql文件,提醒用户执行。

unisql.transform.replace.into

定义

用于控制mysq转GoldenDB-Mysql的场景是否将replace into语法转化为merge into语法

取值范围及说明

0:不转换,1:转换。默认为0

是否可运行修改

应用范围

源:Mysql(8.x),目标:GoldenDB-Mysql

参数详细说明

将replace into语法转化为merge into语法,前提为目标库是mysql系且支持merge into语法。

unisql.mysql.restore.name.back.quotes

定义

用于控制SQL语句转换后表名、列名等对象名是否携带反引号

取值范围及说明

1:开启,转换后表名,列名带反引号,0:关闭,转换后不带反引号,默认开启。

是否可运行修改

应用范围

目标:mysql系的数据源 (不包含MYSQL2OCEAN_BASE_MYSQL,MYSQL2LIGHTDB_MYSQL)

参数详细说明

mysql系数据源的表名,列名不带反引号时大小写敏感,带反引号时大小写不敏感,用户可以根据实际需求配置该参数。

unisql.log.enable

定义

日志打印开关

取值范围及说明

1:开启,0:关闭;默认为开启;在取值范围之外的按照默认值处理

是否可运行修改

应用范围

不限制

参数详细说明

用来控制是否开启日志打印功能。开启时可以打印日志,关闭时不能打印日志,作用范围仅为统一SQL日志。(注意:1.只有打印日志逻辑外层套有.IsXXXEnabled()逻辑判断时才会生效 2.配置文件初始化日志不受此配置影响,默认都会打印)

unisql.log.level

定义

日志级别设置

取值范围及说明

DEBUG、INFO、WARN、ERROR;默认为ERROR,在取值范围之外的按照默认值处理

是否可运行修改

应用范围

不限制

参数详细说明

统一SQL日志级别设置,作用范围仅为统一SQL日志,日志级别优先级为:debug<info<warn<error(注意:配置文件初始化日志不受此配置影响,默认都会打印)

unisql.log.path

定义

日志文件存放路径

取值范围及说明

配置必须为目录,例如: /data/log/

是否可运行修改

应用范围

全局

参数详细说明
  1. 如果路径不存在,则会自动创建; 如果已经存在同名文件(非目录),则会导致无法自动创建目录。

  2. 如果无法创建目录则会默认输出到程序运行当前目录下。

  3. 如果配置为空,则会输出到程序运行的当前目录的log子目录下

unisql.log.maxSize

定义

日志文件最大大小,当日志文件超过此大小时,会自动切割新文件

取值范围及说明

单位为MB,默认值为300

是否可运行修改

应用范围

全局

unisql.log.maxDays

定义

日志文件保存天数, 超过此天数的日志文件会被删除

取值范围及说明

单位为天,默认值为7

是否可运行修改

应用范围

全局

参数详细说明

不能确保日志文件肯定能保存7天,可能受 unisql.log.maxBackups 参数影响会提前删除。

unisql.log.maxBackups

定义

日志文件最多保留数量

取值范围及说明

单位为文件个数,默认值为40

是否可运行修改

应用范围

全局

参数详细说明

不能确保日志文件数量肯定能保存这么多,可能受 unisql.log.maxDays 参数影响会提前删除。

unisql.log.compress

定义

是否启用日志压缩

取值范围及说明

0 不启用, 1启用

是否可运行修改

应用范围

全局

参数详细说明

如果启用,则除当前日志文件外,其余文件均使用 gzip 压缩后以压缩文件的形式存在, 解压缩可以使用 gunzip 命令。

unisql.slowsql.enable

定义

慢SQL/大SQL告警日志打印开关

取值范围及说明

1:开启,0:关闭;默认为关闭,取值范围之外的值按默认值处理

是否可运行修改

应用范围

不限制

参数详细说明

打印慢SQL和大SQL日志开关,作用范围仅为统一SQL日志,只有在开启时配置项[unisql.slowsql.duration]和[unisql.slowsql.length]才会生效

unisql.slowsql.length

定义

大SQL阈值配置

取值范围及说明

取值范围:正整数,默认值2000,单位字节,取值范围之外按默认值处理

是否可运行修改

应用范围

不限制

参数详细说明

大SQL阈值配置,当原始SQL或转换后SQL长度大于配置阈值且[unisql.slowsql.enable]配置项为开启时打印大SQL告警日志

unisql.slowsql.duration

定义

慢SQL阈值配置

取值范围及说明

取值范围:正整数,默认值100,单位微妙,取值范围之外按默认值处理

是否可运行修改

应用范围

不限制

参数详细说明

慢SQL阈值配置,当SQL转换耗时超过配置阈值且[unisql.slowsql.enable]配置项为开启时打印慢SQL告警日志

unisql.remove.ignore

定义

update ignore set xxx 转化是否去除 ignore

取值范围及说明

1:开启,0:关闭;默认为开启;在取值范围之外的值按照默认值处理

是否可运行修改

应用范围

源:Mysql(8.x),目标:gaussdb_oracle(v500)、gaussdb_mysql B 模式

参数详细说明

源库为mysql,update ignore set xxx 相关语法转化时,允许用户设置是否去除 ignore,1:去除ignore,0:不去除ignore

unisql.target.database.version

定义

设置目标端版本号信息

取值范围及说明

统一SQL具体的目标端数据源版本号,目前起效的版本号详见下述表格

是否可运行修改

应用范围

所有统一SQL已支持的目标端数据源版本号,

参数详细说明

统一SQL转换逻辑会根据不同的数据库及版本有所差异,可以配置此参数来指定目标端数据库版本号。

目标数据库

目标数据库版本

Gaussdb-Oracle

5050200

unisql.source.database.version

定义

设置源端版本号信息

取值范围及说明

统一SQL具体的源端数据源版本号

是否可运行修改

应用范围

所有统一SQL已支持的源端数据源版本号

参数详细说明

统一SQL转换逻辑会根据不同的数据库及版本有所差异,可以配置此参数来指定源端数据库版本号。

unisql.bind.variable.mode

定义

是否将ares studio伪SQL中的绑定变量前缀@原样返回,0:按照正常处理(目标端mysql则为@,目标端为oracle则为:),1:全部返回@。默认为0

取值范围及说明

0:按照正常处理(目标端mysql则为@,目标端为oracle则为:),1:全部返回@。默认为0

是否可运行修改

应用范围

所有统一SQL已支持的目标端数据源版本号

参数详细说明

是否将ares studio伪SQL中的绑定变量前缀@原样返回,0:按照正常处理(目标端mysql则为@,目标端为oracle则为:),1:全部返回@。默认为0。

unisql.dataType.double.replace.binarydouble

定义

用于控制将mysql的double数据类型转换为oracle19c或ob_oracle数据库的指定数据类型

取值范围及说明

0:转为number数据类型,1:转为binary_double数据类型。默认为1

是否可运行修改

应用范围

源:Mysql(8.x),目标:oceanbase_oracle,oracle19c

参数详细说明

统一SQL转换逻辑会根据不同的使用场景将double数据类型转换成其它数据类型,可以配置此参数来指定目标数据类型,0:转为number数据类型,1:转为binary_double数据类型。默认为1

unisql.splitsql.transform.multisql

定义

用于控制是否拆分语句, 该参数目前仅在Oracle为源的情况下生效

取值范围及说明

0:不支持拆分,1:支持拆分。默认为0

是否可运行修改

应用范围

源:Oracle(19c),目标:oceanbase_oracle, gaussdb-oracle(505.2)

参数详细说明

当上送的语句涉及多条语句并且混合了PLSQL语句时,直接是不支持解析转换的,需要开启这个参数,才能支持解析转换。 拆分规则:1.PLSQL语句块需要以/作为结束符号进行拆分。 2.普通SQL语句需要以分号作为结束符号进行拆分。 3. 单独/开头的语句也作为独立的语句拆分,因为Oracle SQLPLUS支持这个指令。 拆分限制:1.语句中字面量仅支持’’和””两种。 PLSQL语句范围: 匿名块 , create function , create procedure, create package , create trigger

unisql.splitsql.pureslash.ignore

定义

用于控制拆分语句后是否丢弃纯/语句, 该参数目前仅在Oracle为源的情况下生效

取值范围及说明

0:保留,1:忽略。默认为1

是否可运行修改

应用范围

源:Oracle(19c),目标:oceanbase_oracle

参数详细说明

前提当unisql.splitsql.transform.multisql=1时,如果拆分语句中包含纯/语句,该参数用来控制是否丢弃纯/语句。 当忽略这个纯/语句时,这个语句/会被丢弃掉。

unisql.splitsql.pureslash.ignore

定义

当Oracle2Postgres时,在WHERE XXX IS NULL场景,用于处理函数XXX返回空串时将空串处理为NULL值

取值范围及说明

指定需要兼容空串等于NULL的函数列表,多个函数名之间需以英文逗号分隔。默认值: concat,substr,upper,lower,initcap,replace,ltrim,rtrim,lpad,rpad,regexp_substr,regexp_replace,to_char,coalesce

是否可运行修改

应用范围

源:Oracle(19c),目标:postgresql

参数详细说明

函数名配置在函数列表时,如:func() IS NULL,默认会被处理为unisql.emptystr2null(func()) IS NULL, unisql.emptystr2null当入参为空串时会返回NULL值,使得IS NULL为真,从而等价于Oracle行为。

unisql.remove.tablespace

定义

是否在建表或建索引时去除tablespace关键字开关

取值范围及说明

1:开启,0:关闭;默认为关闭;在取值范围之外的值按照默认值处理;开启时候去除表空间子句

是否可运行修改

应用范围

oracle到ob_oracle语法转换

参数详细说明

oracle到ob_oracle语法转换时,是否去除建表或建索引时的tablespace关键字,1:开启,0:关闭;默认为关闭;在取值范围之外的值按照默认值处理;开启时候去除表空间子句

unisql.transform.createstmt.mode

定义

是否在建表语句中保留或去除主键、外键和索引部分

取值范围及说明

0-带有主键、外键和索引(默认值);1-仅带有主键(mysql转goldendb-mysql时使用);2-不带有主键、外键和索引

是否可运行修改

应用范围

不限制

参数详细说明

建表语句转换时,是否保留或去除主键、外键和索引部分,0:建表语句转换时保留主键、外键和索引;1:建表语句转换时仅保留主键,去除外键和索引;2-建表语句转换时去除主键、外键和索引

4.5. 兜底配置文件(24.1.6版本开始支持)

兜底配置文件内容是一个kv结构的json数组。如果配置了兜底文件,统一SQL转换前会将源sql和兜底配置文件中的from内容匹配,匹配一致则不进行转换,直接返回to中的内容。

备注

配置文件命名: <来源方言>2<目标方言>.json 方言都小写,例如:oracle2gaussdb_oracle.json

配置案例:

[
{"from": "select * from unisql_people_source where person_id = ? and person_id= ?",
    "to": "select * from unisql_people_source where person_id in (?,?)"
},
{"from": "select * from unisql_people_source where person_id in (3,5)",
    "to": "select * from unisql_people_source where person_id = 3 or person_id= 5"
}
]

4.6. 系统参数与环境变量

统一SQL支持以下系统变量或环境变量

环境变量名

说明

unisql_lib_dir

指向动态库所在的目录,等同于系统参数 unisql.lib.dir,环境变量与系统参数选一种方式配置即可;都配置则以系统参数优先

unisql_lib_full_path

指定动态库所在完整路径,等同于系统参数 unisql.lib.full-path ,环境变量与系统参数选一种方式配置即可;都配置则以系统参数优先

4.7. JDBC 连接参数

即 JDBC 连接 URL 中 ? 后面的参数部分,以下参数是统一SQL驱动识别的必须参数。

参数名

说明

sourceDialect

来源方言,必须配置。目前支持 oracle 或 mysql,统一SQL和多发都必须配置此参数。

targetDialect

目标方言,必须配置。统一SQL和多发都必须配置此参数。目前支持 postgresql、lightdb_oracle、tdsql_mysql、tdsql_oracle、oceanbase_mysql、oceanbase_oracle、gaussdb_oracle、dm、opengauss

mode

兼容模式,统一SQL模式下,如果源SQL中使用了mysql本身的SQL_CALC_FOUND_ROWS特性,则必须配置为MYSQL,历史遗留问题,当源方言是MySQL的时候也需要配置。如果是多发模式下,Oracle或MySQL数据库的连接串上必须配置为MULTIPLEX。

sourceDialect 对应源数据库方言,用于在统一SQL转换时,作为源方言,详细对应信息如下:

说明

oracle

oracle支持11g或19c

mysql

mysql8.x版本

targetDialect 对应目标数据库方言,用于在统一SQL转换时,作为目标方言,详细对应信息如下:

说明

postgresql

postgresql13.x,14.x

lightdb_oracle

lightdb_oracle 兼容模式

tdsql_mysql

tdsql mysql兼容模式,兼容mysql5.7 和 8

tdsql_pg_oracle

tdsql oracle兼容模式

oceanbase_oracle

oceanbase oracle兼容模式 3.2

oceanbase_mysql

oceanbase mysql兼容模式 3.2

gaussdb_oracle

GaussDB oracle兼容模式 V500/V505

达梦

达梦版本

openGauss

opengauss

oracle

多发源库为oracle时,使用此配置值

openGauss

opengauss