Database Oracle数据泵impdp到远程服务器

Database Oracle数据泵impdp到远程服务器,database,oracle,datapump,impdp,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&

我们有一个转储文件要导入到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
导入转储文件:

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
我还将rdsdblink连接字符串添加到tnsnames.ora文件中,并重新启动了oracle服务(“立即关闭”,然后是“启动”)

发生以下错误:

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

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

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

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

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

您需要在本地正常连接—可能使用创建DB链接时使用的凭据。然后,
network\u link
参数将使由
impdp
启动的本地数据库会话对远程服务器起作用;因此可以使用您的本地目录

除了。。。它不是那样工作的。由
网络链接标识的远程数据库
可以用作导入源,而无需转储文件;但它不能是从文件导入的目标

从:

网络链接
参数通过数据库链接启动导入。 这意味着
impdp
客户端所连接的系统 联系由引用的源数据库
source\u database\u link
,从中检索数据,并将数据直接写入连接实例上的数据库。没有垃圾场 涉及的文件

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

他说了同样的话:

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


谢谢你,我对这个很陌生,所以如果我要对远程运行导入,如何指向本地转储文件?@Cal-你不能。该文件必须位于您连接的DB实例正在运行的服务器上。它必须在rds服务器上,我想这不是一个选项?否则,您必须一步导出和导入,而不需要中间转储文件,如果您的侦听器未暴露在Internet上,则获取DB链接可能会有问题。谢谢您的帮助。我们会想办法的。@Cal-你看到了吗?它包括一个
impdp
到RDS中,但来自EC-您可以从数据库中执行相同的操作,但前提是您能够访问它,这是不可能的。如果可以重做导出,则可以使用
exp
imp
来代替,这在您的场景中是可行的。它可能会给你一些其他的想法。