AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[datapump](dba)

Martin Hope
Jason
Asked: 2021-03-06 09:00:45 +0800 CST

在 Oracle 数据泵期间导入时出现模棱两可的“无效操作”

  • 1

让我先总结一下这个问题,我会在总结之后给出我用来获得我所在位置的 SQL 的详细信息。

我正在从生产 AWS RDS Oracle 实例中导出架构,使用数据库链接将文件下载到我的本地开发数据库,​​然后在 Docker 容器中新安装的 Oracle 的空数据库上本地运行导入。导出和导入使用 Datapump。我收到一条非常模棱两可的错误消息“无效操作”,其中包含同样模棱两可的细节,建议我调用“DBMS_DATAPUMP.GET_STATUS”来“进一步描述错误”。当我这样做时,我得到完全相同的模棱两可的“无效操作”,并建议调用“GET_STATUS”来进一步描述错误。

我什至不知道从哪里开始诊断和解决这个问题。

这是我采取的详细步骤。我已将我们的模式名称替换为“MY_SCHEMA”以保护我们客户的身份......如果该文本中有任何不匹配,我向您保证它在我的控制台中是正确的,并且只是替换这个问题的错误。我使用 SQLDeveloper 来运行这些命令。

  1. 在运行 19g 的 AWS RDS Oracle 实例上
    DECLARE
    hdnl NUMBER;
    BEGIN
    hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT', job_mode => 'SCHEMA', job_name=>null, version=> '18.4.0.0.0');
    DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'my_schema.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file);
    DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'my_schema.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file);
    DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''MY_SCHEMA'')');
    DBMS_DATAPUMP.START_JOB(hdnl);
    END;
    /
  1. 从我的本地开发数据库 (18g) 连接到 AWS RDS 实例并下载 dmp 文件。是的,我在这里连接为架构所有者,而不是“主人”。这似乎可以下载文件并以“master”的身份连接,但在第一步中作为模式所有者转储不起作用;除非你能指导我如何做到这一点,如果这能解决我的问题。
    create database link to_rds connect to my_schema identified by password using '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=my_schema.aljfjske.us-west-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))';
    
    BEGIN
    DBMS_FILE_TRANSFER.GET_FILE(
    source_directory_object       => 'DATA_PUMP_DIR',
    source_file_name              => 'my_schema.dmp',
    source_database               => 'to_rds',
    destination_directory_object  => 'DATA_PUMP_DIR',
    destination_file_name         => 'my_schema.dmp'
    );
    END;
    /
  1. 在我的本地数据库(连接到名为“my_schema”的可插入数据库)上以“sys”身份登录时开始导入,角色为“sysdba”。
    DECLARE
    hdnl NUMBER;
    BEGIN
    hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name=>null);
    DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'my_schema.dmp', directory => 'DATA_PUMP_DIR');
    DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''MY_SCHEMA'')');
    DBMS_DATAPUMP.START_JOB(hdnl);
    end;
    /

我收到以下错误:

DECLARE
hdnl NUMBER;
BEGIN
hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name=>null);
DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'my_schema.dmp', directory => 'DATA_PUMP_DIR');
DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''MY_SCHEMA'')');
DBMS_DATAPUMP.START_JOB(hdnl);
end;
Error report -
ORA-39002: invalid operation
ORA-06512: at "SYS.DBMS_DATAPUMP", line 7297
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79
ORA-06512: at "SYS.DBMS_DATAPUMP", line 4932
ORA-06512: at "SYS.DBMS_DATAPUMP", line 7291
ORA-06512: at line 7
39002. 00000 -  "invalid operation"
*Cause:    The current API cannot be executed because of inconsistencies
           between the API and the current definition of the job.
           Subsequent messages supplied by DBMS_DATAPUMP.GET_STATUS
           will further describe the error.
*Action:   Modify the API call to be consistent with the current job or
           redefine the job in a manner that will support the specified API.

我已经花了 6 个小时以上的时间来阅读 Oracle 文档、指南、尝试东西、将更多信息打印到控制台,但什么也没有。我得到完全相同的错误消息,没有更多信息。转储文件在系统上,我很确定它被正确读取,因为我可以调用utl_file.fgetattr得到它的大小。我也尝试过使用不同的用户进行导出和导入。没有什么。我在这里完全处于黑暗之中。甚至有关尝试诊断此问题的建议也将不胜感激。这是 Oracle Database 18g Express Edition 的全新安装,使用 Oracle 的 Docker 容器文件在他们的 GitHub 帐户上(这很漂亮,顺便说一句)。RDS 上的生产系统已经运行了好几年,这些年来我已经导出了数十次 Datapump,并成功地将其导入到我在 Fedora Linux 上的本地 11g Express Edition 安装中。(自从生产数据库最近从 12g 升级到 19g 后,这不再有效。这让我开始了这条完整的道路。)

