首页 > 解决方案 > 寻找 Oracle DBMS_WM.Export_Schemas 函数的工作示例

问题描述

我正在使用 Oracle 19.6,并且正在尝试使用 Workspace Manager 导出版本化数据。官方文档(https://docs.oracle.com/en/database/oracle/oracle-database/19/adwsm/DBMS_WM-reference.html#GUID-9485C70D-9CF9-4649-8785-06C7D6CF32D6)显示了一个示例,但是我无法让它工作。

使用“sys”用户,代码在“dbms_wm.export_schemas(job_name);”行返回“ORA-20283: invalid job_name parameter specified”

使用专用用户(文档说“使用 SYSDBA 权限时不应创建数据泵作业”)我收到另一个错误:

31626. 00000 -  "job does not exist"
*Cause:    An invalid reference to a job which is no longer executing,
           is not executing on the instance where the operation was
           attempted, or that does not have a valid Master Table.
           Refer to any following error messages for clarification.
*Action:   Start a new job, or attach to an existing job that has a
           valid Master Table.

困扰我的另一件事是示例代码不像常规数据泵作业那样调用“DBMS_DATAPUMP.START_JOB”。

SR 长期以来一直向 Oracle 支持开放,因此非常感谢任何帮助。

谢谢。

编辑:根据文档,可以使用数据泵和 FULL=Y 选项导出和导入版本化数据。这样做(并事先禁用所有 WMSYS 触发器)会返回大量 ORA-39111 和 ORA-31684,因为我没有将对象删除到目标数据库中,但奇怪的是,“SPATIAL_CSW_ADMIN_USR”用户不存在于转储中导致级联错误。

归根结底,导入“成功”并出现 5685 个错误,但当源数据库中存在 12 个时,ALL_WORKSPACES 表的内容仅显示默认条目(命名为 LIVE)。

标签: oracleplsqldatapump

解决方案


这是我使用 dbms_wm.export_schemas 成功导出版本控制表的步骤:

创建一个专用用户来运行导出:

create user sigea_exp identified by sigea_exp;
grant create session, create table, create procedure, exp_full_database, imp_full_database, DATAPUMP_EXP_FULL_DATABASE to sigea_exp;
GRANT UNLIMITED TABLESPACE TO sigea_exp;
grant read, write on directory EXPORT_AUTOMATIQUE to sigea_exp;
begin
    DBMS_WM.GRANTSYSTEMPRIV('ACCESS_ANY_WORKSPACE','sigea_exp', 'NO',TRUE);
end;

检查 WMSYS 模式是否不包含错误(连接为“sys”,以下语句没有返回行):

select * from ALL_OBJECTS where status = 'INVALID' and OWNER = 'WMSYS';

运行以下脚本,仔细选择 DIRECTORY 的名称(此处为“EXPORT_AUTOMATIQUE”):

DECLARE
  job_name varchar2(128) := 'EXPORT_EAU_2';
  dpj number ;
BEGIN
  dpj := dbms_datapump.open('EXPORT', 'SCHEMA', null, job_name, 'COMPATIBLE');
  dbms_datapump.add_file(dpj, 'eau_schema.dmp', 'EXPORT_AUTOMATIQUE');
  dbms_datapump.add_file(dpj, 'eau_schema.log', 'EXPORT_AUTOMATIQUE', filetype=>dbms_datapump.KU$_FILE_TYPE_LOG_FILE);
  dbms_wm.export_schemas(job_name, 'WMSYS_N', FALSE);
  DBMS_DATAPUMP.START_JOB(dpj);
END;
/

推荐阅读