`
jayyanzhang2010
  • 浏览: 377865 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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里运行。

 

SQL*Plus Copy 命令的语法:

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,这个大家都应该很熟悉了。 {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


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命令。

分享到:
评论

相关推荐

    快速掌握Oracle数据库中的Copy命令

    Copy命令在性能上与其他数据复制方法(如INSERT INTO SELECT,PL/SQL游标,以及外部表等)相比,可能有其优势,特别是在处理大量数据时。然而,实际使用时应根据具体场景、数据量和网络环境来选择最适合的方法。例如...

    最全的oracle常用命令大全.txt

    列出全部SQL命令和SQL*Plus命令 SQL>help 列出某个特定的命令的信息 SQL>help 命令名 c、显示表结构命令DESCRIBE SQL>DESC 表名 d、SQL*Plus中的编辑命令 显示SQL缓冲区命令 SQL>L 修改SQL命令 首先要将待改正行...

    oracle常用命令集合(一)

    - 示例:`CREATE TABLE emp_copy AS SELECT * FROM emp WHERE 1=2;` - **说明**:此命令用于创建一个空表,其结构与源表相同。 #### 15. 修改用户密码 - **修改用户密码**: `ALTER USER 用户名 IDENTIFIED BY 新...

    oracle常用命令

    - **命令**: `create table 新表名 as select * from 原表名` - **描述**: 使用`as select`子句创建一个新的表,并从另一个表中复制数据。 - **示例**: ```sql SQL> create table tbl_student_copy as select *...

    Oracle 大数据量操作优化.pdf

    10. **批量拷贝与常规插入**:Oracle提供的COPY命令和常规的INSERT INTO...SELECT语句是批量数据迁移的常见方式,通过设置ARRAYSIZE和COPYCOMMIT,可以控制批量处理的大小,提高效率。 11. **CTAS(CREATE TABLE AS...

    Oracle 常用命令

    ### Oracle 常用命令详解 #### 一、概述 本文档主要介绍的是与PostgreSQL兼容的SQL命令,尽管标题提到的是“Oracle常用命令”,但实际内容覆盖的是PostgreSQL所支持的一系列SQL命令。这里提到的SQL即为结构化查询...

    oracle里常用的命令大全,及oracle使用1000问

    了解并熟练掌握Oracle中的常用命令对于数据库管理、开发和维护至关重要。以下是一些Oracle数据库中常见的命令及其详解: 1. **连接数据库**: - `sqlplus用户名/密码@连接字符串`:使用SQL*Plus工具连接到Oracle...

    Oracle 大数据量操作优化

    copy from username/password@oraclename append table_name1 using select * from table_name2; ``` 2. **常规插入方式** - 直接使用`INSERT INTO...SELECT FROM`语句将数据从一个表插入到另一个表。 - 为了...

    oracle 的基本建表语句

    Oracle中的`CREATE TABLE`语句用于定义表结构,比如: ```sql CREATE TABLE 表名 ( 字段名1 字段类型(长度) 是否为空, 字段名2 字段类型 是否为空 ); ``` 主键是标识表中唯一记录的关键字段,可以用`ALTER TABLE`...

    2010年oracle命令176页完整版型

    CREATE TRIGGER trigger_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN ... END; ``` **5. Job创建和操作:** - **创建作业:** ```sql DECLARE job_no NUMBER; BEGIN DBMS_SCHEDULER.create_job(job_...

    Oracle_基本建表语句.doc

    INSERT INTO classes VALUES (class_seq.NEXTVAL, '软件一班'); COMMIT; UPDATE stu_account SET username='aaa' WHERE count_id=2; COMMIT; CREATE UNIQUE INDEX username ON stu_account(username); ``` 唯一...

    oracle常用语句

    CREATE TABLE alist_table_copy AS SELECT a, b, QQ AS QQ2, ADDRESS FROM alist_table; DROP TABLE alist_table; RENAME alist_table_copy TO alist_table; ``` 二、DCL语句 DCL语句用于控制数据库访问权限和事务...

    ORACLE表自动按月分区步骤

    INSERT INTO USER_ORDER (ID, CREATE_TIME) VALUES (1, ADD_MONTHS(SYSDATE, 1)); ``` 通过上述步骤,我们可以看到分区表会自动为新数据所在月份创建一个新的分区`SYS_P183`,并且会自动生成相应的分区索引。 ####...

    数据库oracle

    Oracle数据库是一种广泛使用的关系型数据库管理系统,它提供了丰富的SQL语法来操作数据。在这个文档中,主要涉及了Oracle数据库的一些...这些命令和操作构成了数据库管理的基础,对于日常的数据管理和维护至关重要。

    Oracle基本建表语句

    INSERT INTO <table_name> VALUES (, , ...); ``` **示例:** ```sql INSERT INTO classes VALUES (class_seq.NEXTVAL, '软件一班'); COMMIT; ``` **3. 更新数据** **语法:** ```sql UPDATE <table_name> SET ...

    sample_schema_scripts Oracle 数据库 示例方案脚本(含结构+数据脚本)

    在Oracle中,可以使用`INSERT INTO`语句将数据插入到表中,也可以使用`COPY`命令(在SQL*Plus环境中)或`SQLLoader`工具批量导入数据。在示例脚本中,可能还会包含`TRUNCATE`或`DELETE`语句来清空表,以及`ALTER ...

    Oracle事例

    sql> create [unique] index index_name on table_name(column,.. asc/desc) tablespace sql> tablespace_name [pctfree integer] [initrans integer] [maxtrans integer] sql> [logging | nologging] [nosort] ...

    oracle创建表的方法和一些常用命令

    本文将详细介绍如何在Oracle中创建表以及使用的一些常用命令,包括无约束、有主键约束、有外键约束的表的创建,以及表的删除、数据插入、唯一和条件约束的设置、表的复制以及字段的修改等。 1. 主键和外键 主键是...

    OL1.sqlplus环境和常用命令

    2. **插入(INSERT)**:`INSERT INTO employees (emp_id, first_name) VALUES (100, 'John');` 可以向employees表中插入新记录。 3. **更新(UPDATE)**:`UPDATE employees SET last_name = 'Doe' WHERE emp_id =...

Global site tag (gtag.js) - Google Analytics