从 Oracle 到 KingbaseES:GIS 数据全流程迁移实操

# 从 Oracle 到 KingbaseES:GIS 数据全流程迁移实操


在信创战略深入推进的背景下,地理信息系统(GIS)的数据库国产化替代已成为自然资源、城市规划等领域的必答题。Oracle Spatial凭借成熟的空间数据管理能力被广泛采用,但其高昂的许可费用和封闭的生态体系,让越来越多的用户开始寻求替代方案。KingbaseES凭借对Oracle语法的深度兼容和KGIS空间引擎的完善能力,正成为GIS数据迁移的热门选择。本文以实际项目为例,复盘从Oracle Spatial到KingbaseES的全流程迁移实操经验。


## 迁移前的准备工作


在动手迁移之前,目标端的环境准备至关重要。GIS数据的迁移依赖于KGIS插件,需要在KingbaseES中完成一系列前置配置。


首先,解压数据库安装包后,需要将PostGIS相关的插件库拷贝到数据库目录中:


```bash

# 解压数据库包

tar -xvf kingbase-server-linux-x86_64.tar


# 拷贝PostGIS插件包

cp /home/kingbase/postgis_libs/* /home/kingbase/kingbase/lib/

cp /home/kingbase/postgis-3.1.2/bin/* /home/kingbase/kingbase/bin/

cp /home/kingbase/postgis-3.1.2/lib/* /home/kingbase/kingbase/lib/

cp /home/kingbase/postgis-3.1.2/share/extension/* /home/kingbase/kingbase/share/extension/

```


完成文件拷贝后,初始化数据库并创建GIS相关扩展:


```sql

-- 创建GIS操作用户和模式

create user sde superuser password 'your_password';

create schema sde authorization sde;

<"eav.a8k1.org.cn"><"efg.a8k1.org.cn"><"wwf.a8k1.org.cn">

-- 创建GIS扩展

create extension postgis;

create extension postgis_raster;

create extension postgis_sfcgal;

create extension fuzzystrmatch;

create extension postgis_tiger_geocoder;

create extension postgis_topology;


-- 验证插件安装

select oid, proname from sys_proc where proname like '%addgeometrycolumn%';

```


对于从Oracle迁移的场景,还需要创建一个关键的自定义函数,用于将SDE数据中的SRID拼接到WKB中,保障空间数据的完整性:


```sql

CREATE OR REPLACE FUNCTION append_srid(srid IN INTEGER, kwb IN blob) 

RETURN blob AS 

    re blob;

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;

```


## 两阶段迁移策略


GIS数据的迁移通常分为两步走:先迁移非GIS数据,再迁移GIS数据。这是因为GIS数据依赖于底层的空间表和元数据,若顺序颠倒可能引发未知错误。


### 第一阶段:非GIS数据迁移


对于数据量大、表结构复杂的场景,推荐使用金仓KDTS(KingbaseES Data Transfer Service)迁移工具。KDTS支持从Oracle到KingbaseES的结构迁移和全量数据迁移,实测在亿级地类图斑数据场景下,迁移效率较传统方法提升4到5倍。


配置KDTS迁移任务时,需要分别指定源库和目标库的连接信息:


```yaml

# 源端Oracle配置(conf/datasource-oracle.yml)

sources:

  - dbType: oracle

    dbVersion: 11g

    url: jdbc:oracle:thin:@oracle_ip:1521/orcl

    username: SDE

    password: password

    schemas: SDE

    table-includes: POINT,LINE,POLYGONT  # 先迁移非空间表

<"wfe.a8k1.org.cn"><"sad.a8k1.org.cn"><"wqa.a8k1.org.cn">

# 目标端KingbaseES配置

target:

  dbType: KINGBASE

  dbVersion: V9

  url: jdbc:kingbase8://kes_ip:54321/kingbase

  username: SDE

  password: password

  schemas: SDE

```


考虑到Oracle中大量使用NUMBER(38,0)作为整型字段,可以在数据类型映射文件中调整映射关系,避免迁移后字段类型过大影响性能:


```json

{

    "sourceType": {

        "name": "NUMBER",

        "precisionMin": 0,

        "precisionMax": 38,

        "scaleMin": 0,

        "scaleMax": 0

    },

    "targetType": {

        "name": "int"

    }

}

```


配置完成后,执行迁移脚本启动任务:


```bash

./bin/startup.sh

```


### 第二阶段:GIS数据迁移


非GIS数据迁移完成后,需要借助ArcGIS平台完成空间数据的迁移。这一阶段的核心是将Oracle Spatial中的地理数据库注册到KingbaseES中。


操作步骤如下:


1. **连接数据库**:在ArcMap或ArcCatalog中,分别建立与Oracle和KingbaseES的数据库连接。连接KingbaseES时,需要注意端口号若非默认5432,需在Instance中明确指定,例如`192.168.4.30,5444`。


2. **启动地理数据库**:在已连接的KingbaseES数据库上右键选择"启动地理数据库",这一步会在目标库中创建ArcGIS运行所需的系统表和元数据。


3. **拖拽迁移**:在SuperMap或ArcGIS工作空间中,直接选中需要迁移的数据集,拖拽到KingbaseES目标库中,弹出复制对话框后确认即可完成迁移。


4. **注册数据**:这是GIS数据迁移最关键的一步。迁移工具会自动生成注册脚本,位于迁移结果目录下,如`result/2021-12-02_15-15-15/SDE/AcrpyRegisterScript/acrpyRegisterWithGeodatabase.py`。将该脚本拷贝到ArcGIS所在机器,编辑其中的连接信息后执行:


```bash

python acrpyRegisterWithGeodatabase.py

```


执行完成后,空间数据才能被ArcGIS正常识别和调用。


## 迁移结果验证


数据迁移完成后,需要进行双重验证:


- **可视化校验**:在ArcMap或QGIS中打开迁移后的图层,查看空间位置、属性信息是否正确显示。

- **操作验证**:对迁移数据进行增、删、改、查操作,验证空间分析功能是否正常。

- **应用验证**:运行依赖GIS数据的业务系统,确保前端功能不受影响。


## 常见问题与处理


在实际迁移过程中,可能会遇到一些典型问题:


- **ERROR 001050**:注册脚本中`arcpy.env.workspace`值与实际数据库连接信息不一致,需检查并修正。

- **ERROR 001400**:将GIS数据迁移到了非sde模式下。解决方法是重新将数据迁移至sde模式,或修改模式归属。

- **ERROR 999999**:报错原因较复杂,常见情况包括表未指定Objectid为主键、Objectid字段非int类型、未启动地理信息数据库等,需逐一排查。


## 结语


从Oracle Spatial到KingbaseES的GIS数据迁移,并非简单的"导入导出",而是一个涉及环境准备、数据分层迁移、空间数据注册的系统工程。依托KingbaseES对Oracle语法的高兼容性和KDTS工具的高效迁移能力,配合ArcGIS/SuperMap等平台的支持,GIS数据国产化替代已经具备了成熟的技术路径。对于正在规划GIS数据库国产化改造的团队,建议遵循"先评估后行动、非GIS与GIS分层迁移、重视注册验证"的原则,让迁移过程更平稳、结果更可靠。


请使用浏览器的分享功能分享到微信等