在数据表间复制数据是Oracle DBA经常面对的任务之一,Oracle为这一任务提供了多种解决方案,SQL*Plus Copy 命令便是其中之一。SQL*Plus Copy 命令通过SQL*Net在不同的表(同一服务器或是不同服务器)之间复制数据或移动数据。
 在实际运行环境中若能恰当地选择使用SQL*Plus Copy 命令可以有效地提高数据复制的性能。
 下面将简要介绍SQL*Plus Copy 命令使用,并在性能方面与其他两种方案进行对比,力求能提供一个使用Copy 命令的方案参考。
1.语法及使用说明
1.1 语法
下面我们来看一下SQL*Copy 命令的语法及使用说明。
在解释SQL*Plus Copy 命令的语法之前,我们必须要明确SQL*Plus Copy 命令不是一个方法或是函数,也不是一个SQL语句,它是一个命令(command),当然这个命令必须在SQL*Plus里运行。

中国网管联盟bitsCN.com

SQL*Plus Copy 命令的语法:
网管联盟bitsCN_com

COPY {FROM database | TO database | FROM database TO database} {APPEND|CREATE|INSERT|REPLACE} destination_table [(column, column, column, ...)]
USING query

我们分部分来解释一下:

COPY – 这个不太需要解释,主命令,声明要执行COPY操作

From Database – 源数据库
To Database – 目标数据库
 此处注意花括号中有三种可选的写法(以”|”隔开),如果源数据表和目标数据表在同一个Schema中,则可以只写From Database,也可以只写To Database,当然还可以是第三种写法,把From Database和To Database写全。但如果源数据表和目标数据表不在同一个Schema中,则必须用第三种写法,即把From Database和To Database都写全
 From Database和To Database的格式是一样的:USERID/PASSWORD@SID,这个大家都应该很熟悉了。 网管网www_bitscn_com

{APPEND|CREATE|INSERT|REPLACE} – 声明操作数据的方式,下面分别解释一下:
Append – 向已有的目标表中追加记录,如果目标表不存在,自动创建,这种情况下和Create等效。
Create – 创建目标表并且向其中追加记录,如果目标表已经存在,则会返回错误。
Insert – 向已有的目标表中插入记录,与Append不同的是,如果目标表不存在,不自动创建而是返回错误。
Replace – 用查询出来的数据覆盖已有的目标表中的数据,如果目标表不存在,自动创建。

destination_table – 目标表的名字
[(column, column, column, ...)] – 可以指定目标表中列的名字,如果不指定,则自动使用Query中的列名。
USING query – 查询语句,交流的数据来自这儿。

1.2 使用范例
下面我们通过几个例子来看一下SQL*Plus Copy 命令的使用:

1.2.1 在同一个服务器的同一个Schema中复制数据:
同时指定From database和To database
SQL> copy from scott/tiger@lsj to scott/tiger@lsj create dept1 using select * from dept;
只指定From Database
SQL> copy from scott/tiger@lsj create dept2 using select * from dept; 中国网管联盟bitsCN.com
只指定To Database
SQL> copy to scott/tiger@lsj create dept3 using select * from dept;

1.2.2 在同一个服务器的不同Schema中复制数据:
这种情况下必须同时指定From Database和To Database
SQL> copy from scott/tiger@lsj to lsjdemo/lsjdemo@lsj create dept using select * from dept;
注意这种情况下,using select * from dept 中并不需要使用scott.demp的形式。

1.2.3 在不同的服务器间复制数据:
SQL> conn lsj/lsj@sunserve
已连接。
SQL> copy from scott/tiger@lsj to lsj/lsj@sunserve create dept using select * from dept;
2.4 性能实验结果
实验数据:
记录数:5,082,500
数据量:504M
实验结果

方案------------------------执行时间(秒) ---------Undo(M) ------Redo(M)
Copy command -------------520.51----------------------0 ---------------- 592
Insert into…select …---- 631.64 ------------------345 -------------1720

网管论坛bbs_bitsCN_com

Create Table…------------- 244.79 --------------------0 ----------------515

2.总结

 Create Table…as select…是最快的,而且生成的Undo和Redo信息最少,所以只要可能,请尽量使用这种方案。但这种方案有一定的限制,即目标表必须是不存在的,不能用它向已有的目标表中追加记录。
 Insert into … select … 是最慢的,而且生成最多的Undo和Redo信息,对I/O的压力最大,优势在于大家对它比较熟悉,使用起来比较简单,适合于处理少量的数据,若要处理大量的数据,不推荐使用这种方案。
 Copy Command可以处理Create Table不能处理的情况,即向已有的数据表中追加记录,相对于insert来说,效率更高一些,生成更少的Redo信息,不生成Undo信息,所以在执行大量的数据追加时,推荐使用Copy Command命令。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yanleigis/archive/2008/10/13/3066942.aspx

