DM 在新建库第一次启动服务器时会自动创建除了 DMGEO、DBMS_JOB、DBMS_WORKLOAD_REPOSITORY 和 DBMS_SCHEDULER 之外的所有系统包。
1 概述
1.1 系统包创建、删除语句
DM 在新建库第一次启动服务器时会自动创建除了 DMGEO、DBMS_JOB、DBMS_WORKLOAD_REPOSITORY 和 DBMS_SCHEDULER 之外的所有系统包。
用户也可以通过调用系统过程来创建、删除指定系统包:
SP_CREATE_SYSTEM_PACKAGES(create_flag,pkgname)创建或删除指定的包;SP_CREATE_SYSTEM_PACKAGES(create_flag)一次性创建或删除除了 DMGEO、DBMS_JOB、DBMS_WORKLOAD_REPOSITORY 和 DBMS_SCHEDULER 之外的所有系统包。此外,还可以使用 SF_CHECK_SYSTEM_PACKAGES()来检测系统包启用状态。
DMGEO 包、DBMS_JOB 包、DBMS_WORKLOAD_REPOSITORY 包和 DBMS_SCHEDULER 包的创建方式比较特殊,请参考具体章节。没有特别说明的,创建和删除方式都请参考此处。
注意SP_CREATE_SYSTEM_PACKAGES(create_flag, pkgname)和SP_CREATE_SYSTEM_PACKAGES(create_flag)使用限制
1、不能在MPP全局模式下的存储过程中直接调用,在MPP LOCAL模式下可在存储过程中直接调用;
2、不能在存储过程中带参数进行动态调用1.1.1 创建指定的包
SP_CREATE_SYSTEM_PACKAGES 用来创建或删除指定的系统包,除了 DMGEO、DBMS_JOB、DBMS_WORKLOAD_REPOSITORY 和 DBMS_SCHEDULER 以外。
语法如下:
void SP_CREATE_SYSTEM_PACKAGES ( CREATE_FLAG int, PKGNAME varchar(128) )
参数详解
- CREATE_FLAG
为 1 时表示创建指定的系统包;为 0 表示删除这个系统包。
- PKGNAME
指定要创建的包名。除了 DMGEO、DBMS_JOB、DBMS_WORKLOAD_REPOSITORY 和 DBMS_SCHEDULER 以外的系统包。
返回值
无
举例说明
例 创建 DBMS_LOB 系统包。
SP_CREATE_SYSTEM_PACKAGES( 1, 'DBMS_LOB' );
1.1.2 创建所有系统包
SP_CREATE_SYSTEM_PACKAGES,用来创建或删除除了 DMGEO、DBMS_JOB、DBMS_WORKLOAD_REPOSITORY 和 DBMS_SCHEDULER 以外的所有系统包。若在创建过程中某个系统包由于特定原因未能创建成功,会跳过继续创建后续的系统包。
语法如下:
void SP_CREATE_SYSTEM_PACKAGES ( CREATE_FLAG int )
参数详解
- CREATE_FLAG
为 1 时表示创建除了 DMGEO、DBMS_JOB、DBMS_WORKLOAD_REPOSITORY 和 DBMS_SCHEDULER 以外的所有系统包;为 0 表示删除这些系统包。
返回值
无
举例说明
例 创建除了 DMGEO、DBMS_JOB、DBMS_WORKLOAD_REPOSITORY 和 DBMS_SCHEDULER 以外的所有系统包。
SP_CREATE_SYSTEM_PACKAGES (1);
1.1.3 检测系统包是否启用
- SF_CHECK_SYSTEM_PACKAGES
SF_CHECK_SYSTEM_PACKAGES 用来检测系统包的启用状态。是否启用系统包,由是否执行过 SP_CREATE_SYSTEM_PACKAGES(1);语句决定,执行过,表示已启用。
语法如下:
int SF_CHECK_SYSTEM_PACKAGES()
返回值
0:未启用;1:已启用
举例说明
获得系统包的启用状态。
SELECT SF_CHECK_SYSTEM_PACKAGES;
- SF_CHECK_SYSTEM_PACKAGE(<PACKAGE_NAME>)
SF_CHECK_SYSTEM_PACKAGE(<PACKAGE_NAME>)可用来检查某个特定的系统包是否启用。
语法如下:
int SF_CHECK_SYSTEM_PACKAGES( PACKAGE_NAME VARCHAR )
返回值
0:未启用;1:已启用
举例说明
例 获得系统包 DBMS_SCHEDULER 的启用状态。
SELECT SF_CHECK_SYSTEM_PACKAGE('DBMS_SCHEDULER');
1.1.4 包间依赖关系
部分系统包之间有依赖关系。被依赖包一旦被删除,依赖包就会失效。
针对以下存在依赖关系的系统包,当用户创建这些系统包时,系统会自动创建它们所依赖的包:
- DBMS_ALERT 依赖 DBMS_LOCK 和 DBMS_UTILITY
- DBMS_WORKLOAD_REPOSITORY 依赖 UTL_FILE
- DBMS_METADATA 依赖 DBMS_LOB 和 UTL_RAW
- DBMS_LOB 依赖 UTL_RAW
针对以下存在依赖关系的系统包,用户需要先手动创建它们所依赖的包,然后才能成功创建这些系统包:
- DBMS_PIPE 依赖 DBMS_XMLGEN
- DBMS_XMLGEN 依赖 DBMS_LOB
- DBMS_SPACE 依赖 DBMS_PAGE
- DBMS_PAGE 依赖 DBMS_BINARY
- UTL_I18N 依赖 UTL_RAW
- DBMS_AQ 依赖 DBMS_AQADM 和 DBMS_RANDOM