SharkStart详细解读

本文遵循BY-SA版权协议,转载请附上原文出处链接。


本文作者: 黑伴白

本文链接: http://heibanbai.com.cn/posts/7321fb14/

SharkStart详细解读

常用参数表

  • 源系统:SKS_DEV_SRC_SYS_INFO

  • 源数据库:SKS_DEV_DB_ACC_INFO

  • 备份库:SKS_DEV_STANDBY_DB_INFO

  • 采集源:SKS_DEV_CLE_SRC_INFO

  • 元数据结构:SKS_DEV_META_DATA_INFO

采集程序解读

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
perl /home/moiase/SharkStart/bin/export_data.pl
Picked up JAVA_TOOL_OPTIONS: -Ddb2.jcc.charsetDecoderEncoder=3
License verified!
[Error][check_param]参数检查不通过!:
[Error][check_param] 参数'-dbid'未定义
[Error][check_param] 参数'-outfile'未定义
[Error][check_param] 参数'-charset'未定义
[Error][check_param] 参数'-table'未定义
[2024-05-14 15:01:14] [Error][main] 调用check_param失败

[usage] export_data.pl [parameters]
----------参数名如下,以'-'打头,参数名后面跟上对应的参数值,用空格间隔;参数之间用空格间隔----------
-jobid 作业ID
-dbid 数据库访问控制ID
-outfile 导出文件(全路径)
-table 卸数目标表
-filt 过滤条件(不带WHERE)
-fixed 定长标志(Y-定长 N-非定长,不区分大小写)
-delim 分隔符[默认为|@|]
-enddel 是否含末尾分隔符(Y-是 N-否,不区分大小写)
-rcdelim 记录分隔符[默认为\n]
-charset 字符集(如:UTF8或者GBK,不区分大小写)
-ctltyp 控制文件类型(1-DDL文件和控制文件 2-DDL文件 3-控制文件)
-ddlfile DDL文件路径
-ctlfile CTRL文件路径
-isview [选填]是否是视图(Y-是 N-否,不区分大小写)
-viewkey [选填]isview为视图时指定viewkey,用于生成DDL文件中主键字段,无可填NULL
-setdef [选填]是否设置默认值(Y-是 N-否,不区分大小写)
-dtfrmt [选填] DATE类型格式(针对oralce卸数指定DATE格式 YYYY-MM-DD 或者 YYYY-MM-DDTHH:MM:SS)
-nonsel [选填]按字段卸数(不区分大小写),
不需要卸数的字段列表,逗号分隔,与参数sel不能同时指定
-sel [选填]按字段卸数(不区分大小写),
需要卸数的字段列表,逗号分隔,与参数nonsel不能同时指定
-chkprcv [选填] 限分布式数据源,ignore|continue|force,断点处理方式
ignore, 忽略断点;continue,断点继续, 但之前和作业参数以及分区连接配置需要一致;force,强制断点继续,忽略不一致的参数及配置
默认取DIST_EXPORT_CHECKPOINT_RECOVERY_MODE环境变量设置
如未设置,默认取force
-parterr [选填] 限分布式数据源,abort|fail-wait|next,某个分区处理程序执行失败后的处理方式
abort, 强行中断;fail-wait,等待已运行的子进程结束,然后报错;next,继续下一个分区,所有分区的处理都结束后,再报错结束
默认next
-degree [选填] 限分布式数据源,正整数,分区处理的并发度
默认取DIST_EXPORT_DEFAULT_PARALLEL_DEGREE环境变量设置
如未设置环境变量,默认值为2
-distddl [选填] 限分布式数据源,once|always,DDL获取方式
once, 只获取一次;always,每个分库都会单独获取DDL;
默认取DIST_EXPORT_DEFAULT_DDL_FETCH_MODE环境变量设置
如未设置,默认取once
-repflg [选填] 是否替换字段中包含的换行符(Y/N/指定替换字符,默认N,不进行REPLACE替换, 不指定指定替换字符的时候默认替换成空格)
-trimflg [选填] 字段是否作TRIM(Y/N/R,默认N,不做TRIM处理,R:右TRIM)
-kerbfile [选填] 当卸载源库为HIVE且hive的认证方式为KERBEROS时,需要通过此参数指定kerberos认证文件路径
-principal [选填] 当卸载源库为HIVE且hive的认证方式为KERBEROS时,需要通过此参数指定kerberos认证文件对应的principal
-logflg [选填] 是否记录运行结果(Y/N,默认Y,记录运行结果)
-repcol [选填] 制定需要替换换行符的字符,逗号分隔(当repflg为Y时生效)
-metaflg [选填] 是否从目标库的元数据表中获取DDL信息(Y/N,默认Y,从目标库的元数据表中获取DDL信息)
-clobflg [选填] 是否需要卸载CLOB字段(Y/N,默认N,仅对ORACLE和DB2有效)
-ddlsync [选填] 是否需要同步更新ddl和ctrl信息到配置库表中(Y/N,默认Y)
-------------------------------------------------------------------
当环境变量SKS_PARSE_FILE_FLAG的值为0时,必须给出以下参数
-source 源系统名
-date 8位业务日期(YYYYMMDD)
-org 9位机构号
-batch 4位批次号
-cletype 采集类型(ALL-全量|ADD-增量|INIT-初始化|DEL-减量)
-------------------------------------------------------------------
命令行接口传入数据库连接信息时使用以下参数
-dbtype [必填] 数据库类型
-dbip 数据库IP地址(Mysql数据库必填)
-dbport 数据库端口(Mysql数据库必填)
-dbsid 数据库SID(ORACLE,DB2数据库必填)
-dbname 数据库名(Mysql数据库必填)
-dbserv 数据库服务名
-dbuser [必填] 数据库用户名
-dbpwd [必填] 数据库密码
-dbschm [必填] 数据库SCHEMA
-dbcset [必填] 数据库字符集

