oracle gis 迁移最佳实践
KingbaseES已适配主流GIS平台(ArcGIS/GeoScene),目前支持将使用该平台的Oracle或PostgreSQL数据库迁移至KingbaseES数据库。
以下为将包含GIS数据的Oracle 11g数据库迁移至KingbaseES(Linux x86平台)的迁移步骤说明:
- 前置工作
- 迁移非GIS数据
- 迁移GIS数据
- 常见问题
备注
GIS数据的迁移依赖于非GIS数据,若在非GIS数据迁移完成之前迁移GIS数据,可能会引发未知报错。 GIS数据的迁移需保证源端数据库和目标端数据库都是开启且正常提供服务的,并且GIS平台上存在两个数据库的地理信息数据库。
前置工作
在进行包含GIS数据的数据库迁移前,需要先在目标数据库做一些前置操作,并确认数据库对GIS平台的适配度。
准备目标数据库
软件准备: kingbase-server-linux-x86_64.tar 和 postgis_libs.tar 包。
配置postgis插件和初始化数据库
- 配置postgis参数
## 解压缩数据库包
tar -xvf kingbase-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 -U system -D data;
vim kingbase.conf
## 启动数据库, 使用ksql工具连接到数据库中
./sys_ctl -D data start
./ksql -Usystem -p54321 test
创建前置对象
使用Ksql进入数据库后,需要创建GIS所需的前置对象,以确保包含GIS数据的对象迁移成功。
-- 创建操作用户
create user sde superuser;
alter user sde password '123456';
create user rds_superuser superuser ;
alter user rds_superuser password '123456';
-- 创建模式并修改其所有者
create schema sde;
alter schema sde owner to sde;
-- 创建数据库和插件
create database kingbase;
create extension postgis;
create extension postgis_raster;
create extension postgis_sfcgal;
create extension fuzzystrmatch;
create extension postgis_tiger_geocoder;
set exclude_reserved_words = 'level';
create extension postgis_topology;
create extension address_standardizer;
create extension address_standardizer_data_us;
-- 测试插件是否安装成功
select oid, proname, proargtypes, proisstrict from sys_proc where proname ilike '%addgeometrycolumn%';
## update sys_proc set proisstrict = false where oid = 上一条sql的oid
update sys_proc set proisstrict = false where oid = 16705;
仅源库为Oracle,且存在sde类型作为表类型时,需要创建公共函数append_srid:
-- 此函数功能是将sde数据中的srid拼接到wkb(blob)中,保障数据的完整性。
CREATE OR REPLACE FUNCTION append_srid(srid IN INTEGER,kwb IN blob) RETURN blob AS
re blob;
srid_ integer;
BEGIN
IF kwb IS NULL then
RETURN NULL;
END IF;
re := to_blob(UTL_RAW.cast_from_binary_integer(srid,utl_raw.little_endian));
dbms_lob.append(re,kwb);
RETURN re;
END;
执行测试
./pgsql2shp -f /home/gpadmin/kes/v9/Server/test2.shp -u system -p 54321 test "select * from test.sde.dltb2"
创建地理信息数据库
当前步骤旨在验证目标数据库对于GIS平台的适配度,并为GIS数据的迁移做一些前置准备。步骤如下:
- 打开 ArcMap 软件,新建数据库。
- ArcMap 软件中启动 Kingbase 地理信息数据库。(此步骤不可省略)
迁移非GIS数据
迁移非GIS数据需要使用kdts ,此处以KDTS SHELL访问方法举例:
配置源端数据库
- 进入kdts-plus目录,编辑 conf/application.yml 文件,将 active 值设置为 Oracle。
active: oracle
- 编辑 conf/datasource-oracle.yml 文件,修改源库信息,并指定要迁移的表(POINT、LINE、POLYGONT)。
sources:
- 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 用户进行迁移工作,以避免其他用户权限不足,读取 GIS 数据失败。
配置目标端数据库
- 编辑 conf/datasource-oracle.yml 文件,修改目标库信息。
target:
dbType: KINGBASE
dbVersion: V9
url: jdbc:kingbase8://ip:port/dbName
driver-class-name: com.kingbase8.Driver
username: SDE
password: password
schemas: SDE
备注
请使用 SDE 用户进行迁移工作,并且迁移至 SDE 模式下。(避免迁移至其他模式下注册数据信息失败)。
配置数据类型映射文件
- 将 Oracle 的 numeric(38, 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"
}
}
执行迁移任务
- 迁移配置完成后,执行以下命令,运行迁移任务。
./bin/startup.sh
迁移GIS数据
源数据库的非GIS数据迁移至目标数据库后,可以在ArcGIS / GeoScene 平台上进行GIS数据迁移。此步骤完成,后续应用才能正常使用。GIS数据迁移步骤如下:
- 迁移后,在形如 "result/2021-12-02_15_15_15/SDE/AcrpyRegisterScript/" 目录下的 acrpyRegisterWithGeodatabase.py 文件拷贝到 ArcGIS 所在的机器上,放到形如:"c:/python27/ArcGIS10.0" 目录下:
- 查看ArcMap的kingbase数据库连接信息,并拷贝。
- 编辑acrpyRegisterWithGeodatabase.py文件,将上一步复制的内容粘贴到以下位置,保存文件。
- 执行acrpyRegisterWithGeodatabase.py脚本,将源数据库的地理信息库中的数据迁移到目标数据库的ArcGIS地理信息库中。
- 执行完成后使用ArcMap软件进行验证,能否正常显示图层信息,正常显示说明GIS数据已经迁移成功(或对比GIS平台下,迁移的数据要素集在两个数据库下是否一致)。
备注
GIS平台平时运行就会在其日志里留下很多报错,这似乎是它试探所需对象在不在,然后决定下一步流程的方式,因此,在日志中看到 does not exists 的报错但目标端数据库的应用已经正常显示地理数据信息,请不要害怕。
常见问题
Q1: 执行acrpyRegisterWithGeodatabase.py脚本时报错"ERROR 001050"。
原因分析: acrpyRegisterWithGeodatabase.py脚本内容有误。
解决方案: 请检查是否已修改arcpy.env.workspace值,是否与ArcMap的kingbase库连接信息一致。
Q2: 执行acrpyRegisterWithGeodatabase.py脚本时报错"ERROR 001400"。
原因分析: 将GIS数据迁移到了kingbase的非sde模式下.
解决方案: 请将非GIS数据重新迁移至sde模式下,再进行GIS数据迁移。
Q3: 执行acrpyRegisterWithGeodatabase.py脚本时报错"ERROR 999999"。
原因分析及解决方案: 报错“999999”原因比较复杂,一般有以下原因:
- 该表未指定objectid为唯一键,可以手动修改表定义,指定objectid字段为主键或者唯一约束。
- 该表的objectid字段的数据类型非int类型。可以ksql手动修改该字段类型为int或者修改KDTS的数据类型映射文件,重新进行迁移。
- 如果是所有表均报以上错误,则可能是未启动地理信息数据库,可以通过ArcMap软件,在kingbase数据库连接上右键,点击启动地理信息数据库。
- 如果不是以上原因,可以通过ArcMap软件手动注册。
了解更多
关于中电科金仓
中电科金仓(北京)科技股份有限公司(以下简称“电科金仓”)成立于1999年,是成立最早的拥有自主知识产权的国产数据库企业,也是中国电子科技集团(CETC)成员企业。电科金仓以“提供卓越的数据库产品助力企业级应用高质量发展”为使命,致力于“成为世界卓越的数据库产品与服务提供商”。
金仓数据库管理系统KingbaseES(简称KES)是中电科金仓(北京)科技股份有限公司(简称电科金仓)研发的、具有自主知识产权的、获得自主原创资质认证的通用数据库产品。该产品面向全行业、全客户,覆盖从极简应用到核心关键应用的企业级大型通用数据库管理系统,适用于事务处理类应用、数据分析类应用、人工智能应用、时序数据采集检索应用等场景,可用作管理信息系统、业务及生产系统、决策支持系统、多维数据分析系统、全文本及图片检索系统、地理信息系统、传感器及日志等数据采集及分析系统等的承载数据库。
KES是打造融合了AI技术的新一代“融合数据库” 产品,实现全行业、全场景、各种主流品类数据库平替来完成数据库统型工作,大幅降低用户的采购、迁移、开发、运维的总成本。
电科金仓是国内成立最早(1999),是中国数据库学科、中国数据库产业的开创者,是中国数据库的国家队,也是信创工委会数据库工作组组长单位。公司有理论技术积累40年+,核心技术创新及产业化经验20年+,始终专注数据库产品领域,目前是业界唯一在数据库管理系统领域获得国家科技进步二等奖的数据库企业。
应用场景
- 交易型应用
高并发、大数据量、以联机事务处理为主的交易型应用,如金融行业的交付结算,能源、交通、运营商等行业CRM/计费,企业ERP,医疗行业HIS等核心到非核心的各类系统。
- 分析型应用
通过并行计算与列存等技术满足海量数据(PB级负载)的分析处理需求,如金融行业的风险控制与市场分析,电信行业的用户行为分析,政府与公共事业的决策支持系统,以及各类企业的用户画像与商业智能等。
- 混合负载应用
同时支撑高并发事务处理(OLTP)与实时分析(OLAP),打破数据孤岛,避免ETL延迟,实现“一份数据、两类负载”,如金融核心系统、能源计量平台、以及各类计费结算等系统。
- 时序类应用
专为高频时间序列数据优化,支持超大数据量毫秒级写入、高效压缩与时间窗口分析,适用于工业物联网、智能电网、智能制造等各行业设备监控、指标追踪、实时路况、路口流量监测、卡口数据等场景。
- AI应用场景
通过支持非结构化数据的向量化存储、实时更新与高效相似性检索,通过将已知的数据和知识与LLM语言技能相结合、混合检索与计算融合,广泛适配各类AI开发框架与生态协议,深度赋能模型训练与推理,简化AI应用构建。
产品体系架构
围绕KES为核心,不断融合能力、组件,衍生孵化出新的架构、产品、解决方案、平台工具。
技术架构
KES-AI时代的融合数据库架构。
- 多应用场景一体化处理
KES同时支持事务、分析、HTAP等应用场景,包括传统TP类应用、时序数据的存储和处理、AP类大数据分析应用以及AI应用,满足不同应用场景的性能要求。
- 多模数据一体化存储
KES同时支持对关系模型、文档模型、全文本、GIS数据、时序数据等的统一存储、混合访问、模型间转换,从而消除采用多个不同模型专用数据库时不可避免的跨库间数据集成。
- 多语法体系一体化兼容
KES采用插件式语法体系架构,内核基于SQL标准为底,灵活扩展多种语法结构,全面兼容Oracle、MySQL、SQL Server、PostgreSQL等在内的多种异构数据库的语法体系。该能力使得应用厂商无需大规模修改业务代码即可在金仓数据库上运行,极大提升了迁移工作的效率。同时降低了开发人员和DBA的学习门槛,无需从头适应新的数据库环境,便能快速上手进行开发与维护操作。
- 集中分布一体化架构
KES采用集中、分布式一体化的架构,集中式架构支撑RWC、RAC集群;分布式扩展架构基于集中式架构扩展,增加分片管理、分布式执行、分布式事务、全局事务一致性等模块,支撑TDC、Sharding、ADC分布式集群。提供一套系统,同时满足TP、AP、实时分析业务,实现降本增效,从而为客户提供不同级别的可用性、性能扩展、成本需求,确保业务连续,最大化投资价值。
- 开发运维一体化管理
提供金仓全栈产品的企业级统一管理平台,支持对金仓数据库在初始安装配置、应用开发、系统管理、监控及诊断的全生命周期管理,从而降低大规模应用开发及系统管理的难度与成本。实现管理工作“0”人工介入,对生产业务运行“0”影响,实现无感自治管理。