大家好,有个问题想请教一下:
在Oracle同一实例下,我想将A表空间内的所有表复制到B表空间(刚新建的),我使用PL/SQL在本机数据库上用exp/imp语法试了好多次都没搞定,不知道是自己自己命令写的不对还是Oracle数据库的问题。
PS:我对这方面不太懂,只会写一点简单的查询插入语句,明天要操作公司的数据库,实在没办法了,希望有对这方面比较了解的大神能指点一二。多谢!

解决方案 »

  1.   

    你确定是把表空间 A 的数据移到 表空间 B吗 ? 而不是 UserA 的数据,导给 UserB ?
      

  2.   


    抱歉没有表达清楚。
    我在新的B表空间里建了用户B1,A表空间用户A1,A2已经建了有若干表。我现在想把A表空间所有用户的表都复制一份到B表空间里去,我知道用create table B1.tableone as select * from A1.tableone ;这样的方式可以把别的A表空间里A1的表复制一份到B表空间里B1用户,只是这样太慢了,而且原来的表里的备注,索引什么的好像都不能复制过来。我想问的是有没有一种方法是表空间层面的复制,可能我这样的表述还是有问题,你刚才说了每个表都是有它的拥有者,但是我也不知道该怎么表达,你应该明白我的意思:我不想一个一个重新建表,我想直接复制一个表空间。
      

  3.   

    你搜索一下oracle exp imp,基本就能满足你的需求。
      

  4.   

    首先,目标表空间也要有指定的SCHEMA  假设源表空间为Atablespace  目标表空间为Btablespace   源schema为Auser 目标schema为Buser :sqlplus下执行:
    create directory expdb as '/opt/oradata/expdump';
    grant read,write on directory empdb to Auserlinux下执行:
    expdp Auser/password directory=expdb dumpfile=dumptest.dmp logfile=exporttest.log tables=table1,table2,table3;
    impdp system/password directory=expdb dumpfile=dumptest.dmp logfie=importtest.log  remap_tablespace=Atablespace:Btablespace remap_schema=Auser:Buser
    导出的时候如果不指定tables就导出Auser下的所有表
      

  5.   

    将A表空间中的所有表建立游标,再运用create table 游标 as select  * from  游标
    不知道可以不 哈哈
      

  6.   

    最快的方法是把用户默认目标表空间,然后imp user_b/pwd@orcl fromuser=user_a touser=user_b