最近我想在试验弄个备份数据库 在同一个用户表空间中有一个表history我想做一个备份,于是我建了一个新表history1 结构和a一样,然后导出数据:exp abc/abc file=1.dmp log=1.log tables=history FEEDBACK=100000成功导出 但我想用imp导入到history1不成功,问了几个人 有人说imp默认不支持导入到其他表的 但有人说可以 请问那个是对的 并求一个可以导入的语句把我的导出数据导入到新表history1 中,由于我是初学者,很多不会,请大家帮忙一下,写一个可以导入的语句让我可以学习一下 ,非常感谢!!!

解决方案 »

  1.   

    将数据导入history,再改名为history1.
      

  2.   

    如果LZ想保留现在history表中的数据,不让IMP影响现在的history表。可以用synonym加IMP实现你的需求。
      

  3.   

    有人说imp默认不支持导入到其他表的
    ====================================
    确实
      

  4.   

    导入导出单表确实意义不大,还不如直接拷贝SQL语句,然后更改表名,重建立表.把数据导出后,再导进来.
      

  5.   

    要在不同用户下导入,
    exp user1/passwd file=1.dmp tables='history'
    imp user2/passwd file=1.dmp fromuser=user1 touser=user2
    然后以user2登录rename history to history1
      

  6.   

    如果是在生产系统上, rename是一件非常危险的事,几乎是不准做这种操作的。lz可以这样来:1.在另一个用户下建同义词,比如A用户下建:create synonym history for abc.history1;
    注意该用户必须有DBA权限。2.在A用户下IMP:imp A/xxx file=... full=y ignore=y这样即可把原history表的数据IMP导入history1表中。
      

  7.   

    create table history1 as select * from history;楼主试试这个SQL。
      

  8.   

    单个表没必要这么IMP EXP的吧
      

  9.   

    正常导出,exp abc/abc file=1.dmp log=1.log tables=(history);
    将数据库中原有的history改名为history1,  alter table history rename to history1;
    之后再imp, imp abc/abc file=1.dmp log=1.log tables=(history);
    我用过好多次都好用的。
      

  10.   

    非常谢谢大家,首先我说说我的那个备份是随时要查的所以13楼的方法不行,谢谢,另外这个history表有很多关联 索引 如果是业务中的表是不可以随便重建的,所以这个方法又行不通,另外create table history1 as select * from history; 这个语句如果数据量比较大(大约1000万)时很慢,所以这个方法也不是很好,至于同义词这种方法(如果是同一个用户就不行了)我还没有试过,所以现在不好评论(今晚回去试试 谢谢),但随便重建、rename这些方法我个人不推荐,一个正在运行业务的表我个人认为是绝对不可以做这些操作的,我是个菜鸟中的菜鸟,所以非常希望可以跟大家交流,希望大家提出一些切实可行的方法,共同提高!非常谢谢大家!
     
      

  11.   

    之前没看清楚,你既然要备份,为什么还要放到新建的一张表中去,
    如果一定要放到新表中去,其实这个create table history1 as select * from history;最适合你本情况.创建同义词的方法,如果你把表建在其它用户之下是可以的,同一用户下已经有一个表名与之相同了,是不行的.其实真的不知道你想要干什么,如果只是为了备份,完全可以进行逻辑备份,即把它exp出来就行了,当需要的时候再导回去.