expdp network_link参数

今天遇到一个这样的问题,问题描述大概如下,这是别人写的,然后我研究了一下,问题的解决方法如下:
有两台DB服务器,A和B。两台服务器都是windows系统,数据库版本是10.2.0.1。 现在要从A服务器上导出数据库表到B服务器上。首先在B服务器上建立和A服务器的public database link后(con_a),使用sql查询可以查询到A服务器上的数据库表内容,使用tnsping con_a也显示正常。但是使用expdp导出数据库表时指定参数network_link = con_a,提示ora-39200,ora-12154错误。但是在A服务器上建立到B服务器的public database link后(con_b),无论是sql查询还是tnsping con_b还是使用expdp导出B服务器上的数据库表都没有问题。请问在B服务器上使用expdp时出现错误的原因是什么?
错误代码是:


起先在B服务器上创建了如下dblink,但是一直提示上面的错误:
SQL> create  database link link_daolang connect to system identified by daolang using 'daolang';
数据库链接已创建。
SQL> create or replace directory daolang as 'E:\Oracle\daolang';
目录已创建。
SQL> grant read,write on directory daolang to system;
授权成功。
SQL>

查询可以正常进行
SQL> select count(*) from hr.employees@link_daolang;
  COUNT(*)
----------
       106
SQL> select * from sys.test@link_daolang;
        ID
----------
         1
         2
         3
         4
但是就是不能执行expdp命令,执行就提示
C:\>expdp system/daolang directory=daolang,dumpfile=daolang.dmp,full=y,network_link=link_daolang
Export: Release 10.2.0.1.0 - Production on 星期四, 03 6月, 2010 18:40:04
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
ORA-39001: 参数值无效
ORA-39200: 链接名称 "link_daolang" 无效。
ORA-02019: 未找到远程数据库的连接说明
 
 
经查阅资料,发现必须创建public dblink才可以,然后先删除掉原有的dblink,再重新创建,然后一切正常
SQL> drop database link link_daolang
  2  ;
数据库链接已删除。
SQL> create public database link link_daolang connect to system identified by daolang using 'daolang';
数据库链接已创建。
SQL>
 
 

还有一点要加以说明的是,创建dblink的正确步骤为:
expdp属于服务端工具,而exp属于客户端工具,expdp生成的文件默认是存放在服务端的,而exp生成的文件是存放在客户端的

expdp是server端工具,但可以通过NETWORK_LINK参数实现远端导出,但是前提是远端也安装有Oracle数据库,只有CLIENT端是没有办法利用数据泵的。

1.expdp username/password@connect_string   //对于使用这种格式来说,directory使用源数据库创建的,生成的文件存放在服务端。如何将生成的文件放在目标数据库而不放在源数据库呢,在expdp中使用network_link
如:expdp system/oracledba directory=my_dir dumpfile=test.dmp logfile=test.log network_link=DB_LINK_TEST schemas=test01,test02 parallel=4
2.

a. 创建到服务端的 dblink
create database link link_name connect to  username identified by password using 'connect_string' ;
//usernamepasswordserver端的,并且特别注意该处的connect_string 就为tnsnames.ora中的服务名,
b. conn / as sysdba
create or replace directory dir as 'directory';
grant read,write on directory dir to username;
c.expdp username/password  directory=dir network_link=link_name ...  //
这里的 username本地的用户名与密码  
3.
如果想不生成 dmp文件而直接导入一个数据库,原理和 2类似,直接使用 impdpnetwork_link ,这样可以直接 impdp,而绕过了 expdp的步骤   
 如:impdp system/oracledba directory=my_dir  logfile=test.log  network_link=DB_LINK_TEST schemas=test01,test02 remap_tablespace=users:zaki remap_tablespace=sysaux:zaki  remap_tablespace=system:zaki parallel=4
 
分区表network_link的说明:

这里要指出的是:network_link不支持远端导出分区表中的某一个分区,但可以导整个分区表。以下为测试过程:

