首页 » ORACLE » sqlplus copy 跨网段迁移数据

sqlplus copy 跨网段迁移数据

工作难免有这种需求,从生产库取一张表或一个查询结果集到本地测试库中,而且生产库与测试库没有在同一个网段,那就不再考虑dblink,不用exp,expdp,有没有其它方法呢?当然如果用的电脑客户端有两个网络连接可以同时分别连接生产库、测试库,那你可以用到sqlplus 的copy 功能

copy 功能对数据类型有一部份限制,目前只支持

CHAR
DATE
LONG
NUMBER
VARCHAR2
显然没有支持lob类型

下面我对copy 功能做了个小小演示
环境:
从3.234库中的anbob方案下copy一张表到3.229库的同样是anbob方案下,注意可以不用方案,并不同表名
整个操作是在我的xp客户端3.133上进行(3.234 tnsname is mytest,3.229 tnsname is d3229),注意如果在上面两台上进行,就可以省略from 或者 to,你懂的..

实验开始

3.234 server1 >>>>>>>>>>>>>
sys@ORCL> conn anbob/anbob
Connected.

anbob@ORCL> create table testcopy(id int,name varchar2(20));
Table created.

anbob@ORCL> insert into testcopy values(1,'anbob.com');
1 row created.

anbob@ORCL> commit;
Commit complete.

3.133 client>>>>>>>>>>>>>
SQL> conn anbob/anbob@mytest
已连接。
SQL> conn anbob/anbob@d3229
已连接。
--确认都可以连接

SQL> set arraysize 500
SQL> copy  from anbob/anbob@mytest to anbob/anbob@d3229  create newcopy using se
lect * from testcopy;

数组提取/绑定大小为 500。(数组大小为 500)
将在完成时提交。(提交的副本为 0)
最大 long 大小为 80。(long 为 80)
表 NEWCOPY 已创建。

1 行选自 anbob@mytest。
   1 行已插入 NEWCOPY。
   1 行已提交至 NEWCOPY (位于 anbob@d3229)。

3.229 server2 >>>>>>>>>>>>>
--开始并没有newcopy这张表
SQL> conn anbob/anbob
Connected.
SQL> select * from newcopy;

        ID NAME
---------- --------------------
         1 anbob.com

3.234 server1 >>>>>>>>>>>>>
anbob@ORCL> insert into testcopy values (2,'weejar.com');

1 row created.

anbob@ORCL> commit;

Commit complete.

3.133 client>>>>>>>>>>>>>
SQL> copy  from anbob/anbob@mytest to anbob/anbob@d3229  append newcopy using se
lect * from testcopy;

数组提取/绑定大小为 500。(数组大小为 500)
将在完成时提交。(提交的副本为 0)
最大 long 大小为 80。(long 为 80)
2 行选自 anbob@mytest。
   2 行已插入 NEWCOPY。
   2 行已提交至 NEWCOPY (位于 anbob@d3229)。

3.229 server2 >>>>>>>>>>>>>
SQL> select * from newcopy;

        ID NAME
---------- --------------------
         1 anbob.com
         2 weejar.com
         1 anbob.com
3.234 server1 >>>>>>>>>>>>>
anbob@ORCL> update testcopy set id=100 where id=1;
1 row updated.
anbob@ORCL> select * from testcopy;

        ID NAME
---------- --------------------
       100 anbob.com
         2 weejar.com

anbob@ORCL> commit;
Commit complete.

3.133 client>>>>>>>>>>>>>
SQL> copy  from anbob/anbob@mytest to anbob/anbob@d3229  insert newcopy using se
lect * from testcopy;

数组提取/绑定大小为 500。(数组大小为 500)
将在完成时提交。(提交的副本为 0)
最大 long 大小为 80。(long 为 80)
2 行选自 anbob@mytest。
   2 行已插入 NEWCOPY。
   2 行已提交至 NEWCOPY (位于 anbob@d3229)。

3.229 server2 >>>>>>>>>>>>>
SQL> select * from newcopy;

        ID NAME
---------- --------------------
         1 anbob.com
         2 weejar.com
       100 anbob.com
         2 weejar.com
         1 anbob.com

3.234 server1 >>>>>>>>>>>>>
anbob@ORCL> select * from testcopy;

        ID NAME
---------- --------------------
       100 anbob.com
         2 weejar.com
3.133 client>>>>>>>>>>>>>
SQL> copy  from anbob/anbob@mytest to anbob/anbob@d3229  replace newcopy using s
elect * from testcopy;

数组提取/绑定大小为 500。(数组大小为 500)
将在完成时提交。(提交的副本为 0)
最大 long 大小为 80。(long 为 80)
表 NEWCOPY 已删除。

表 NEWCOPY 已创建。

2 行选自 anbob@mytest。
   2 行已插入 NEWCOPY。
   2 行已提交至 NEWCOPY (位于 anbob@d3229)。         

3.229 server2 >>>>>>>>>>>>>

SQL> select * from newcopy;
        ID NAME
---------- --------------------
       100 anbob.com
         2 weejar.com

--当然你要问insert 与append  有什么区别呢,看下面的例子
3.229 server2 >>>>>>>>>>>>>

SQL> drop table newcopy purge;

Table dropped.

3.133 client>>>>>>>>>>>>>
SQL> copy  from anbob/anbob@mytest to anbob/anbob@d3229  insert newcopy using se
lect * from testcopy;

数组提取/绑定大小为 500。(数组大小为 500)
将在完成时提交。(提交的副本为 0)
最大 long 大小为 80。(long 为 80)

ERROR:
ORA-00942: table or view does not exist

SQL> copy  from anbob/anbob@mytest to anbob/anbob@d3229  append newcopy using se
lect * from testcopy;

数组提取/绑定大小为 500。(数组大小为 500)
将在完成时提交。(提交的副本为 0)
最大 long 大小为 80。(long 为 80)
表 NEWCOPY 已创建。

2 行选自 anbob@mytest。
   2 行已插入 NEWCOPY。
   2 行已提交至 NEWCOPY (位于 anbob@d3229)。

note:

copy 命令是sqlplus的功能而非数据库,
copy 可以利用中间client转移两个跨网段的数据库表或是子查询结果集,
copy 不支持SYSDBA or SYSOPER权限连接
copy 几乎不生成undo,但生成redo , 导说比insert into select 快,但比create table xx as select 慢

打赏

目前这篇文章有4条评论(Rss)评论关闭。

  1. Alberto Frischkorn | #1
    2011-12-21 at 08:31

    Just wanna remark that you have a very nice site, I enjoy the layout it actually stands out.

  2. noadd | #2
    2011-09-20 at 10:39

    最近逛了一些博客,很多都很有创意,不过也有些看来看去好多都是相互转载的文章,没有多少是原创的,看多了也眼睛疲劳了,但是版主你这个博客还可以,终于有点新鲜感,所以忍不住留言了,当然也算是灌水感谢一下。版主加油!支持你!

  3. 车载导航仪 | #3
    2011-09-19 at 19:39

    好文,收藏了。

  4. 河北seo | #4
    2011-09-19 at 19:05

    学习了!