首批通过分布式安全可靠测评,为关键业务系统打造
Checker 组件参数说明
更新时间:2023-06-08 10:49:34
分享
| 参数 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|
| datasource.binarypk.permit | 否 | true | 本参数表示是否支持主键是二进制类型。设置为 true,表示支持主键是二进制类型。设置为 false,表示不支持主键是二进制类型。 |
| datasource.char.trim | 否 | false | 表示是否删除 Oracle char 类型数据的尾部空格。设置为 true,表示删除尾部空格。设置为 false,表示不删除尾部空格。 |
| datasource.image.address | 是 | 无 | 目标端的地址,各类数据库的地址格式如下: * MySQL 和 OceanBase 数据库 MySQL 租户:ip:port * Oracle 数据库:ip:port/servicename * OceanBase 数据库 Oracle 租户:ip:port * DB2 数据库:ip:port/db |
| datasource.image.charset.map | 否 | {"gb18030":"gbk","gbk":"gbk","utf16":"utf16","default":"utf8"} |
目标端 OceanBase 数据库的字符集编码映射。 |
| datasource.image.index.ignore | 否 | false | 表示是否直接拉取源表中的分值最低索引。如果将本参数设置为 true,表示如果无法匹配新增索引,则直接拉取源表中的分值最低索引。 如果开启,并且目标表无 pk/uk 时,可能会出现重复数据的情况复。 |
| datasource.image.insert.error.ignore |
否 | false | 忽略数据插入错误,避免出错中断。对于具体错误,请用户后续统一处理。错误信息记录在日志文件 insertErrorIgnoreerror.log 中。 该日志文件的具体路径为 logs 目录下的 error.log。 |
| datasource.image.password | 是 | 无 | 表示目标端的用户。 |
| datasource.image.table.notexists.ignore | 否 | false | 表示是否忽略"目标表不存在"异常。设置为 false,表示不忽略。设置为 true,表示忽略。 |
| datasource.image.table.empty.check |
否 | true | 表示是否要检查目标表为空,本参数仅适用于数据迁移场景: * 本参数设置为 true,如果 task.resume = false,当检查到目标表不为空,则会报错。 * 本参数设置为 false,则不会检查目标表是否为空。 |
| datasource.image.type | 是 | 无 | 表示目标端的类型,取值包括 OB_IN_ORACLE_MODE 和 OB10(OB mysql mode)。 |
| datasource.image.username | 是 | 无 | 表示目标端的密码。 |
| datasource.master.address | 是 | 无 | 表示源端地址,不同数据源的格式不同。 |
| datasource.master.password | 是 | 无 | 表示源端的用户名。 |
| datasource.master.systenant.password | 否 | 默认同 datasource.master.password |
系统租户的密码。 |
| datasource.master.systenant.username | 否 | 默认同 datasource.master.username |
系统租户的用户名。例如,root@sys#ob_1008810671.admin。 |
| datasource.master.type | 是 | 无 | 表示源端的类型,取值包括 ORACLE/MYSQL/DB2/SYBASE OB_IN_ORACLE_MODE/OB10/OB05。 |
| datasource.master.username | 是 | 无 | 表示源端的密码。 |
| datasource.nchar.charset.map | 否 | {"AL16UTF16":"UTF16"} | 表示 Oracle 数据库中的 NLS_NCHAR_CHARACTERSET 配置编码映射到 Java 中的字符集编码配置。 |
| datasource.ob.splitor.bymarcroinfo | 否 | false | 当源端类型是 OceanBase,并且是有主键表时,会用到本参数。本参数表示 OMS 使用的切片策略: * 设置为 true,表示使用 OceanBase 系统表来切片。 * 设置为 false,表示通过正常索引切片。 |
| datasource.read.mod | 否 | stream | 迁移和校验数据处理模式。 * stream:流式读取处理。 * batch:一次性读取。 |
| datasource.sybase.charset | 否 | utf-8 | Sybase 编码设置。 |
| datasource.sybase.metadata.uppercase | 否 | true | 是否对表名区分大小写。默认情况下,参数取值为 true。如果目标端是 OceanBase 数据库 MySQL 租户的模式,请将本参数设置为 false,其它情况下,请保持默认值。 OceanBase 数据库 MySQL 租户的表名通常默认为小写,OceanBase 数据库 Oracle 租户的表名通常默认为大写。 |
| datasource.timezone | 否 | +00:00 | 时区。 |
| filter.master.blacklist | 是 | 无,可为空 | 黑名单列表。多个黑名单之间使用 | 分隔,格式为 schema;tablename;column。每一段为正则表达式,*=.* 均表示任意匹配。示例如下: shell ^db$;^table1$;.*|^db$;^table2$;.* .*;.*;.* |
| filter.master.whitelist | 是 | 无,可为空 | 白名单列表。多个白名单之间使用 | 分隔,格式为 schema;tablename;column。每一段为正则表达式,*=.* 均表示任意匹配。示例如下: shell ^db$;^table1$;.*|^db$;^table2$;.* .*;.*;.* 如下示例表示排除 OMS_OBJECT_NUMBER、OMS_RELATIVE_FNO、OMS_BLOCK_NUMBER 和 OMS_ROW_NUMBER 等几列。 ^OBDBA$;^ROWID_TEST$;^(?!OMS_OBJECT_NUMBER)(?!OMS_RELATIVE_FNO)(?!OMS_BLOCK_NUMBER)(?!OMS_ROW_NUMBER).*$ |
| filter.verify.inmod.keys | 否 | 100 | 目标端 PK/UK 最多可以一批查询的数量。 |
| filter.verify.inmod.tables | 否 | "" | 配置校验需要使用 in 模式的表。未配置的情况下,前缀索引默认使用 in 模式校验。配置的情况下,匹配上的表才使用 in 模式校验。 格式和黑白名单一致。例如,^sqltest$;^prefix_index_test_bigdata$;.*。 in 模式校验是源端切片查询数据,目标端从源端查询的数据中解析出 PK/UK,通过 PK/UK 值使用 key in(....) 查询目标端的数据,再进行比对的过程。 注意 in 模式比对无法校验目标端多的数据,且效率低于默认比对。 |
| filter.verify.inmod.workers | 否 | 1 | 目标端 in 查询并发数。 |
| filter.verify.rectify.type | 否 | no | 自定义订正目标数据配置。 * no:不订正,默认值。 * now:一边检验一边订正。此时会忽略校验不一致最大值的限制。 * review:校验完复检几次后再进行订正。此时会受到校验不一致最大值的限制。 成功订正的 SQL 文件保存目录为 verify/{subId}/{schema}/rectify/suc/{table}.sql,失败订正的 SQL 文件保存目录为 verify/{subId}/{schema}/rectify/err/{table}.sql。 |
| force.split.by.rowid | 否 | false | 源库存在隐藏主键的情况下,您可以配置为 true,则迁移和校验时会强制使用隐藏列作为主键。例如 Oracle 数据库的 ROWID,OceanBase 数据库的 __pk_increment。 如果配置为 false,则使用表的 PK 或 UK 作为数据迁移和校验的主键。 源库中,除 ORACLE、OB_IN_ORACLE_MODE、OB10 类型可以配置为 true 外,其它类型仅支持配置为 false。 |
| limitator.datasource.connections.max | 否 | 50 | 数据库连接池的大小。该配置源端和目标端共用。 例如,配置为 100,表示源端最大连接数是 100,目标端最大连接数也是 100。 该参数的取值大于 0,并且需要大于最大并发数。具体的取值取决于并发数和连接数的关系。 |
| limitator.datasource.image.ob10freecpu.min | 否 | 30 | OceanBase CPU 防爆检查,新增配置 limitator.datasource.image.ob10freecpu.min=30,默认 CPU 空闲低于 30%,则暂停获取链接。 配置 limitator.datasource.image.ob10freecpu.min=0,表示不进行 CPU 防爆检查,CPU 防爆检查逻辑在内存防爆检查逻辑之后。 limitator.datasource.image.ob10freememory.min,如果内存防爆已经触发暂停,则不再进行 CPU 防爆检查。仅内存防爆检查无问题或作为源端无内存防爆检查时,才会进行 CPU 防爆检查。 |
| limitator.datasource.image.ob10freememory.min | 否 | 20 | OceanBase 数据库的内存保护阈值,取值范围为 10~100。 该值是 OceanBase 数据库内存的空闲百分比。例如,配置 30,表示当空闲内存小于 30% 时,写入数据会暂停等待,程序会等待连接获取,直至空闲内存大于 30%。 内存防爆检查只会在数据迁移链路目标端的 OceanBase 数据库上检查。 |
| limitator.db2.graphic.rtirm | 否 | false | DB2 Graphic 类型读取是否需要删除空格。 |
| limitator.empty.table.select.parallel | 否 | 16 | Oracle 判断表是否为空的并行 hint 数量。 SELECT /*+parallel(%d)*/1 FROM %s WHERE ROWNUM<2 |
| limitator.image.insert.batch.max | 否 | 500 | 一次插入目标数据库的记录数。例如,配置 200,表示最多插入 200 个之后,需要提交一次。 |
| limitator.java.opt | 否 | 无 | 运行时 JVM 参数,启动 Checker 脚本 /home/ds/bin/checker_new.sh 中会检查该配置。如果存在,则启动使用的是此处的配置。 |
| limitator.noneed.retry.exception | 否 | 无 | 用于执行 SQL 遇到表不存在等不可以重试的异常时,直接退出。 |
| limitator.null.replace.enable | 否 | true | Oracle gb18030 字段值为 chr(129)-chr(254),并且有 not null 约束,JDBC 读取为 null。对该情况进行替换 LIMITATOR_NULL_REPLACE_STRING。 |
| limitator.null.replace.string | 否 | 空格 | 配合 limitator.null.replace.enable 使用,用于替换 null 值的字符。 |
| limitator.oceanbase.index.useuk | 否 | true | OceanBase 数据库作为源端,没有 PK 的情况下是否使用 UK。 |
| limitator.oom.avoid | 否 | false | 是否开启防 OOM 开关。开启后会统计记录实际大小可能对性能产生影响。请注意: 防 OOM 开启需要设置 useCursorFetch=true,即 setFetchSize 生效。 * 当存在 timestamp 类型的字段值有 0000-00-00 00:00:00 会报错,防 OOM 和 0000-00-00 00:00:00 互斥。 * OceanBase 数据库 MySQL 租户的 PS 协议需要设置 useServerPrepStmts=true,解决 FLOAT 问题。当存在 timestamp 类型的字段值有 0000-00-00 00:00:00 会报错。 上述两种互斥问题,使用防 OOM 是否启用配置项来决定是否设置 useCursorFetch 和 useServerPrepStmts。一旦开启防 OOM,请确保没有非法时间 0000-00-00 00:00:00 和超出精度范围的 FLOAT 值。 |
| limitator.platform.split.threads.number | 否 | limitator.platform.threads.number/8<8?8:limitator.platform.threads.number/8 | 切分线程池大小,最小值为 8。 limitator.datasource.connections.max 最小是 limitator.platform.threads.number+limitator.platform.split.threads.number。 |
| limitator.platform.threads.number | 否 | 3 | 迁移校验最大工作线程池大小。 线程池需要和 limitator.datasource.connections.max 配合,通常连接数需要大于最大线程池,否则会存在作业等待连接的情况。 |
| limitator.prefix.index.action | 否 | 1 | MySQL 数据库至 OceanBase 数据库 MySQL 租户的数据迁移链路中,主键为前置索引时,limitator.prefix.index.action 配置项指定处理方式,默认值为 2。 * 0:根据原来的切片模式。 * 1:不切片,整张表拉取。 * 2:选取其它索引作为切片索引。如果无其它可用索引,则整张表拉取。 |
| limitator.prepared.splitors | 否 | 1000 | 当某张表 切分出来的任务数-运行中的任务数>配置的数量 时,切分作业停止切(含义就是很多切分出来的作业排队中,等会再切) |
| limitator.queue.size | 否 | limitator.select.batch.max*4 | 迁移:源端读取数据存入缓存队列大小。 校验:源端和目标端读取数据存入缓存队列和 jion 缓存队列大小,实际队列大小为该参数*2。 默认大小:limitator.select.batch.max*4。 |
| limitator.query.withorder | 否 | true | 查询不排序功能。默认排序 limitator.query.withorder=true,目前仅 MySQL 数据库和 OceanBase 数据库 MySQL 租户实现。 |
| limitator.resume.verify.fromkeys | 否 | false | 仅对上一次校验不一致的记录进行重新校验。下述参数必须是固定值才会生效: * limitator.resume.verify.fromkeys=true * task.resume=true * task.type=verify |
| limitator.reviewer.period | 否 | 3 | 每次 review 时间间隔,单位为秒。 |
| limitator.reviewer.review.batch.max | 否 | 100 | review 时每次查询的 key 的数量。 |
| limitator.reviewer.rounds.max | 否 | 20 | 最大 review 次数,校验流程中使用。但校验存在比对不上的数据时,review 过程会将这些 key 分别再次查询源库和目标库数据,并再次进行比对,该过程会持续多次,而该参数控制 review 的次数。 |
| limitator.reviewer.time.max | 否 | 60 | 最大 review 时间,单位为秒。 |
| limitator.select.batch.max | 否 | 3000 | 从源端读取的最大记录数。该参数会影响 stmt.setFetchSize(fetchSize)。 当按照主键迁移和校验时,每次迁移或校验的记录数。 当 Oracle ROWID 作为主键迁移时,该参数会计算每个分配的 Block 数。计算公式为:切数据量大小=表的字段长度*limitator.select.batch.max,blocksize=切数据量大小/8k。 该参数会影响读取写入之间的队列大小:queueSize=limitator.select.batch.max*4。 |
| limitator.splitor.blocks | 否 | 128 | 每个切片的 Block 数量,Oracle 无主键表迁移的情况下才有效。 |
| limitator.splitor.block.number.max | 否 | Long.MAX_VALUE | Block 切最大 Block 数。超过该数值,使用数据文件切分。 |
| limitator.splitor.compare.threads.number | 否 | 1 | 单个分片校验比较线程数。仅校验流程有效。 |
| limitator.split.usecondition | 否 | false | 是否将 Condition 使用到切片的 SQL 中。 |
| limitator.splitor.writer.number | 否 | 1 | 每个分配写入目标的任务数,仅数据迁移项目有效。 |
| limitator.sql.exec.max.last.time | 否 | 3600 | SQL 执行的最大重试时间,单位为秒。 |
| limitator.table.diff.max | 否 | 1000000 | 校验作业是最大比对不上的记录数,超过该数据将直接退出不再进行 review。 |
| limitator.table.nonunique.max | 否 | 10000 | 无索引情况下最大可以迁移的记录数。 |
| limitator.verify.many2one | 否 | false | 多表对单表的校验模式。该模式下只要求源表数据在目标表中,true 表示开启多表对单表校验模式。 |
| mapper.from_master_to_image.list | 否 | 无 | 源端至目标端的库表映射,通常配置为 sourceSchema ;*;*= destSchema ;*;* , 最多 4 段式,多个映射使用竖线(|)分隔。 |
| rectifier.image.enable | 否 | false | rectify 流程使用参数,表示允许自动订正目标表数据。通常不建议您使用 true。 |
| rectifier.image.operator.delete | 否 | false | rectify 流程使用参数,表示允许订正删除数据。通常不建议您使用 true。 |
| rectifier.image.operator.insert | 否 | false | rectify 流程使用参数,表示允许订正插入数据。通常不建议您使用 true。 |
| rectifier.image.operator.update | 否 | false | rectify 流程使用参数,表示允许订正更新数据。通常不建议您使用 true。 |
| sampler.verify.ratio | 否 | 100 | 取样比对,当配置 0<x<100 时,取样 x 调记录比对,其他情况无效。 |
| src.record.filter.mapping | 否 | 无 | GroovyRule 配置,task.split.mode=true 时,需要配置。 |
| task.resume | 否 | false | false:第一次运行,true:复检运行。 |
| src.table.whitelist | 否 | 无 | GroovyRule 配置,task.split.mode=true 时,需要配置。 |
| task.active.active | 否 | false | 双活标志,true 表示双活链路。 |
| task.id | 是 | 无 | Checker 的唯一 ID,与运行目录相关。 |
| task.subId | 是 | 无 | 初始值为 1,每复检一次+1。该值会在作业目录下建立对应的目录,以便记录哪一次运行结果文件: /home/ds/run/{taskname}/{task.type}/{task.subId} |
| task.type | 是 | 无 | 任务类型,包括 migrate(迁移) 和 verify(校验)。 |
| weak.consistency.read | 否 | false | OceanBase 数据库有效,true 表示采用弱读。 set @@ob_read_consistency='weak' |