oracle - 寻找 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)。
解决方案
这是我使用 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;
/
推荐阅读
- python - 如何使用 pyqt5 从 __init__() 函数外部更新字段
- javascript - 在悬停时为多行和多列中的元素显示表格
- tensorflow - as_list() 未在 y_t_rank = len(y_t.shape.as_list()) 上的未知 TensorShape 上定义,并且与指标相关
- angular - 无法在递归角度表单上使用 ngIf 找到带有路径的控件
- javascript - 我在哪里可以找到 Tailwind 组件中的 JS 代码?
- count - 使用 SAS 计算在给定日期之前需要随访的受试者数量
- sqlalchemy - 将 SQLAlchemy ORM 对象与磁盘上的外部文件同步
- python - 所有请求中的 Python Tornado max_buffer_size
- php - 编辑个人资料不起作用:/ laravel 7
- r - 将 ID 标签随机分配给 R 中的不同部分