ORACLE的Copy命令和create table,insert into的比较
在数据表间复制数据是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的比较相关推荐
- oracle创建目录的命令,使用create database命令手工创建Oracle数据库
使用create database命令手工创建Oracle数据库 1. 设置环境变量ORACLE_SID export ORACLE_SID=mdb 2. 创建数据库初始化参数 cd $ORACLE_ ...
- PostgreSQL12 copy命令支持where子句筛选
copy命令允许我们对数据库中的数据和文件系统中的文件进行交互.pg12对copy命令有了增强,支持了where子句用来筛选. 语法: Command: COPY Description: copy ...
- oracle中create table with as和insert into with as语句
oracle支持使用with as 子句来创建表 语法: create table table_name as with clause_name as (select query ) [, claus ...
- 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 ...
- oracle insert into as select,比较create table as select * 与 insert into table select *
实验环境: SYS@aaron> select * from v$version; BANNER ------------------------------------------------ ...
- oracle中create table as和insert into select语句
SELECT INTO , INSERT INTO SELECT 和 CREATE TABLE AS SELECT INSERT INTO SELECT Create table newTable a ...
- oracle命令窗口粘贴,Oracle数据库中的Copy命令
SQL*Plus的Copy命令 在数据表间复制数据是Oracle DBA经常面对的任务之一,Oracle为这一任务提供了多种解决方案,SQL*Plus Copy 命令便是其中之一.SQL*Plus C ...
- Oracle数据库间的数据复制 - SQLPlus中的COPY命令
Copy命令可以实现不同Oracle数据库间的数据的复制,也是可以实现同一数据库的数据复制,其性能表现和导入/导出相同.原理图: 根据9i文档,说Copy命令未来会不支持,但实际上Oracle ...
- Oracle中,使 CREATE TABLE AS SELECT 支持ORDER BY
Oracle中,使 CREATE TABLE AS SELECT 支持ORDER BY 文章发表:kehui 发表日期:2002-01-21 阅读次数:1103 大家都知道,"CREA ...
- CTAS VS create table and then insert
很多情况下我们都会需要复制源表数据以达到冗余数据的目的,那么到底是使用CREATE TABLE AS SELECT的CTAS方式,还是先建好表的结构然后再插入数据好呢? 我们来看看这2种方式的不同表现 ...
最新文章
- 3dsmax 长动画导入 three.js 转变成 多个动画
- 计算机辅助建筑设计亚洲学会,清华大学
- JavaScript 笔记 ( Prototype )
- vnc远程无法关闭窗口_无法启动远程桌面服务(VNC)[关闭]
- |NOIOJ|动态规划|3532:最大上升子序列和
- wxWidgets:wxRichTextField类用法
- 数据库面试题【五、索引的优缺点,什么时候使用索引,什么时候不能使用索引】
- BZOJ 4557 JLOI2016 侦查守卫 树形dp
- CSS 背景附着 background-attachment属性
- 笨办法学Python(learn python the hard way)--练习程序39-40
- lg手机历史机型_细数LG G系列旗舰手机进化史
- 百度SEO站群全网音乐搜索下载网站源码
- 62个大数据可视化工具
- PHP_微信小程序(1)
- 清华大学计算机系保送,号称计算机世界第一的清华,三位金牌保送生全部投奔了美国...
- 同时拥有多个子域名和主域名?推荐申请GlobalSign SANs SSL证书
- 有关AE2020中文版改为英文版的方法
- Java中的byte[]/char[]/int/String数据类型转换
- linux服务开机自启动
- 华为设备配置PoE功能