oracle datapump
  • 1 个回答
  • 964 Views
Martin Hope
user2847643
Asked: 2019-09-06 00:44:46 +0800 CST

使用带有 `flashback_time=systimestamp` 的 expdp 时出错

  • 0

Windows 2012 标准版上的 Oracle 11.2.0.1.0:

expdp '/ as sysdba' full=y directory=exp dumpfile=... logfile=... flashback_time=systimestamp

失败:

ORA-39001: invalid argument value
ORA-39150: bad flashback time
ORA-01841: (full) year must be between -4713 and +9999, and not be 0 
ORA-01877: string is too long for internal buffer

替换AFAIK 是一种向后兼容的方式来表示相同的确切内容也会失败并出现相同的错误flashback_time=systimestamp。consistent=y完全删除这些选项,无需其他更改,使其工作。

不过,除了 RMAN 之外,我还想进行一致的备份,是的,我确实已经配置并工作了。网上有各种建议的解决方法。例如使用to_timestamp但它们似乎都没有工作。

我的问题是:

  1. 这是一个已知的错误?
  2. 是否有任何设置可能导致这种行为,如系统语言环境?
  3. 我正在使用这个脚本的一个稍微修改过的版本,我发誓就在昨天它工作得很好。我不记得改变任何东西,今天它不起作用。有任何想法吗?
  4. 有可靠的解决方法吗?我正在考虑使用flashback_scn,但这需要事先单独查询。

编辑:

加倍强调这里的怪异之处。每天:

  • 00:00-11:59 - 错误如上
  • 12:00-23:59 - 一切正常

我昨天晚上反复运行脚本flashback_time=systimestamp- 没有错误。今天早上 7:45 再次从同一个脚本中得到错误,没有修改。

oracle datapump
  • 2 个回答
  • 3742 Views
Martin Hope
KimCM
Asked: 2019-06-27 01:25:14 +0800 CST

Windows 上的 Oracle Database 19.3:如何从 Windows 中的 UNC 路径进行 impdp 或 expdp?

  • 3

在 oracle 数据库版本 18.3 中,可以使用 unc 路径作为 Windows 中的目录,并使用 impdp 从该目录中抽取数据库泵。

例子:

C:\>sqlplus system/passwd@exampledb
C:\>create directory DUMPS as '\\storage\dir';
C:\>exit
C:\>impdp system/passwd@exampledb directory=DUMPS dumpfile=example.dmp logfile=example-imp.log
... just works as expected

对于 oracle 数据库 19.3 版,相同的 impdp 指令产生以下输出:

c:\>impdp system/passwd@exampledb directory=DUMPS dumpfile=example.dmp logfile=example-imp.log

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
ORA-39001: invalid argument value
ORA-39000: bad dump file specification
ORA-39155: error expanding dump file name "\\storage\dir\example.dmp"
ORA-48128: opening of a symbolic link is disallowed

我在 18.3 和 19.3 的示例中使用相同的帐户运行 oracle 数据库服务。因此,我认为网络或凭据问题不能解释我的观察。

这是 Oracle 数据库版本 18.3 和 19.3 之间的更改行为吗?我是否错过了发行说明中对这种更改行为的描述?或者我是否缺少 19.3 中引入的用于在目录中使用 UNC 共享的设置?还是我做错了什么?

我尝试将共享用作驱动器号,如下所示:

C:\>net use p: \\storage\dir /persistent:yes /user:myuser 
dir p:
... list of files // network access works well 

C:\>sqlplus system/passwd@exampledb  
create directory DUMPS as 'P:\'; 
exit
C:\>impdp system/passwd@exampledb directory=DUMPS dumpfile=example.dmp logfile=example-imp.log 

... ORA-39002: invalid operation 
ORA-39070: Unable to open the log file. 
ORA-29283: invalid file operation 

现在 impdp 抱怨日志文件。不使用 impdp logfile= 参数也会出现问题。

oracle datapump
  • 3 个回答
  • 5566 Views
Martin Hope
Ananth N
Asked: 2019-04-19 11:55:39 +0800 CST

Oracle Data Pump 导入表,部分列不可选

  • 0

使用数据泵将表导入 Oracle 12g。某些列虽然如 describe 所示出现在表中,但无法选择,但它们显示在 select *.