采集数据库

数据库类型 其他特点 连接方式 抽取方式-无大字段 抽取方式-有大字段 按照配置精度采集 超过配置精度截取 大字段
DB2 转换时长度取data_length DBI(DBD::DB2) export DBI CLOB-支持
BLOB-不支持(置空)
Oracle data_length(char/varchar)
char_length(nchar/nvarchar/varchar2)
data_pricision&data_scale(数值型)
DBI(DBD::Oracle) export DBI CLOB-支持
MySQL DBI(DBD::mysql) DBI DBI 否 - 以源库为准 否 - 以源库为准 CLOB-支持
GaussDB JDBC JDBC JDBC 否 - 以源库为准 否 - 以源库为准 CLOB-支持
SQLServer JDBC JDBC JDBC
Informix 老版本数据库无法去除回车换行 DBI DBI 否 - 以源库为准 否 - 以源库为准

DB2

根据DB_SID字段获取服务器上数据库相关信息

timestamp类型字段如何配置:

  • fieldtype: timestamp
  • column_type: timestamp(10,6)
  • data_length: 10
  • data_scale: 6

查询配置结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
SELECT
T1.COLNAME as FIELD_NAME,
T1.TYPENAME as FIELD_TYPE,
T1.SCALE as DATA_SCALE,
T1.LENGTH as DATA_LENGTH,
T1.NULLS as NULLABLE,
T1.FIELD_REMARKS,
T1.TABLE_REMARKS,
CASE WHEN T2.COLNAME IS NOT NULL THEN 'Y' ELSE 'N' END AS ISKEY
FROM (
SELECT
TT1.COLNAME,
TT1.TYPENAME,
TT1.SCALE,
TT1.LENGTH,
TT1.NULLS,
TT1.REMARKS AS FIELD_REMARKS,
TT2.REMARKS AS TABLE_REMARKS,
TT1.TABSCHEMA, TT1.TABNAME,
TT1.COLNO
FROM SYSCAT.COLUMNS TT1, SYSCAT.TABLES TT2
WHERE TT1.TABSCHEMA = TT2.TABSCHEMA AND TT1.TABNAME = TT2.TABNAME
) T1
LEFT JOIN (
SELECT TT2.COLNAME, TT1.TABSCHEMA, TT1.TABNAME
FROM SYSCAT.INDEXES TT1 , SYSCAT.INDEXCOLUSE TT2
WHERE TT1.INDSCHEMA = TT2.INDSCHEMA AND TT1.INDNAME = TT2.INDNAME AND TT1.UNIQUERULE='P') T2
ON T1.TABSCHEMA = T2.TABSCHEMA AND T1.TABNAME = T2.TABNAME AND T1.COLNAME = T2.COLNAME
WHERE
T1.TABSCHEMA = 'DB2INST1'
AND T1.TABNAME = 'CLE_DB2_TEST_TABLE001'
ORDER BY T1.TABNAME, T1.COLNO

