我们有一个转储文件,想要导入到 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
我还将 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 版本 11.2.0.2.0 - 生产
远程预言机版本:
Oracle Database 11g 版本 11.2.0.2.0 - 64 位生产
您已连接到远程数据库(通过dbuser/dbpsw@rdsdblink
),但您的数据库链接是在本地数据库中创建的。目前,您正在尝试在远程数据库上运行导入,并且网络链接也到远程数据库,并且该网络链接正在尝试使用该远程数据库上不存在的数据库链接。
The tnsnames.ora
条目和数据库链接是完全不同的东西。
您需要在本地正常连接 - 可能使用您用于创建数据库链接的任何凭据。这network_link
然后参数将创建您的本地数据库会话,该会话由impdp
,针对远程服务器进行操作;这样就可以使用你的本地目录了。
但……它不是那样工作的。远程数据库由network_link
可以用作导入源,根本不需要转储文件;但它不能作为从文件导入的目标。
来自impdp文档 http://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_import.htm#SUTIL919:
The NETWORK_LINK
参数通过数据库链接启动导入。
这意味着该系统impdp
客户端已连接
联系所引用的源数据库source_database_link
,从中检索数据,并将数据直接写入连接实例上的数据库。没有转储
涉及的文件。
如果您真的想沿着这条路线走下去,我认为您需要一个从远程到本地的链接,并针对远程运行导入(就像您现在一样),但要直接从您的模式中提取 - 而不是从以前的模式中提取出口。您仍然需要访问DIRECTORY
远程服务器上的对象,因为日志等将写入那里,即使您没有复制转储文件。即使nologfile
我相信如果您不指定目录或没有权限,则会出错。
The 您在上一个问题中链接到的文章 http://www.oracle-base.com/articles/10g/oracle-data-pump-10g.php#NetworkExportsImports说了同样的话:
对于进口来说,NETWORK_LINK
参数还标识数据库
指向源服务器的链接。这里的区别在于对象
直接从源导入到本地服务器,无需
被写入转储文件。虽然没有必要DUMPFILE
参数,仍然需要一个目录对象
与操作相关的日志。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)