一、问题现象
数据库从 21 年二季度版本升级至 25 年四季度版本后,执行以下操作:
重建系统包:
sql
SP_CREATE_SYSTEM_PACKAGES(0); -- 删除系统包
SP_CREATE_SYSTEM_PACKAGES(1); -- 创建系统包
将 GEO 空间包文件放入bin路径后,初始化空间包:
sql
SP_INIT_GEO_SYS(1);
SP_INIT_GEO2_SYS(1);
报错信息:
plaintext
警告:创建的对象带有编译错误
[-2106]:第1358 行附近出现错误:无效的表或视图名[VSYSGRANTS]
[-3328]:包/对象[DMGEO]主体解析出错
说明:该创建空间包方式仅适用于无空间数据情况下,有空间数据情况下使用如下命令重建空间包:
SP_INIT_GEO_SYS(2);
SP_INIT_GEO2_SYS(2);
避免因关闭空间包时将含有空间字段的表删除,导致数据丢失。
二、问题原因
核心原因:跨大版本升级后,执行 SP_CREATE_SYSTEM_PACKAGES(1) 重建系统包时,部分依赖的系统视图(V 视图)未被完整创建。
空间包(DMGEO)在创建时,需要访问 VSYSGRANTS 等系统视图。因该视图缺失,导致包编译失败。
根本机制:SP_CREATE_SYSTEM_PACKAGES 主要负责创建系统包,不负责创建 SVI 系统视图。VSYSGRANTS 属于 SVI(安全视图接口)系列的 V 视图。
三、处理方案(手动创建缺失的系统视图)
执行顺序:
以 SYSDBA 或 DBA 权限用户登录。
手动创建所有 SVI 系统视图(含 VSYSGRANTS):
sql
SP_INIT_SVI_SYS(1);
参数 1 表示创建。
重新初始化空间包:
sql
SP_INIT_GEO_SYS(1);
SP_INIT_GEO2_SYS(1);
执行完成后,无报错即表示空间包创建成功。
四、补充说明
为什么升级后会出现此问题?
21 年二季度与 25 年四季度版本差异大,系统字典结构、SVI 视图机制发生变更。直接 SP_CREATE_SYSTEM_PACKAGES 无法自动适配并重建所有依赖视图。
SP_INIT_SVI_SYS 作用:
专门用于手动创建 / 重建 SVI 系列 V 视图(如 VSYSOBJECTS、VSYSGRANTS),是解决跨版本升级后 V 视图缺失的标准方案。
空间包前置条件:
确保 bin 目录已正确放入对应版本的 spatial 空间库文件(如 libgeos_c.so/geos_c.dll),并重启过数据库服务。
文章
阅读量
获赞
