Oracle数据泵impdp到远程服务器

时间:2014-01-28 17:27:10

标签: database oracle datapump impdp

我们有一个转储文件,我们要将其导入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服务(“shutdown immediate”,然后是“startup”)。

发生以下错误:

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

我的本​​地oracle版本: Oracle Database 11g快捷版11.2.0.2.0版 - 生产

远程oracle版本: Oracle Database 11g 11.2.0.2.0版 - 64位生产

1 个答案:

答案 0 :(得分:4)

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

tnsnames.ora条目和数据库链接完全不同。

您需要在本地正常连接 - 可能使用您用于创建数据库链接的凭据。然后,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参数,仍然需要一个目录对象   与操作相关的日志。