OceanBase 系统包是基于 PL 编写的一套扩展功能,以供用于进行数据的管理和 SQL 功能的扩展。在默认情况下,安装 OceanBase 数据库企业版会自动安装系统包。如果在调用系统包时报对象不存在的错误,需要检查当前 OceanBase 数据库版本是否有该系统包。本文讲述手动安装、升级系统包的过程。
适用版本
OceanBase 数据库 V4.0 之前的所有版本。
查看已安装的系统包
SYS 租户相关视图:
__all_virtual_package__all_virtual_routine
Oracle 租户相关视图:
DBA_SOURCE:存储对象的文本源DBA_OBJECTS:所有数据库对象DBA_PROCEDURES:函数和存储过程
系统包安装和升级
从对应的 OceanBase 数据库安装文件(RPM 包)里把
admin目录下的系统包复制到当前 OBServer 的/home/admin/oceanbase/admin目录中。在 SYS 租户中查看
__all_virtual_package中是否有__DBMS_UPGRADE系统包升级程序。若无,则按照下面的步骤创建系统包升级程序。
打开升级模式。
alter system set enable_upgrade_mode =true;设置 SYS 租户使用 Oracle 兼容语法,以便可以执行 CREATE PACKAGE 的操作。
set ob_compatibility_mode='oracle';创建
__DBMS_UPGRADE系统包升级程序。DELIMITER / CREATE OR REPLACE PACKAGE "__DBMS_UPGRADE" IS PROCEDURE UPGRADE(package_name VARCHAR2); PROCEDURE UPGRADE_ALL; END; / CREATE OR REPLACE PACKAGE BODY "__DBMS_UPGRADE" IS PROCEDURE UPGRADE(package_name VARCHAR2); PRAGMA INTERFACE(c, UPGRADE_SINGLE); PROCEDURE UPGRADE_ALL; PRAGMA INTERFACE(c, UPGRADE_ALL); END; /
执行升级程序。
通过 OBClient 客户端使用
root@sys直连 OBServer(不能通过 OBProxy 连接,否则可能会报语法错误)。调用
__DBMS_UPGRADE执行安装、升级。CALL "__DBMS_UPGRADE".UPGRADE_ALL(); # 安装升级所有在 admin 目录下的包或者
CALL "__DBMS_UPGRADE".UPGRADE('DBMS_STATS'); # 安装指定的包:DBMS_STATS设置 SYS 租户使用 MySQL 兼容语法,并关闭升级模式。
set ob_compatibility_mode='mysql'; alter system set enable_upgrade_mode = false;