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 慢
流年笑掷 未来可期
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)