10.10.1. 多发数据源配置加载接口
10.10.1.1. 简介
多发比对提供了多发数据源配置初始化接口,用户可以通过该接口初始化自定义的多发数据源配置信息。业务如果在多发时,同一个目标库方言需要在不同schemaName之间切换的,可以通过该接口增加不同schemaName数据源配置。
警告
使用接口前提需要将多发服务配置文件jrescloud.properties配置项multi.datasourceSelfManage设置为true
# 多发数据源管理模式(是否使用外设数据源配置),false:多发数据源管理模式为托管模式,仅使用jrescloud.properties的数据源配置;true:多发数据源管理模式为业务自身管控模式,jrescloud.properties的数据源配置不可用,需要业务通过对外接口手动设置(http://ip:port/multiplex/initDataSourceConfig)
multi.datasourceSelfManage=true
10.10.1.2. 接口请求地址
10.10.1.3. 请求方式
POST
10.10.1.4. Content-Type
application/json;charset=UTF-8
10.10.1.5. 接口请求参数
参数名 |
类型 |
是否必须 |
说明 |
取值范围 |
示例 |
---|---|---|---|---|---|
sourceDialect |
String |
是 |
源端数据库方言ORACLE,MYSQL |
ORACLE、MYSQL |
ORACLE |
targetDataSourceProperties |
List<MultiJdbcProperties> |
是 |
源库和目标库数据库配置信息 |
详细见如下MultiJdbcProperties对象结构 |
MultiJdbcProperties对象结构如下:
参数名 |
类型 |
是否必须 |
说明 |
取值范围 |
示例 |
---|---|---|---|---|---|
targetDialect |
String |
是 |
源库或目标数据库方言 |
当源为ORACLE时,取值范围:ORACLE, LIGHTDB_ORACLE, GAUSSDB_ORACLE, DM, OCEAN_BASE_ORACLE; 当源为MYSQL时,目标库取值范围MYSQL, GAUSSDB500_ORACLE, LIGHTDB_MYSQL, OCEAN_BASE_MYSQL |
GAUSSDB_ORACLE |
url |
String |
是 |
目标数据库JDBC连接url。如果是源库oracle或者mysql则需要加上mode=MULTIPLEX,目标库不能加。sourceDialect=xxx&targetDialect=xxx 都需要加 |
jdbc:mysql://ip:port/schemaName?mode=MULTIPLEX&sourceDialect=mysql&targetDialect=mysql |
|
schemaName |
String |
是 |
指定要连接的databaseName。ORACLE、DM为用户名;MYSQL、POSTGRESQL系为URL中IP和PORT后面的databaseName。 |
||
user |
String |
是 |
数据库用户名 |
||
password |
String |
是 |
数据库用户密码 |
10.10.1.6. 接口返回参数
参数名 |
类型 |
是否必须 |
说明 |
取值范围 |
示例 |
---|---|---|---|---|---|
code |
Integer |
是 |
状态码,0表示成功,非0表示异常 |
0 |
|
message |
String |
是 |
信息描述 |
多发数据源初始化成功 |
10.10.1.7. 使用场景以及示例
1、多发数据源管理模式为业务自身管控模式时,jrescloud.properties中的数据源配置不可用,需要业务通过对外接口手动设置数据源配置。 业务如果在多发时,同一个目标库方言需要在不同schemaName之间切换的,可以通过该接口增加不同schemaName数据源配置。
警告
多次调用接口时后续的接口会根据targetDialect和schemaName进行判断,如果存在则更新,不存在则新增。
因此多发数据源配置中同一个目标库方言,数据库配置暂不支持存在相同schemaName,同一个实例和不同实例之间都不能存在相同schemaName
。如果存在则会将老的覆盖。ORACLE、DM使用时根据方言和用户名查找数据源(schemaName需要配置和用户名保持一致),如下案例配置了两个相同实例不同用户,和另一个不同实例不用用户案例(三个数据源用户名不能有相同)
MYSQL和POSTGRESQL系使用时根据方言和database查找数据源(schemaName需要配置和database保持一致),如下案例配置了两个相同实例不同database,和另一个不同实例不用database案例(三个数据源database不能有相同)
10.10.1.7.1. 请求示例一
多次调用接口时后续的接口会根据targetDialect和schemaName进行判断,如果存在则更新,不存在则新增。
因此多发数据源配置中同一个目标库方言,数据库配置暂不支持存在相同schemaName,同一个实例和不同实例之间都不能存在相同schemaName
。如果存在则会将老的覆盖。ORACLE、DM使用时根据方言和用户名查找数据源(schemaName需要配置和用户名保持一致),如下案例配置了两个相同实例不同用户,和另一个不同实例不用用户案例(三个数据源用户名不能有相同)
MYSQL和POSTGRESQL系使用时根据方言和database查找数据源(schemaName需要配置和database保持一致),如下案例配置了两个相同实例不同database,和另一个不同实例不用database案例(三个数据源database不能有相同)
{
"sourceDialect": "ORACLE", // 源端数据库类型
"targetDataSourceProperties": [ // 目标数据库结构
{
"targetDialect": "ORACLE", // 与外层的sourceDialect源类型相同,故本结构表示源数据库类型信息
"url": "jdbc:oracle:thin:@//10.20.30.111:1010/orcl?mode=MULTIPLEX&sourceDialect=oracle&targetDialect=oracle", // ORACLE数据库连接串,如果是源库oracle或者mysql则需要加上mode=MULTIPLEX,目标库不能加
"schemaName": "unisql_test1", // 源端oracle schema 需要和用户名一致
"user": "unisql_test1", // 源端用户名
"password": "unisql_test123" // 源端密码
},
{
"targetDialect": "ORACLE", // 与外层的sourceDialect源类型相同,故本结构表示源数据库类型信息
"url": "jdbc:oracle:thin:@//10.20.30.111:1010/orcl?mode=MULTIPLEX&sourceDialect=oracle&targetDialect=oracle", // ORACLE数据库连接串,如果是源库oracle或者mysql则需要加上mode=MULTIPLEX,目标库不能加
"schemaName": "unisql_test2", // 源端oracle schema 需要和用户名一致
"user": "unisql_test2", // 源端用户名
"password": "unisql_test123" // 源端密码
},
{
"targetDialect": "ORACLE", // 与外层的sourceDialect源类型相同,故本结构表示源数据库类型信息
"url": "jdbc:oracle:thin:@//10.20.30.112:1010/orcl?mode=MULTIPLEX&sourceDialect=oracle&targetDialect=oracle", // ORACLE数据库连接串,如果是源库oracle或者mysql则需要加上mode=MULTIPLEX,目标库不能加
"schemaName": "unisql_test3", // 源端oracle schema 需要和用户名一致
"user": "unisql_test3", // 源端用户名
"password": "unisql_test123" // 源端密码
},
{
"targetDialect": "LIGHTDB_ORACLE", // 目标数据库类型,此处表示lightdb-oracle
"url": "jdbc:postgresql://10.20.30.111:4111/unisql_lightdb1?sourceDialect=oracle&targetDialect=lightdb_oracle&options=-c%20search_path=public,oracle", // LIGHTDB_ORACLE数据库连接串
"schemaName": "unisql_lightdb1", // lightdb-oracle 数据库名 需要和url中databaseName一致
"user": "lightdb", // 用户名
"password": "unisql_test123" // 密码
},
{
"targetDialect": "LIGHTDB_ORACLE", // 目标数据库类型,此处表示lightdb-oracle
"url": "jdbc:postgresql://10.20.30.111:4111/unisql_lightdb2?sourceDialect=oracle&targetDialect=lightdb_oracle&options=-c%20search_path=public,oracle", // LIGHTDB_ORACLE数据库连接串
"schemaName": "unisql_lightdb2", // lightdb-oracle 数据库名 需要和url中databaseName一致
"user": "lightdb", // 用户名
"password": "unisql_test123" // 密码
},
{
"targetDialect": "LIGHTDB_ORACLE", // 目标数据库类型,此处表示lightdb-oracle
"url": "jdbc:postgresql://10.20.30.112:4114/unisql_lightdb3?sourceDialect=oracle&targetDialect=lightdb_oracle&options=-c%20search_path=public,oracle", // LIGHTDB_ORACLE数据库连接串
"schemaName": "unisql_lightdb3", // lightdb-oracle 数据库名 需要和url中databaseName一致
"user": "lightdb3", // 用户名
"password": "unisql_test123" // 密码
},
{
"targetDialect": "GAUSSDB_ORACLE", // 目标数据库类型,此处表示gaussdb-oracle
"url": "jdbc:opengauss://10.20.30.110:1111/unisql_gaussdb_oracle1?sourceDialect=oracle&targetDialect=gaussdb_oracle¤tSchema=public", // GAUSSDB_ORACLE数据库连接串
"schemaName": "unisql_gaussdb_oracle1", // gaussdb-oracle 数据库名 需要和url中databaseName一致
"user": "gaussdb", // 用户名
"password": "unisql_test123" // 密码
},
{
"targetDialect": "GAUSSDB_ORACLE", // 目标数据库类型,此处表示gaussdb-oracle
"url": "jdbc:opengauss://10.20.30.110:1111/unisql_gaussdb_oracle2?sourceDialect=oracle&targetDialect=gaussdb_oracle¤tSchema=public", // GAUSSDB_ORACLE数据库连接串
"schemaName": "unisql_gaussdb_oracle2", // gaussdb-oracle 数据库名 需要和url中databaseName一致
"user": "gaussdb", // 用户名
"password": "unisql_test123" // 密码
},
{
"targetDialect": "GAUSSDB_ORACLE", // 目标数据库类型,此处表示gaussdb-oracle
"url": "jdbc:opengauss://10.20.30.114:1112/unisql_gaussdb_oracle3?sourceDialect=oracle&targetDialect=gaussdb_oracle¤tSchema=public", // GAUSSDB_ORACLE数据库连接串
"schemaName": "unisql_gaussdb_oracle3", // gaussdb-oracle 数据库名 需要和url中databaseName一致
"user": "gaussdb3", // 用户名
"password": "unisql_12111" // 密码
},
{
"targetDialect": "DM", // 目标数据库类型,此处表示达梦
"url": "jdbc:dm://10.20.30.132:1612/sysdba?sourceDialect=oracle&targetDialect=dm", // DM数据库连接串
"schemaName": "unisql_dm1", // 达梦 schema 需要和用户名一致
"user": "unisql_dm1", // 用户名
"password": "unisql_test123" // 密码
},
{
"targetDialect": "DM", // 目标数据库类型,此处表示达梦
"url": "jdbc:dm://10.20.30.132:1612/sysdba?sourceDialect=oracle&targetDialect=dm", // DM数据库连接串
"schemaName": "unisql_dm2", // 达梦 schema 需要和用户名一致
"user": "unisql_dm2", // 用户名
"password": "unisql_test123" // 密码
},
{
"targetDialect": "DM", // 目标数据库类型,此处表示达梦
"url": "jdbc:dm://10.20.30.133:1731/sysdba?sourceDialect=oracle&targetDialect=dm", // DM数据库连接串
"schemaName": "unisql_dm3", // 达梦 schema 需要和用户名一致
"user": "unisql_dm3", // 用户名
"password": "unisql_test123" // 密码
},
{
"targetDialect": "OCEAN_BASE_ORACLE", // 目标数据库类型,此处表示ob-oracle
"url": "jdbc:oceanbase://10.20.30.212:4321/unisql_oceanbase_oracle1?sourceDialect=oracle&targetDialect=ocean_base_oracle", // OCEAN_BASE_ORACLE数据库连接串
"schemaName": "unisql_oceanbase_oracle1", // ob-oracle schema名需要和url中databaseName一致
"user": "oceanbase_oracle", // 用户名
"password": "unisql_test123" // 密码
},
{
"targetDialect": "OCEAN_BASE_ORACLE", // 目标数据库类型,此处表示ob-oracle
"url": "jdbc:oceanbase://10.20.30.212:4321/unisql_oceanbase_oracle2?sourceDialect=oracle&targetDialect=ocean_base_oracle", // OCEAN_BASE_ORACLE数据库连接串
"schemaName": "unisql_oceanbase_oracle2", // ob-oracle schema名需要和url中databaseName一致
"user": "oceanbase_oracle", // 用户名
"password": "unisql_test123" // 密码
},
{
"targetDialect": "OCEAN_BASE_ORACLE", // 目标数据库类型,此处表示ob-oracle
"url": "jdbc:oceanbase://10.20.30.214:4322/unisql_oceanbase_oracle3?sourceDialect=oracle&targetDialect=ocean_base_oracle", // OCEAN_BASE_ORACLE数据库连接串
"schemaName": "unisql_oceanbase_oracle3", // ob-oracle schema名需要和url中databaseName一致
"user": "oceanbase_oracle3", // 用户名
"password": "unisql_test123" // 密码
}
]
}
10.10.1.7.2. 返回示例一
{
"code": 0, // 返回状态码
"message": "多发数据源初始化成功" // 返回状态信息
}
10.10.2. 多发比对 http接口
10.10.2.1. 简介
多发比对提供了 http API,用户可以通过该接口获取统一SQL的多发执行和比对结果是否一致。
10.10.2.2. 接口请求地址
10.10.2.3. 请求方式
POST
10.10.2.4. Content-Type
application/json;charset=UTF-8
10.10.2.5. 接口请求参数
参数名 |
类型 |
是否必须 |
说明 |
取值范围 |
示例 |
---|---|---|---|---|---|
sourceDialect |
String |
是 |
源端数据库方言ORACLE,MYSQL |
ORACLE、MYSQL |
ORACLE |
targetDialects |
List<String> |
否 |
指定多发哪几个目标数据库,包括源库。多发完成后比对侧会根据该标签进行数据库类型判断是否所有都已执行完成,执行完成则开始比对,比对侧最大等待时间为10秒,如果10秒还有数据库类型未执行完成则立即开始比对。伪多发场景,且分多次调用时必须传入(needTransform=false且bulkMode=2时) |
当源为ORACLE时,目标库取值范围:LIGHTDB_ORACLE, GAUSSDB_ORACLE, DM, OCEAN_BASE_ORACLE; 当源为MYSQL时,目标库取值范围GAUSSDB500_ORACLE |
例如源为ORACLE,多发执行到LIGHTDB_ORACLE、GAUSSDB_ORACLE、DM、OCEAN_BASE_ORACLE,时填写为:[“ORACLE”, “LIGHTDB_ORACLE”, “GAUSSDB_ORACLE”, “DM”, “OCEAN_BASE_ORACLE”] |
targetDialectInfos |
List<TargetDialectInfo> |
是 |
源库和目标库数据库信息 |
详细见如下TargetDialectInfo对象结构 |
|
needTransform |
Boolean |
是 |
通过该标签区别是真多发还是伪多发,真多发时needTransform必须是true表示SQL需要通过统一SQL内部转换,并且bulkMode必须是1,目标类型信息需要一次性全部传入(接口只调用一次)。伪多发有两种场景:第一种场景业务整合好所有信息只调用接口一次,needTransform为false表示SQL不需要通过统一SQL内部转换,traceId必须传入。bulkMode为1时,目标类型信息需要一次性全部传入(接口只调用一次);第二种场景业务分多次接口,每次的traceId相同,根据相同的traceId定义为同一批,统一比对 |
true, false |
true |
bulkMode |
Integer |
是 |
入参targetDialectInfos中是否已经包含了所有需要比对验证的多库信息,1表示本次接口调用已包含所有库信息直接开始多发执行,接口返回后可以立即查询比对结果信息;2表示入参targetDialectInfos中未包含所用目标方言信息,需分多次调用,例如源端ORACLE到 GAUSSDB_ORACLE、DM、OCEAN_BASE_ORACLE的多发,第一次调用只给了DM和OCEAN_BASE_ORACLE的信息,信息不全,第二次调用需要给ORACLE、GAUSSDB_ORACLE的信息。2的前提是needTransform必须是false,并且traceId和targetDialects必须传入(接口调用多次,每次的traceId相同,根据相同的traceId定义为同一批,统一比对),返回信息为本次目标库执行结果已经发送给比对服务,等待剩余批次调用后开始比对,具体比对结果请通过traceId去比对服务界面查询 |
1 一次性组合调用、2 分多次调用 |
1 |
traceId |
String |
否 |
用于查询比对报告的ID值(通常为uuid)。伪多发场景必传。用于表明本次传入的目标库需要和哪些具有相同traceId的源/目标库一起进行结果比较验证 |
84cbb67ad75b47b689445f33c3d4cef3 |
TargetDialectInfo对象结构如下:
参数名 |
类型 |
是否必须 |
说明 |
取值范围 |
示例 |
targetDialect |
String |
是 |
源库和目标数据库类型(大小写均可,建议全大写),当内容和 sourceDialect一致时的表示本结构为源方言信息 |
当源为ORACLE时,取值范围:ORACLE、LIGHTDB_ORACLE、GAUSSDB_ORACLE、DM、OCEAN_BASE_ORACLE; 当源为MYSQL时,取值范围MYSQL、GAUSSDB500_ORACLE |
ORACLE |
targetDbVersion |
String |
否 |
目标数据库版本(预留项,暂未使用) |
||
schemaName |
String |
否 |
多发执行时,会在每个目标数据库下指定的业务库或schema下执行sql,不填则按照数据源配置中的dbname执行SQL。oracle系为用户名;mysql、postgresql系为URL中ip和port后面的databaseName |
dbtrade |
|
sql |
String |
否 |
业务原始sql或目标方言已适配的SQL。needTransform为true表示真多发时:仅需在targetDialect表示源方言时,填写为业务原始SQL,目标方言对应sql无需填写;needTransform为false表示伪多发时:源方言和目标方言均需填写对应已适配的SQL |
update unisql_test set name = @name where id=@id |
|
sqlParameters |
List<BindVariable> |
否 |
预编译sql语句的参数信息(如果业务sql中有绑定变量,则此参数必填) |
BindVariable对象结构如下:
参数名 |
类型 |
是否必须 |
说明 |
示例 |
---|---|---|---|---|
name |
String |
是 |
sql语句的绑定变量名(伪代码SQL中的@绑定变量的名字) |
name |
type |
Integer |
是 |
预编译sql语句的绑定变量参数值类型(java.sql.Types中的具体值)支持范围见如下:数据类型支持范围和java.sql.Types映射值章节 |
12 |
value |
Object |
是 |
预编译sql语句的绑定变量参数的内容 |
lilei |
10.10.2.6. 数据类型支持范围和java.sql.Types映射值章节
type支持的数据类型映射值如下:
字段类型 |
java.sql.Types |
variableType值(对应java.sql.Types值) |
---|---|---|
BINARY_FLOAT、FLOAT、REAL |
Types.FLOAT |
6 |
BINARY_DOUBLE、DOUBLE、DOUBLE PRECISION |
Types.DOUBLE |
8 |
CHAR、CHARACTER |
Types.CHAR |
1 |
NCHAR |
Types.NCHAR |
-15 |
NVARCHAR、NVARCHAR2、NCHAR VARYING |
Types.NVARCHAR |
-9 |
VARCHAR、VARCHAR2、TINYTEXT |
Types.VARCHAR |
12 |
TINYINT 、INT1 |
Types.TINYINT |
-6 |
SMALLINT 、INT2 |
Types.SMALLINT |
5 |
INTEGER、INT、INT3、MEDIUMINT、INT4 |
Types.INTEGER |
4 |
BIGINT、INT8 |
Types.BIGINT |
-5 |
CLOB |
Types.CLOB |
2005 |
DECIMAL、DEC、NUMBER、NUMERIC |
Types.DECIMAL |
3 |
DATE |
Types.DATE |
91 |
TIME |
Types.TIME |
92 |
TIMESTAMP、DATETIME、TIMESTAMP(p) WITH TIME ZONE |
Types.TIMESTAMP |
93 |
ROWID |
Types.ROWID |
-8 |
BOOL、BOOLEAN |
Types.BOOLEAN |
16 |
TEXT、MEDIUMTEXT、LONGTEXT |
Types.LONGVARCHAR |
-1 |
10.10.2.7. 接口返回参数
参数名 |
类型 |
是否必须 |
说明 |
取值范围 |
示例 |
---|---|---|---|---|---|
code |
int |
是 |
状态码,0表示成功,非0表示异常 |
完整清单详见下文错误码清单 |
0 |
message |
String |
是 |
信息描述 |
多发比对成功,结果一致/比对报告结果不一致,可通过traceId,前往比对报告界面查看比对结果 |
|
data |
MultiplexOutput |
否 |
目标库多发比对后信息实体 |
MultiplexOutput对象结构如下:
参数名 |
类型 |
是否必须 |
说明 |
取值范围 |
示例 |
---|---|---|---|---|---|
traceId |
String |
否 |
用于查询比对报告的ID |
UUID |
84cbb67ad75b47b689445f33c3d4cef3 |
10.10.2.8. 错误码
错误码 |
描述 |
---|---|
0 |
多发比对成功,结果一致 |
10000 |
入参不能为空! |
10001 |
目标数据库信息[targetDialectInfos]不能为空! |
10002 |
目标数据库类型[targetDialect]不能为空! |
10003 |
目标数据库类型[%s]暂不支持! |
10004 |
源端数据库类型[%s]输入不正确,目前只持支oracle,mysql! |
10005 |
输入的源sql不能为空! |
10006 |
绑定变量名[name]不能为空! |
10007 |
绑定变量类型[%d]不支持! |
10008 |
输入的[targetDialectInfos]中源库相关信息不能为空! |
10009 |
伪多发时,traceId必须由外部传递进来! |
10011 |
bulkMode范围必须是1或2! |
10012 |
真多发时,即needTransform=true时bulkMode必须为1,一次性调用! |
10013 |
伪多发且分多次调用时,即needTransform=false,bulkMode=2时,targetDialects(指定多发哪几个目标数据库)不能为空! |
10020 |
入参[needTransform]不能为空! |
30000 |
多发执行异常:%s |
40002 |
获取比对结果失败! |
40003 |
比对服务地址未授权 |
40004 |
参数值[TraceId]不能为空 |
40005 |
比对报告结果不一致,可通过traceId,前往比对报告界面查看比对结果 |
40006 |
查询比对报告结果时出现异常,trace_id= |
40007 |
比对报告结果获取超时 |
40011 |
根据traceId查看多发比对结果是否一致失败 |
-1 |
未知异常 |
10.10.2.9. 三种使用场景以及示例
1、真多发时needTransform必须是true表示SQL需要通过统一SQL内部转换,bulkMode必须是1,目标类型信息需要一次性全部传入(接口只调用一次)。
2、伪多发needTransform必须是false表示SQL不需要通过统一SQL内部转换。traceId必须传入。bulkMode为1时,目标类型信息需要一次性全部传入(接口只调用一次)。
3、伪多发needTransform必须是false表示SQL不需要通过统一SQL内部转换。traceId必须传入。bulkMode为2时表示目标类型信息需要分批多次传入。targetDialects必须传入(接口调用多次,每次的traceId相同,根据相同的traceId定义为同一批,统一比对)。
10.10.2.9.1. 请求示例一
真多发场景,源端为ORACLE,多发目标端为LIGHTDB_ORACLE, GAUSSDB_ORACLE, DM, OCEAN_BASE_ORACLE。needTransform必须是true表示SQL需要通过统一SQL内部转换,并且bulkMode必须是1,目标类型信息需要一次性全部传入(接口只调用一次)。
{
"sourceDialect": "ORACLE", // 源端数据库类型
"needTransform": true, // 业务DML语句是否需要多发转换到信创目标库SQL,true表示需要多发转换
"bulkMode": 1, // 入参targetDialectInfos中是否已经包含了所有需要比对验证的多库信息,1表示本次接口调用已包含所有库信息只调用接口一次,接口返回后可以立即查询比对结果信息;
"targetDialectInfos": [ // 目标数据库结构
{
"targetDialect": "ORACLE", // 与外层的sourceDialect源类型相同,故本结构表示源数据库类型信息
"schemaName": "unisql_test", // 源端业务库或schema名
"sql": "update unisql_test set name = @name where id=@id", // 源端业务原始SQL语句
"sqlParameters": [ // 源端绑定变量参数内容
{
"name": "id", // 源端绑定变量名称
"type": 4, // 源端绑定变量类型
"value": 1 // 源端绑定变量值
}
,
{ // 源端第二个绑定变量参数内容
"name": "name",
"type": 12,
"value": "测试"
}
]
},
{
"targetDialect": "LIGHTDB_ORACLE", // 目标数据库类型,此处表示lightdb-oracle
"schemaName": "unisql_test1" // 业务库或schema名
}
,
{
"targetDialect": "GAUSSDB_ORACLE", // 目标数据库类型,此处表示gaussdb-oracle
"schemaName": "unisql_test2"
}
,
{
"targetDialect": "DM", // 目标数据库类型,此处表示达梦
"schemaName": "unisql_test"
}
,
{
"targetDialect": "OCEAN_BASE_ORACLE", // 目标数据库类型,此处表示ob-oracle
"schemaName": "unisql_test"
}
]
}
10.10.2.9.2. 返回示例一
{
"code": 0, // 返回状态码
"message": "成功,比对结果一致", // 返回状态信息
"data": {
"traceId": "a4784f429cb24c668024c8e954440fff" // 用于查询比对报告的ID
}
}
10.10.2.9.3. 请求示例二
伪多发场景,所有信息组合一次调用。源端为ORACLE,多发目标端为LIGHTDB_ORACLE, GAUSSDB_ORACLE, DM, OCEAN_BASE_ORACLE。 needTransform必须是true表示SQL需要通过统一SQL内部转换,并且bulkMode必须是1,目标类型信息需要一次性全部传入(接口只调用一次)。
{
"sourceDialect": "ORACLE", // 源端数据库类型
"needTransform": false, // 业务DML语句是否需要多发转换到信创目标库SQL,false表示不需要多发转换
"bulkMode": 1, // 入参targetDialectInfos中是否已经包含了所有需要比对验证的多库信息,1表示本次接口调用已包含所有库信息只调用接口一次,接口返回后可以立即查询比对结果信息;
"traceId": "84cbb67ad75b47b689445f33c3d4cef3", // 用于查询比对报告的ID
"targetDialectInfos": [ // 目标数据库结构
{
"targetDialect": "ORACLE", // 与外层的sourceDialect源类型相同,故本结构表示源数据库类型信息
"schemaName": "unisql_test", // 源端业务库或schema名
"sql": "update unisql_test set name = @name where id=@id", // 源端业务原始ORACLRE SQL语句
"sqlParameters": [ // 源端绑定变量参数内容
{
"name": "id", // 源端绑定变量名称
"type": 4, // 源端绑定变量类型
"value": 1 // 源端绑定变量值
}
,
{ // 源端第二个绑定变量参数内容
"name": "name",
"type": 12,
"value": "测试"
}
]
},
{
"targetDialect": "LIGHTDB_ORACLE", // 目标数据库类型,此处表示lightdb-oracle
"schemaName": "unisql_test1", // 业务库或schema名
"sql": "update unisql_test set name = @name where id=@id", // 业务已适配的lightdb-oracle SQL语句
"sqlParameters": [ // 绑定变量参数内容
{
"name": "id", // 绑定变量名称
"type": 4, // 绑定变量类型
"value": 1 // 绑定变量值
}
,
{ // 第二个绑定变量参数内容
"name": "name",
"type": 12,
"value": "测试"
}
]
}
,
{
"targetDialect": "GAUSSDB_ORACLE", // 目标数据库类型,此处表示gaussdb-oracle
"schemaName": "unisql_test2", // 业务库或schema名
"sql": "update unisql_test set name = @name where id=@id", // 业务已适配的gaussdb-oracle SQL语句
"sqlParameters": [ // 绑定变量参数内容
{
"name": "id", // 绑定变量名称
"type": 4, // 绑定变量类型
"value": 1 // 绑定变量值
}
,
{ // 第二个绑定变量参数内容
"name": "name",
"type": 12,
"value": "测试"
}
]
}
,
{
"targetDialect": "DM", // 目标数据库类型,此处表示达梦
"schemaName": "unisql_test", // 业务库或schema名
"sql": "update unisql_test set name = @name where id=@id", // 业务已适配的达梦 SQL语句
"sqlParameters": [ // 绑定变量参数内容
{
"name": "id", // 绑定变量名称
"type": 4, // 绑定变量类型
"value": 1 // 绑定变量值
}
,
{ // 第二个绑定变量参数内容
"name": "name",
"type": 12,
"value": "测试"
}
]
}
,
{
"targetDialect": "OCEAN_BASE_ORACLE", // 目标数据库类型,此处表示ob-oracle
"schemaName": "unisql_test", // 业务库或schema名
"sql": "update unisql_test set name = @name where id=@id", // 业务已适配的ob-oracle SQL语句
"sqlParameters": [ // 绑定变量参数内容
{
"name": "id", // 绑定变量名称
"type": 4, // 绑定变量类型
"value": 1 // 绑定变量值
}
,
{ // 第二个绑定变量参数内容
"name": "name",
"type": 12,
"value": "测试"
}
]
}
]
}
10.10.2.9.4. 返回示例二
{
"code": 0, // 返回状态码
"message": "成功,比对结果一致", // 返回状态信息
"data": {
"traceId": "a4784f429cb24c668024c8e954440fff" // 用于查询比对报告的ID
}
}
10.10.2.9.5. 请求示例三
伪多发场景,非一次性调用,入参targetDialectInfos中未包含所用目标方言信息,分多次调用时。例如源端为ORACLE,多发目标端为LIGHTDB_ORACLE, GAUSSDB_ORACLE, DM, OCEAN_BASE_ORACLE。 第一次调用只给了DM和OCEAN_BASE_ORACLE的信息,信息不全,第二次调用需要给ORACLE、GAUSSDB_ORACLE、LIGHTDB_ORACLE的信息。 needTransform必须是false表示SQL不需要通过统一SQL内部转换,bulkMode必须为2时表示目标类型信息需要分批多次传入,并且traceId和targetDialects必须传入(接口调用多次,每次的traceId相同,根据相同的traceId定义为同一批,统一比对)
// 分成两次调用,第一次调用
{
"sourceDialect": "ORACLE", // 源端数据库类型
"needTransform": false, // 业务DML语句是否需要多发转换到信创目标库SQL,false表示不需要多发转换
"bulkMode": 2, // 入参targetDialectInfos中是否已经包含了所有需要比对验证的多库信息,1表示本次接口调用已包含所有库信息只调用接口一次,接口返回后可以立即查询比对结果信息;
"traceId": "84cbb67ad75b47b689445f33c3d4cef3", // 用于查询比对报告的ID
"targetDialects":["ORACLE", "LIGHTDB_ORACLE", "GAUSSDB_ORACLE", "DM", "OCEAN_BASE_ORACLE"], // 指定多发哪几个目标数据库,多发完成后比对侧会根据该标签进行数据库类型判断是否所有都已执行完成,执行完成则开始比对,比对侧最大等待时间为10秒,如果10秒还有数据库类型未执行完成则立即开始比对。伪多发场景,且分多次调用时必须传入(needTransform=false且bulkMode=2时)
"targetDialectInfos": [ // 目标数据库结构
{
"targetDialect": "DM", // 目标数据库类型,此处表示达梦
"schemaName": "unisql_test", // 业务库或schema名
"sql": "update unisql_test set name = @name where id=@id", // 业务已适配的达梦 SQL语句
"sqlParameters": [ // 绑定变量参数内容
{
"name": "id", // 绑定变量名称
"type": 4, // 绑定变量类型
"value": 1 // 绑定变量值
}
,
{ // 第二个绑定变量参数内容
"name": "name",
"type": 12,
"value": "测试"
}
]
}
,
{
"targetDialect": "OCEAN_BASE_ORACLE", // 目标数据库类型,此处表示ob-oracle
"schemaName": "unisql_test", // 业务库或schema名
"sql": "update unisql_test set name = @name where id=@id", // 业务已适配的ob-oracle SQL语句
"sqlParameters": [ // 绑定变量参数内容
{
"name": "id", // 绑定变量名称
"type": 4, // 绑定变量类型
"value": 1 // 绑定变量值
}
,
{ // 第二个绑定变量参数内容
"name": "name",
"type": 12,
"value": "测试"
}
]
}
]
}
// 分成两次调用,第二次调用
{
"sourceDialect": "ORACLE", // 源端数据库类型
"needTransform": false, // 业务DML语句是否需要多发转换到信创目标库SQL,false表示不需要多发转换
"bulkMode": 2, // 入参targetDialectInfos中是否已经包含了所有需要比对验证的多库信息,1表示本次接口调用已包含所有库信息只调用接口一次,接口返回后可以立即查询比对结果信息;
"traceId": "84cbb67ad75b47b689445f33c3d4cef3", // 用于查询比对报告的ID
"targetDialects":["ORACLE", "LIGHTDB_ORACLE", "GAUSSDB_ORACLE", "DM", "OCEAN_BASE_ORACLE"], // 指定多发哪几个目标数据库,多发完成后比对侧会根据该标签进行数据库类型判断是否所有都已执行完成,执行完成则开始比对,比对侧最大等待时间为10秒,如果10秒还有数据库类型未执行完成则立即开始比对。伪多发场景,且分多次调用时必须传入(needTransform=false且bulkMode=2时)
"targetDialectInfos": [ // 目标数据库结构
{
"targetDialect": "ORACLE", // 源数据库类型
"schemaName": "unisql_test", // 业务库或schema名
"sql": "update unisql_test set name = @name where id=@id", // 业务原始ORACLRE SQL语句
"sqlParameters": [ // 绑定变量参数内容
{
"name": "id", // 绑定变量名称
"type": 4, // 绑定变量类型
"value": 1 // 绑定变量值
}
,
{ // 第二个绑定变量参数内容
"name": "name",
"type": 12,
"value": "测试"
}
]
},
{
"targetDialect": "LIGHTDB_ORACLE", // 目标数据库类型,此处表示LIGHTDB_ORACLE
"schemaName": "unisql_test1", // 业务库或schema名
"sql": "update unisql_test set name = @name where id=@id", // 业务已适配的LIGHTDB_ORACLE SQL语句
"sqlParameters": [ // 绑定变量参数内容
{
"name": "id", // 绑定变量名称
"type": 4, // 绑定变量类型
"value": 1 // 绑定变量值
}
,
{ // 第二个绑定变量参数内容
"name": "name",
"type": 12,
"value": "测试"
}
]
}
,
{
"targetDialect": "GAUSSDB_ORACLE", // 目标数据库类型,此处表示GAUSSDB_ORACLE
"schemaName": "unisql_test2", // 业务库或schema名
"sql": "update unisql_test set name = @name where id=@id", // 业务已适配的GAUSSDB_ORACLE SQL语句
"sqlParameters": [ // 绑定变量参数内容
{
"name": "id", // 绑定变量名称
"type": 4, // 绑定变量类型
"value": 1 // 绑定变量值
}
,
{ // 第二个绑定变量参数内容
"name": "name",
"type": 12,
"value": "测试"
}
]
}
]
}
10.10.2.9.6. 返回示例三
{
"code": 0, // 返回状态码
"message": "本次目标库执行结果已经发送给比对服务,等待剩余批次调用后开始比对,具体比对结果请通过traceId去比对服务界面查询", // 返回状态信息
"data": {
"traceId": "a4784f429cb24c668024c8e954440fff" // 用于查询比对报告的ID
}
}
{
"code": 0, // 返回状态码
"message": "本次目标库执行结果已经发送给比对服务,等待剩余批次调用后开始比对,具体比对结果请通过traceId去比对服务界面查询", // 返回状态信息
"data": {
"traceId": "a4784f429cb24c668024c8e954440fff" // 用于查询比对报告的ID
}
}