不能单独选择它们或仅对这些列应用 where 子句。

oracle datapump
  • 1 个回答
  • 146 Views
Martin Hope
john true
Asked: 2018-05-01 02:59:19 +0800 CST

导入后 Oracle 数据库大小减小

  • 1

我的数据库大小为 1TB,其完整导出大小为 300GB。

将数据库导入新环境后,数据库大小减少到 700GB。这可能是什么原因?

oracle datapump
  • 3 个回答
  • 1153 Views
Martin Hope
Bibhuti Bhusan Padhi
Asked: 2017-05-24 03:28:41 +0800 CST

从转储文件加载外部表

  • 2

我使用EXPDP进程创建了一个转储文件。

我正在尝试使用上述转储文件创建一个外部表。

我正在使用以下语句创建外部表:

CREATE TABLE HR.DATA_LOAD
(
"EMP_NO" NUMBER(10,0) NOT NULL ENABLE, 
    "EMP_NAME" VARCHAR2(20 BYTE), 
    "DEPT_ID" NUMBER(10,0), 
    "DEPT_NM" VARCHAR2(20 BYTE), 
    "DOJ" VARCHAR2(20 BYTE), 
    "LOCATION" VARCHAR2(20 BYTE), 
    "PHN_NUM" NUMBER(20,0), 
    "EMAIL" VARCHAR2(20 BYTE), 
    "COL1" VARCHAR2(20 BYTE), 
    "COL2" VARCHAR2(20 BYTE)
)
ORGANIZATIONAL EXTERNAL
(
  TYPE ORACLE_DATAPUMP
  DEFAULT DIRECTORY DATA_PUMP_DIR
  LOCATION ('exp_dumpfile.dmp')
);

执行上述语句后,表已创建,但是当我发出SELECT语句查看数据时,出现以下错误:

ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-39324: cannot load data from Data Pump dump file 

我是在做错什么,还是可以使用 Datapump 方法生成的转储文件来创建外部表?

oracle datapump
  • 1 个回答
  • 1208 Views
Martin Hope
user447607
Asked: 2016-08-23 12:58:57 +0800 CST

该包裹是否丢失,如果丢失,我该如何解决?

  • 0

我正在关注给定的链接。 https://oracle-base.com/articles/10g/oracle-data-pump-10g

我是甲骨文新手。Oracle 12c 是目标版本。我有一个在 docker 镜像中运行的开发数据库,​​我以sys用户身份登录以确保我可以看到所有内容。我正在使用 DataGrip 作为客户端。我正在寻找这个DBMS_DATAPUMP包,但我没有在 GUI 中看到它,我也试过了SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','package') order by OBJECT_NAME;,但我仍然没有看到它。如果没有安装,从哪里下载?我相信我已经知道如何安装它了。

我们的目标如下。我们想尝试在 CI 中创建一个每周或每月更新一次的主模式,然后我们想复制该模式作为集成测试的起点。现在,我们正在经历一个痛苦而漫长的基于飞行路线的迁移过程。

oracle datapump
  • 1 个回答
  • 1008 Views
Martin Hope
Ahmad Abuhasna
Asked: 2015-02-11 07:10:15 +0800 CST

是否可以删除一些没有数据的 shema 而另一个有数据

  • 0

我有oracle 11G R2 under RHEL6.3 测试是数据库的名称,数据库包含12个自定义模式,sch1,sch2,...,sch12。是否可以使用datapump包含所有模式的方法创建数据库备份,除了前三个之外没有数据,需要数据。

oracle datapump
  • 1 个回答
  • 42 Views
Martin Hope
pandoh
Asked: 2015-01-10 07:14:14 +0800 CST

当目标表有附加列时使用 Oracle Datapump

  • 0

表 1 有 5 列。表 2 具有相同的 5 列,另外还有一个不可为空的列。我想使用 datapump 将表 1 中的数据复制到表 2。在 Sql Server 中,我可以使用 bcp 并指定要在导出时使用的查询,其中我可以从表中“选择 *,'新数据'” 1. 这具有在我导入时将字符串“新数据”放入表 2 中的新列的效果。

我将如何使用 Oracle 的 Datapump 完成此任务?根据我的阅读,我只能指定一个 WHERE 子句,这意味着我不能将“新数据”添加到我的新列中。

到目前为止,我想出的唯一想法是禁用表 2 中新列的非空约束,从表 1 中对数据进行数据泵送,然后更新所有行以将“新数据”添加到新列中。这是我唯一的选择吗?

oracle datapump
  • 1 个回答
  • 4498 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve