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
标识的远程数据库可以作为导入源,根本不需要转储文件;但它不能是从文件导入的目标。
来自impdp
documentation:
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 - 您可以从数据库中执行相同操作,但前提是您可以访问它,这是不太可能的。如果您可以重做导出,则可以改用exp
和imp
,这将适用于您的场景。它也可能会给你一些其他的想法。以上是关于Oracle 数据泵 impdp 到远程服务器的主要内容,如果未能解决你的问题,请参考以下文章
oracle导入:怎么将远程电脑上导出的dmp导入到本机oracle用户下
ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法
ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法