6

我们有一个要导入到 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 - Production

远程 oracle 版本:Oracle Database 11g Release 11.2.0.2.0 - 64bit Production

4

1 回答 1

4

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

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

您需要在本地正常连接 - 可能使用您用于创建数据库链接的任何凭据。然后,该network_link参数将使由 启动的本地数据库会话impdp对远程服务器起作用;因此可以使用您的本地目录。

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

impdp文档中:

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

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

您在上一个问题中链接到的文章也说了同样的话:

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

于 2014-01-28T17:46:06.813 回答