ORACLE的Copy命令和create table,insert into的比较相关推荐

  1. oracle创建目录的命令,使用create database命令手工创建Oracle数据库

    使用create database命令手工创建Oracle数据库 1. 设置环境变量ORACLE_SID export ORACLE_SID=mdb 2. 创建数据库初始化参数 cd $ORACLE_ ...

  2. PostgreSQL12 copy命令支持where子句筛选

    copy命令允许我们对数据库中的数据和文件系统中的文件进行交互.pg12对copy命令有了增强,支持了where子句用来筛选. 语法: Command: COPY Description: copy ...

  3. oracle中create table with as和insert into with as语句

    oracle支持使用with as 子句来创建表 语法: create table table_name as with clause_name as (select query ) [, claus ...

  4. oracle数据库【表复制】insert into select from跟create table as select * from 两种表复制语句区别...

    create table  as select * from和insert into select from两种表复制语句区别 create table targer_table as select ...

  5. oracle insert into as select,比较create table as select * 与 insert into table select *

    实验环境: SYS@aaron> select * from v$version; BANNER ------------------------------------------------ ...

  6. oracle中create table as和insert into select语句

    SELECT INTO , INSERT INTO SELECT 和 CREATE TABLE AS SELECT INSERT INTO SELECT Create table newTable a ...

  7. oracle命令窗口粘贴,Oracle数据库中的Copy命令

    SQL*Plus的Copy命令 在数据表间复制数据是Oracle DBA经常面对的任务之一,Oracle为这一任务提供了多种解决方案,SQL*Plus Copy 命令便是其中之一.SQL*Plus C ...

  8. Oracle数据库间的数据复制 - SQLPlus中的COPY命令

     Copy命令可以实现不同Oracle数据库间的数据的复制,也是可以实现同一数据库的数据复制,其性能表现和导入/导出相同.原理图: 根据9i文档,说Copy命令未来会不支持,但实际上Oracle ...

  9. Oracle中,使 CREATE TABLE AS SELECT 支持ORDER BY

    Oracle中,使 CREATE TABLE AS SELECT 支持ORDER BY 文章发表:kehui  发表日期:2002-01-21  阅读次数:1103  大家都知道,"CREA ...

  10. CTAS VS create table and then insert

    很多情况下我们都会需要复制源表数据以达到冗余数据的目的,那么到底是使用CREATE TABLE AS SELECT的CTAS方式,还是先建好表的结构然后再插入数据好呢? 我们来看看这2种方式的不同表现 ...

最新文章

  1. 3dsmax 长动画导入 three.js 转变成 多个动画
  2. 计算机辅助建筑设计亚洲学会,清华大学
  3. JavaScript 笔记 ( Prototype )
  4. vnc远程无法关闭窗口_无法启动远程桌面服务(VNC)[关闭]
  5. |NOIOJ|动态规划|3532:最大上升子序列和
  6. wxWidgets:wxRichTextField类用法
  7. 数据库面试题【五、索引的优缺点,什么时候使用索引,什么时候不能使用索引】
  8. BZOJ 4557 JLOI2016 侦查守卫 树形dp
  9. CSS 背景附着 background-attachment属性
  10. 笨办法学Python(learn python the hard way)--练习程序39-40
  11. lg手机历史机型_细数LG G系列旗舰手机进化史
  12. 百度SEO站群全网音乐搜索下载网站源码
  13. 62个大数据可视化工具
  14. PHP_微信小程序(1)
  15. 清华大学计算机系保送,号称计算机世界第一的清华,三位金牌保送生全部投奔了美国...
  16. 同时拥有多个子域名和主域名?推荐申请GlobalSign SANs SSL证书
  17. 有关AE2020中文版改为英文版的方法
  18. Java中的byte[]/char[]/int/String数据类型转换
  19. linux服务开机自启动
  20. 华为设备配置PoE功能

热门文章

  1. opencv常用函数整理(二)
  2. Mac电脑上java如何手动释放内存?
  3. curl: (56) Recv failure: Connection reset by peer
  4. 企业数据安全防护不可忽视,数据丢失/损坏如何处理?
  5. [转] 跨域资源共享 CORS 详解
  6. 探讨专线与家用宽带的区别
  7. 链路负载需求及基本原理
  8. Sublime Text 3 破解版 + 注册机 + 汉化包 + 教程
  9. 算法导论7:选择算法和数据结构准备 2016.1.7
  10. solaris常用命令总结