Oracle

根据DB_SID字段获取服务器上数据库相关信息

查询配置结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
SELECT
T1.COLUMN_NAME AS FIELD_NAME,
T1.DATA_TYPE AS FIELD_TYPE,
T1.DATA_SCALE,
T1.DATA_PRECISION,
T1.DATA_LENGTH,
T1.CHAR_LENGTH,
T1.NULLABLE,
CASE WHEN T2.COLUMN_NAME IS NOT NULL THEN 'Y' ELSE 'N' END AS ISKEY,
'' AS FIELD_REMARKS,
'' AS TABLE_REMARKS
FROM (
SELECT
COLUMN_NAME,
DATA_TYPE,
DATA_SCALE,
DATA_PRECISION,
DATA_LENGTH,
CHAR_LENGTH,
NULLABLE,
OWNER,
TABLE_NAME,
COLUMN_ID
FROM ALL_TAB_COLUMNS
) T1
LEFT JOIN (
SELECT A.COLUMN_NAME, A.OWNER, A.TABLE_NAME
FROM USER_CONS_COLUMNS A, USER_CONSTRAINTS B
WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND B.CONSTRAINT_TYPE = 'P'
) T2
ON T1.OWNER = T2.OWNER AND T1.TABLE_NAME =T2.TABLE_NAME AND T1.COLUMN_NAME = T2.COLUMN_NAME
WHERE T1.OWNER = 'SHARKSTART'
AND T1.TABLE_NAME = 'SKS_SCT_SRC_DDL_INFO'
ORDER BY T1.COLUMN_ID

GoldenDB

多次出现过抽取goldendb数据库失败问题,联系DBA确认原因,其初步判断疑似与数据库备份相关,同时,因MDS数据抽取使用6606端口,其为代理端口,与备份使用端口相同。

数据抽取类的,建议使用5501端口,其直连数据库备机进行。

所有的goldendb数据库的mds抽数都使用5501端口,从库优先抽取,6606只给应用使用。

当前SharkStart抽取GoldenDB数据,因暂未增加GoldenDB类型,是按照MySQL数据库类型进行的

openGaussDB

配置DBIP字段
[paasogdb.paas.dev.cmbc.cn:端口,gaussdb.dev.cmbc.cn:端口/yourdbname?connectTimeout=1&targetServerType=master&tcpKeepAlive=true&loginTimeout=10]

OceanBase

配置DBIP字段

1
2
# oceanbase配置格式 启用jdbc负载均衡 不连F5 写所有的obproxy地址对应的域名
[obproxydns1:port1,obproxydns2:port2/username?pool=false&rewriteBatchedStatements=true&useServerPrepStmts=true]

问题解决方法

SHARKSTART导入excel时一直导入中的原因:采集源、数据库、源系统,有其中一项未关联到


蚂蚁🐜再小也是肉🥩!


SharkStart详细解读
http://heibanbai.com.cn/posts/7321fb14/
作者
黑伴白
发布于
2023年5月24日
许可协议

“您的支持,我的动力!觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付