一、GIS迁移步骤 金仓数据库支持的源库有Oracle和Postgresql。 下面介绍ArcGIS或GeoScene的数据迁移步骤。1、迁移准备 本次使用Linux X86平台需要准备Kingbase-Server-Linux-x86_67.tar和postgis_libs.tar包1.1 在 Kingbase 数据库上操作tar-xvfkingbase-server-linux-x86_64.tar# 若数据库目录lib、bin、extension下已有 postgis 相关的包, 则不需要再拷贝cp/home/kingbase/20220105/lib/postgis_libs/* /home/kingbase/20220105/lib/cp/home/kingbase/20220105/postgis-3.1.2/bin/* /home/kingbase/20220105/bin/cp/home/kingbase/20220105/postgis-3.1.2/lib/* /home/kingbase/20220105/lib/cp/home/kingbase/20220105/postgis-3.1.2/share/extension/* /home/kingbase/20220105/share/extension/ ./initdb-Usystem-Ddata;vimkingbase.conf ./sys_ctl-Ddata start ./ksql-Usystem-p54321testcreate user sde superuser;create schema sde;alter schema sde owner to sde;alter user sde password123456;create user rds_superuser superuser;alter user rds_superuser password123456;create database kingbase;create extension postgis;create extension postgis_raster;create extension postgis_sfcgal;create extension fuzzystrmatch;create extension postgis_tiger_geocoder;setexclude_reserved_wordslevel;create extension postgis_topology;create extension address_standardizer;create extension address_standardizer_data_us;selectoid, proname, proargtypes, proisstrict from sys_proc where proname ilike%addgeometrycolumn%;## update sys_proc set proisstrict false where oid 上一条 sql 的 oidupdate sys_procsetproisstrictfalsewhere oid16705;1.2 完成医以上步骤后执行测试./pgsql2shp-f/home/gpadmin/kes/v9/Server/test2.shp-usystem-p54321testselect * from test.sde.dltb21.3 打开ArcMap软件建库1.4 在ArcMap软件启动Kingbase地理信息数据库不可省略2、kdts配置迁移任务本次实验源库使用Oracle 11gKDTS的SHELL版本为例来完成迁移任务。编辑applicatiom.yml文件将ActiveOracle编辑conf/kdts-oracle.yml文件编写源库并编辑要迁移的表point、line、polygontsources: - dbType: oracle dbVersion: 11g url: jdbc:oracle:thin:ip:port/dbName driver-class-name: oracle.jdbc.oracleDriver username: SDE password: password schemas: SDE talbe-includes: POINT,LINE,POLYGONT温馨提示Oracle需要用SDE用户否则权限不足。编辑目标库信息target: dbType: KINGBASE dbVersion: V9 url: jdbc:kingbase8://ip:port/dbName driver-class-name: com.kingbase8.Driver username: SDE password: password schemas: SDE编辑数据类型映射文件将Oracle的numeric38,0类型映射为Kingbase的int类型。编辑conf/mapping_rule/data_type/oracle_to_kingbase.json 文件增加以下内容{sourceType:{name:NUMBER,precisionMin:0,precisionMax:38,scaleMin:0,scaleMax:0},targetType:{name:int}}3、执行迁移任务./bin/startup.sh4、迁移后注册数据这两个平台的数据迁移后需要注册才能正常使用。4.1 迁移后将…/SDE/AcrpyRegisterScript/目录下acrpyRegisterWithGeodatabase.py文件拷贝到ArcGIS所在的机器上放到如”c:/python27/ArcGIS10.0” 目录下4.2 查看ArcMap 的 kingbase 数据库连接信息并拷贝。4.3 编辑 acrpyRegisterWithGeodatabase.py 文件将上一步复制的内容粘贴到以下位置保存文件。4.4 执行 acrpyRegisterWithGeodatabase.py 脚本将表注册到 ArcGIS 地理信息库4.5 执行完成后使用 ArcMap 软件进行验证能否正常显示图层信息。二、注意事项1、BS版源端数据库类型为 MySQL5.1 版本时数据库版本选择 5.5KingbaseES 数据库采用 Unix Domain Socket 方式进行连接时必须确保数据库服务与迁移工具程序在同一台Linux 服务器上2、SHELL版2.1 迁移顺序由于对象之间存在依赖关系可按“1、序列2、表结构、表数据、主键约束、索引、唯一性约束3、外键约束4、检查约束、视图、函数、存储过程、包5、同义词6、触发器7、注释”这样的顺序进行迁移。2.2 大表拆分 迁移工具按表中的数据行数和大对象大小对表进行了排序并对达到拆分阈值的大表进行了拆分拆分操作仅读取表数据记录标识不影响数据然后按分块并行读取这些操作依赖于数据库统计信息并需要对拆分操作进行授权如果条件允许可在迁移前对源数据库做数据统计分析和拆分授权。该机制仅针对 Oracle 和达梦数据库其它数据库需手动拆分。对表的排序和拆分不影响迁移的结果只影响效率。2.3 并行计算#SQL ServerSQL Server2016或更高版本支持设置 Max Degree of Parallellism最大并行度配置可使用如下命令来查 看exec sp_configure;温馨提示: 建议该参数的值设置为0由数据库自动管理或一个大于0的值由数据库专家给定。#DM8可开启并行查询来提高查询效率详见数据库的 PARALLEL_POLICY、PARALLEL_THRD_NUM 、MAX_PARALLEL_DEGREE 等配置参数。 保证数据库的 DBMS_STATS.GATHER_SCHEMA_STATS 可用若报错” 错误的包或类名或当前环境不支持[DBMS_STATS]”说明该包未启用。可以通过达梦管理工具--工具包--SYSTEM PACKAGE--右键--点击启用开启服务。2.4 集群异步模式 目标库为集群模式时可将主从库的同步模式调整为异步在主库数据迁移完成后等待从库追平后再恢复为同步模式。2.5 大对急数据(LOB,Large Object) 如果要迁移的表中有大对象数据字段BLOB、BFILE、CLOB、NCLOB 等时应先评估大对象数据的大小如果单行数据的大小达到 100M 以上为了避免内存溢出 (Out Of Memory) 导致迁移失败应控制 Java 虚拟机内存的合理使用条件允许可增大内存详见bin/startup.sh 和 startup.bat 中 JAVA_OPT 里的“-Xms 和-Xms”参数项控制大对象表的读/写并发度确保读入内存的大对象数据在合理的范围相关的参数有conf/kdts-xxx.yml# 源数据库含大对象数据表的游标读取记录数同上只是此参数针对有大对象字段的表table-with-large-object-fetch-size:5# 源数据库含大大对象数据表的游标读取记录数同上只是此参数针对大对象字段长度超过 1G 的表table-with-big-large-object-fetch-size:5# 大表拆分阈值行数当表的行数超过此值时将对表进行拆分每块的记录数为此值和表总记录数除以“拆分最大块数”中的最大值 large-table-split-threshold-rows:5000000# 大表拆分阈值大小单位为 M当表的数据大小普通字段 大对象字段超过此值时将对表进行拆分large-table-split-threshold-size:5000# 大表拆分最大块数每张表的最大拆分块数应不超过总的读线程数large-table-split-max-chunk-num:5conf/kb-thread-config.xml!-- 大对象数据Clob 和 Blob写线程池 --poolnamewriteLargeObjectcorePoolSize5/corePoolSize!-- 可根据源库表中大对象数据来设置如果单条数据较大可适当降低线程数以避免 内存不足 --maxPoolSize5/maxPoolSize!-- 和 corePoolSize 一致 --keepAliveTime300/keepAliveTime!-- 保持不变 --workQueueSize5/workQueueSize!-- 和 maxPoolSize 一致 --/pool应满足(table-with-large-object-fetch-size large-table-split-max-chunk-num writeLargeObject.maxPoolSize writeLargeObject.workQueueSize)× 每行大数据大小 Java 虚拟机内存 ×0.92.6 网络抖动2.7 无日志表 无日志表不记录日志可大大提高数据写入的效率在需要时可设置以无日志表的方式进行迁移。# 连接字符串其中“ApplicationNamekingbase_transfer”指示数据库服务器使用无日志表url: jdbc:kingbase8://1.2.3.4:54321/test?ApplicationNamekingbase_transfer#V8R3 和 V9 使用# 是否使用无日志表unlogged-table:true# 是否将无日志表重改为有日志表relogged-table:true# 是否执行检查点issue-checkpoint:true2.8 国际化kdts-plus/bin/startup.sh删除行首的 # 可去掉注释JAVA_OPT${JAVA_OPT}-Duser.countryCN -Duser.languagezhkdts-plus/bin/startup.bat删除行首的 rem 可去掉注释remsetJAVA_OPT%JAVA_OPT% -Duser.countryCN -Duser.languagezh三、部署常见问题#加载数据库驱动失败– 错误特征 ERROR11028 ---[nio-8080-exec-3]com.kingbase.kdts.b.b:加载数据库驱动 ORACLE 11g oracle.jdbc.OracleDriver 失败 java.lang.reflect.InaccessibleObjectException: Unable tomakeprotected void java.net.URLClassLoader.addURL(java.net.URL)accessible: module java.base does not ” opens java.net” to unnamed module 6e0dec4a – 造成原因 从错误的提示可以分析是 java.base 包没有开放到任意模块下而模块又通过反射使用了一些包内的属性值这样的操作是不被允许的。这种情况一般在使用高于 Java8版本的 JDK 时会出现大多情况是 OpenJDK 出现原因是在 Java9及之后的版本对源码进行了模块化重构public 不再意味着完全开放而是使用了export的机制来更细粒度地控制可见性。 – 解决方案 添加 JVM 参数--add-opens java.base/java.netALL-UNNAMED
