我正在尝试编写一个过程(在包内),该过程调用DBMS_DATAPUMP
将现有模式复制到不同的模式中。该代码在从匿名块执行时有效,但从过程中我收到以下错误。
[Error] Execution (1: 1): ORA-31626: job does not exist
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79
ORA-06512: at "SYS.DBMS_DATAPUMP", line 1137
ORA-06512: at "SYS.DBMS_DATAPUMP", line 5285
ORA-06512: at "UTILITY.MANAGE_SCHEMA", line 71
ORA-06512: at line 1
Run Code Online (Sandbox Code Playgroud)
此错误是从DBMS_DATAPUMP.OPEN
调用中生成的。由于它在匿名块中工作,我假设这实际上是一个权限问题(即需要通过角色授予的一个或多个权限)。但是,我找不到有关使用数据泵所需的权限的任何文档。
这个问题归结为:需要明确授予用户/模式哪些权限才能使该模式中的包能够调用DBMS_DATAPUMP
?
包的主人既有IMP_FULL_DATABASE
和EXP_FULL_DATABASE
角色,以及该DBA
角色。
程序代码如下。
PROCEDURE copy_schema (p_source_schema VARCHAR2,
p_target_schema VARCHAR2,
p_asynchronous BOOLEAN := FALSE,
p_link_name VARCHAR2 := 'prddb') IS
dph NUMBER;
v_source_schema VARCHAR2 (30)
:= UPPER (DBMS_ASSERT.simple_sql_name (p_source_schema));
v_target_schema VARCHAR2 (30)
:= UPPER (DBMS_ASSERT.simple_sql_name …
Run Code Online (Sandbox Code Playgroud)