Oracle 数据泵impdp 到远程服务器

Cal*_*Cal 6 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
Run Code Online (Sandbox Code Playgroud)

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

CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS 'G:\DB';
Run Code Online (Sandbox Code Playgroud)

导入转储文件:

impdp dbuser/dbpsw@rdsdblink tablespaces=EMP directory=DATA_PUMP_DIR dumpfile=EMP_dump.DMP logfile=EMP_dump.log network_link=rdsdblink
Run Code Online (Sandbox Code Playgroud)

我还将 rdsdblink 连接字符串添加到 tnsnames.ora 文件并重新启动了 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

Ale*_*ole 5

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

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

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

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

impdp文档中:

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

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

您在上一个问题中链接到的文章了同样的事情:

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