Oracle通过数据泵网络导入另一个数据库,不生成DMP文件

2014-11-24 17:13:33 · 作者: · 浏览: 2

impdp system/system@ORCLB network_link=db_a_user1 logfile=impdp_db_a_user1.log DIRECTORY=TEMP_A_USER1 parallel=8;


执行出错,错误信息如下:


LRM-00104: '32;' 不是 'parallel' 的合法整数


经过查看资料,说是parallel不能放在语法的最后面,于是调整后脚本如下:


impdp system/system@ORCLB network_link=db_a_user1 logfile=impdp_db_a_user1.log parallel=8 DIRECTORY=TEMP_A_USER1;



再次执行,依然出错,错误信息如下:



经查阅资料,发现必须创建public dblink才可以,先删除掉原有的dblink再重新创建,错误解决。


原来dblink脚本:


CREATEDATABASELINKdb_a_user1


CONNECTTOUSER1IDENTIFIEDBYUSER1


USING


'(DESCRIPTION =


(ADDRESS_LIST =


(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))


)


(CONNECT_DATA =


(SERVER = DEDICATED)


(SERVICE_NAME = ORCL)


)


)';



调整后脚本:


CREATEPUBLICDATABASELINKdb_a_user1


CONNECTTOUSER1IDENTIFIEDBYUSER1


USING


'(DESCRIPTION =


(ADDRESS_LIST =


(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))


)


(CONNECT_DATA =


(SERVER = DEDICATED)


(SERVICE_NAME = ORCL)


)


)';



但出现了新的错误信息:



目录(directoryTEMP_A_USER1无效,查阅资料发现需要将把DIRECTORY= TEMP_A_USER1放在脚本前面,调整后脚本如下:


impdp system/system@ORCLB DIRECTORY=TEMP_A_USER1 parallel=8 network_link=db_a_user1 logfile=impdp_db_a_user1.log;



再次执行,出现另外一个错误,错误信息如下:



后经查看Dba_Directories发现TEMP_A_USER1创建问题,因服务器BAIX小机,可能是已有的TEMP_A_USER1对应的目录无操作权限,于是先删除掉TEMP_A_USER1,重新再system用户下创建TEMP_A_USER1,并授予UTL_FILE执行权限。


CREATEDIRECTORYTEMP_A_USER1AS'/tmp';


GRANTREAD,WRITEONDIRECTORYTEMP_A_USER1TOsystem;


GRANTEXECUTEON SYS.UTL_FILE TOsystem;



再次执行脚本


impdp system/system@ORCLB DIRECTORY=TEMP_A_USER1 parallel=8 network_link=db_a_user1 logfile=impdp_db_a_user1.log;


没有出现错误,成功将数据从A服务器导入到B服务器的数据库中。


总结:从以上经历可以看出,成功地通过网络导入数据库(不生成DMP文件)需要注意以下内容:


1、 B服务器数据库创建到A服务器数据库的public db link


2、 system下创建Directory,并赋予其读写权限,同时赋予SYS.UTL_FILE的执行权限;


3、 执行脚本参数位置,DIRECTORY=TEMP_A_USER1必须放在前面,parallel=8不能放在最后,是不是Oracle bug没确定过。