COPY FROM <db> TO <db> <opt> <table> {(<cols>)} USING <sel>
example:copy from scott/tiger@henrydb to scott/tiger@henrydb create emp2 using select from emp;

解决方案 »

  1.   

    create table emp2 select * from emp;
    这两个有什么区别?还是没懂.
      

  2.   

    copy在两个数据库服务器之间拷贝数据。
    例子:
    sqlplus test/test@query;
    copy from test/test@master insert test using select * from test;
    @query @master 是两个服务器
      

  3.   

    COPY的本意是实现在两个不同的数据库之间进行复制,所以它需要指定从哪里复制或复制到哪里,由子句FROM或TO来指定;对于目的表,可以存在,也可以不存在,由COPY直接创建,语法如下:  
    COPY FROM|TO LOGIN CREATE|APPEND|INSERT|REPLACE TABLENAME USING SELECT_STATEMENT  
    FROM和TO选其中一个,表明是从哪里选择或向哪里复制,如FROM SCOTT/TIGGER@SERVICENAME  
    CREATE:生成一个新的表,不管表是否存在,如果不存在,则创建,如果存在,则删除后创建;  
    APPEND:如果目标表不存在就创建;  
    INSERT:首先要求目的表存在,如果不存在,则报错,此命令仅向表中做插入操作;  
    REPLACE:在复制前,先将目标表中的数据删除,然后再复制;  
    USING后的子句是表明数据来源,请看下例:  
    COPY TO SYSTEM/MANAGER@SERNAME CREATE TABLE2 USING SELECT * FROM TEST1;  
    注意:  
    1. 即使只在同一库中复制,也要指明服务名,所以必须建立一个指向本地库的服务;  
    2. 整个语句应该写在同一行,这不同于一般的SQL语句,是不可以换行的。  
    3. 要用SET LONG LENGTH来设定每次COPY时对LONG的支持的字节数。如果不做特殊说明,默认值为80,这是不能接受的,可以考虑在COPY过程中最大需要多大,如果想定为2M,则写成:SET LONG 2000000;  
    建议:如果需要复制的表非常大,可以将SELECT子句上加上WHERE子句限制每次复制的记录数,分几次导入一个大的表是一个不错的主意,因为当大量操作时,对SYSTEM,TEMP,RBS等表空间的要求都非常大,经常会出现导入很长时间后发生因为表空间不足而失败的现象,且由于很多操作属于事务型,所以一旦失败,所有的操作可能均白费。