Oracle 数据泵 impdp 到远程服务器

Posted

技术标签:

【中文标题】Oracle 数据泵 impdp 到远程服务器【英文标题】:Oracle data pump impdp to remote server 【发布时间】:2014-02-20 03:52:06 【问题描述】:

我们有一个转储文件,要导入到 Amazon rds 服务器。

这就是我所做的:

创建一个公共数据库链接并验证它是否有效:

create public database link rdsdblink
connect to dbuser identified by dbpsw
using '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST='xxx')(PORT=1521)))(CONNECT_DATA=(SID=dbsid)))';

SQL> select * from dual @ rdsdblink;

D
-
X

为转储文件创建一个目录:

CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS 'G:\DB';

导入转储文件:

impdp dbuser/dbpsw@rdsdblink tablespaces=EMP directory=DATA_PUMP_DIR dumpfile=EMP_dump.DMP logfile=EMP_dump.log network_link=rdsdblink

我还在 tnsnames.ora 文件中添加了 rdsdblink 连接字符串并重新启动了 oracle 服务(“立即关闭”,然后“启动”)。

出现以下错误:

连接到:Oracle 数据库 11g 版本 11.2.0.2.0 - 64 位生产 ORA-39001:参数值无效 ORA-39200:链接名称“rdsdblink”无效。 ORA-02019:找不到远程数据库的连接描述

我的本​​地 oracle 版本: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 生产

远程oracle版本: Oracle 数据库 11g 版本 11.2.0.2.0 - 64 位生产

【问题讨论】:

【参考方案1】:

您已连接到远程数据库(通过dbuser/dbpsw@rdsdblink),但您的数据库链接是在本地数据库中创建的。目前,您正尝试在远程 DB 上运行导入,同时还有一个指向远程 DB 的网络链接,并且该网络链接正在尝试使用该远程 DB 上不存在的 DB 链接。

tnsnames.ora 条目和 DB 链接是完全不同的东西。

您需要在本地正常连接 - 可能使用您用于创建数据库链接的任何凭据。然后network_link 参数将使您的本地数据库会话(由impdp 启动)作用于远程服务器;这样你的本地目录就可以使用了。

除了...它不是那样工作的。 network_link标识的远程数据库可以作为导入源,根本不需要转储文件;但它不能是从文件导入的目标。

来自impdpdocumentation:

NETWORK_LINK 参数通过数据库链接启动导入。 这意味着impdp客户端所连接的系统 联系引用的源数据库 source_database_link,从中检索数据,并将数据直接写入已连接实例上的数据库。没有转储 涉及的文件。

如果您真的想走这条路,我认为您需要一个从远程到本地的链接,并针对远程运行导入(就像您现在一样),但直接从您的架构中提取 - 不是从以前的出口。您仍然需要访问远程服务器上的 DIRECTORY 对象,因为日志等会写入那里,即使您没有复制转储文件。即使使用nologfile,我相信如果您不指定目录或没有权限,它也会出错。

article you linked to in your previous question 说了同样的话:

对于导入,NETWORK_LINK 参数还标识数据库 指向源服务器的链接。这里的区别是对象 直接从源导入到本地服务器,无需 被写入转储文件。虽然不需要一个 DUMPFILE 参数,仍然需要目录对象 与操作相关的日志。

【讨论】:

谢谢我真的是新手,所以如果我要对远程运行导入,我如何指向本地转储文件? @Cal - 你不能。该文件必须位于您连接到的数据库实例正在运行的服务器上。它必须在 rds 服务器上,我想这不是一个选项?否则,您必须将导出和导入作为一个步骤,没有中间转储文件,并且让数据库链接转到另一种方式可能会出现问题(假设您的侦听器没有暴露在 Internet 上)。 感谢您的帮助。我们会努力想办法做到这一点。 @Cal - 你见过this import guide吗?它在 RDS 中包含 impdp,但来自 EC - 您可以从数据库中执行相同操作,但前提是您可以访问它,这是不太可能的。如果您可以重做导出,则可以改用expimp,这将适用于您的场景。它也可能会给你一些其他的想法。

以上是关于Oracle 数据泵 impdp 到远程服务器的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE-数据泵

oracle导入:怎么将远程电脑上导出的dmp导入到本机oracle用户下

ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法

ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法

ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法

Oracle数据泵远程导入文件到本地数据库