我们有一个转储文件,我们要将其导入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位生产
答案 0 :(得分:4)
您已连接到远程数据库(通过dbuser/dbpsw@rdsdblink
),但您的数据库链接是在本地数据库中创建的。当您尝试在远程数据库上运行导入时,网络链接也指向远程数据库,并且该网络链接正在尝试使用该远程数据库上不存在的数据库链接。
tnsnames.ora
条目和数据库链接完全不同。
您需要在本地正常连接 - 可能使用您用于创建数据库链接的凭据。然后,network_link
参数将使您的本地数据库会话(由impdp
启动)对远程服务器起作用;所以你可以使用你的本地目录。
除了......它不能那样工作。 network_link
标识的远程数据库可以用作导入源,根本没有转储文件;但它不能成为从文件导入的目标。
NETWORK_LINK
参数通过数据库链接启动导入。 这意味着impdp
客户端所连接的系统 联系由...引用的源数据库source_database_link
,从中检索数据,并将数据直接写入连接实例上的数据库。没有转储 涉及的文件。
如果你真的想沿着这条路走下去,我想你需要一个从远程到本地的链接,并且需要对远程运行导入(就像你现在一样),而是直接从你的模式中拉出 - 而不是从以前的出口。您仍然需要访问远程服务器上的DIRECTORY
对象,因为即使您没有复制转储文件,也会在那里写入日志等。即使使用nologfile
,我相信如果您没有指定目录或者没有权限,它也会出错。
article you linked to in your previous question说了同样的话:
对于导入,
NETWORK_LINK
参数也标识数据库 指向源服务器的链接。这里的区别是对象 直接从源导入到本地服务器而不用 被写入转储文件。虽然没有必要DUMPFILE
参数,仍然需要一个目录对象 与操作相关的日志。