创建分区表sales:

[oracle@ora10g ~]$ sqlplus ‘/as sysdba’

SQL> CREATE TABLE sales

(sale_date DATE NOT NULL)

PARTITION BY RANGE (sale_date)

(PARTITION sales2010_q1

VALUES LESS THAN (TO_DATE(’2010-04-01′,’YYYY-MM-DD’))

TABLESPACE sp1,

PARTITION sales2010_q2

VALUES LESS THAN (TO_DATE(’2010-07-01′,’YYYY-MM-DD’))

TABLESPACE sp2,

PARTITION sales2010_q3

VALUES LESS THAN (TO_DATE(’2010-10-01′,’YYYY-MM-DD’))

TABLESPACE sp3);

插入4条记录:

SQL> select count(*) from sales;

COUNT(*)

———-

4

SQL> select * from sales partition(sales2010_q1);

SALE_DATE

————

23-MAR-10

SQL> select * from sales partition(sales2010_q2);

SALE_DATE

————

23-JUN-10

22-JUN-10

SQL> select * from sales partition(sales2010_q3);

SALE_DATE

————

23-SEP-10

远端机器上创建 directory目录、赋权、创建dblink:

[oracle@node1 /]$ sqlplus ‘/as sysdba’

SQL> create directory dump_dir as ‘/backup’;

Directory created.

SQL> grant read,write on directory dump_dir to ochef;

Grant succeeded.

SQL> create database link test connect to ochef identified by oracle using ‘primary’;

Database link created.

SQL> select count(*) from ochef.sales@test;

COUNT(*)

———-

4

远程导出整个分区表:

[oracle@node1 ~]$ expdp ochef/oracle directory=dump_dir dumpfile=sales.dmp network_link=test tables=sales

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 – Production

With the Partitioning, Real Application Clusters, OLAP, Data Mining

and Real Application Testing options

Starting “OCHEF”.”SYS_EXPORT_TABLE_01″:  ochef/******** directory=dump_dir dumpfile=sales.dmp network_link=test tables=sales

Estimate in progress using BLOCKS method…

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 384 KB

Processing object type TABLE_EXPORT/TABLE/TABLE

. . exported “OCHEF”.”SALES”                             4.960 KB       4 rows

Master table “OCHEF”.”SYS_EXPORT_TABLE_01″ successfully loaded/unloaded

******************************************************************************

Dump file set for OCHEF.SYS_EXPORT_TABLE_01 is:

/backup/sales.dmp

Job “OCHEF”.”SYS_EXPORT_TABLE_01″ successfully completed at 11:12:43

远程导出分区表的某个分区:

[oracle@node1 ~]$ expdp ochef/oracle directory=dump_dir dumpfile=sales.dmp network_link=test tables=sales:sales2010_q2

ORA-39001: invalid argument value

ORA-39203: Partition selection is not supported over a network link.

本地导出分区表的某个分区:

[oracle@ora10g ~]$ expdp ochef/oracle directory=dump_dir dumpfile=sales.dmp tables=sales:sales2010_q2

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 – Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting “OCHEF”.”SYS_EXPORT_TABLE_01″:  ochef/******** directory=dump_dir dumpfile=sales.dmp tables=sales:sales2010_q2

Estimate in progress using BLOCKS method…

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 128 KB

Processing object type TABLE_EXPORT/TABLE/TABLE

. . exported “OCHEF”.”SALES”:”SALES2010_Q2″              4.937 KB       2 rows

Master table “OCHEF”.”SYS_EXPORT_TABLE_01″ successfully loaded/unloaded

******************************************************************************

Dump file set for OCHEF.SYS_EXPORT_TABLE_01 is:

/backup/sales.dmp

Job “OCHEF”.”SYS_EXPORT_TABLE_01″ successfully completed at 11:07:07

关于远程expdp用户权限问题,请移步这里。

-The End-

你可能感兴趣的:(ORACLE常用知识)