当前位置:数据库 > Oracle >>

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

Oracle数据库间的数据复制 - SQLPlus中的COPY命令
 
Copy命令可以实现不同Oracle数据库间的数据的复制,也是可以实现同一数据库的数据复制,其性能表现和导入/导出相同。原理图:
 
 
根据9i文档,说Copy命令未来会不支持,但实际上Oracle 11g仍然支持Copy命令,只是未写入11g的文档里,未来12C不知道还支不支持。
 
Copy也有明显的缺点,Copy只支持五种数据类型,Char,Date,Long,Number,Varchar2,8i之后Oracle数据库新增的数据类型都不支持。
 
使用方法:
 
1.首先确保TNS里记录了源Instance和目标Instance的连接信息;
 
2.运行SQL * Plus(无需连接具体的Instance)
 
sqlplus /nolog
 
3.运行Copy命令
 
Copy命令的语法:
 
COPY {FROM database | TO database | FROM database TO database} {APPEND|CREATE|INSERT|REPLACE} destination_table [(column, column, column, ...)]
USING query

where database has the following syntax:

username[/password]@connect_identifier

Copies data from a query to a table in a local or remote database. COPY supports the following datatypes:

CHAR
DATE
LONG
NUMBER
VARCHAR2
Example:

copy from user1/password1@source_instance to user2/password2@dest_instance create emp2 using select * from emp;  

 

上边的命令会从source_instance中把emp数据拷贝到dest_instance中的emp2表。
 
数据库内的复制,也可以使用Copy命令,Example:
 
copy from scott/password@ptian to scott/password@ptian create emp2 using select * from emp;  
这就有点类似于CREATE TABLE empx AS (SELECT * FROM emp);

 

根据Tom的说法,Copy的效率可能会比CREATE TABLE ... AS ...(数据库间的复制也可以使用Create table...as,通过database Link)差,因为Copy是把数据从一个Instance拷贝到sqlplus,再从sqlplus插入另外一个Instance。
 
而CREATE TABLE ... AS ...是把一个数据库的数据直接插入到第二个数据库,所以效率会高一些。
 
Copy 命令的四种模式
 
* replace子句指定了被创建的表名。如果目标表已存在,则删除并用包含复制数据的表替代。若不存在,则创建目标表。
* 使用create子句可避免覆盖已存在的表。若目标表已存在,则copy报告一个错误;若不存在,则创建目标表。
* insert插入数据到已存在的表。将查询到的行插入到目标表,如果目标表不存在,copy返回错误。当使用insert时,using子句必须为目标表的每个列选择对应的列。
* append是将查询到的行插入到目标表。如果不存在,则创建目标表并插入。
 
其他说明
 
如果copy命令比较长,可以在分行时每行末尾必须有续行符(-),最后一行不加。
 
copy from scott/welcome@ptian -  
to scott/welcome@ptian-  
create empy-  
using select * from emp-  
where rownum = 1  

 


Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,