本地有2个表空间,2个用户
用户:test1/test1 属于表空间:test1
用户:test2/test2 属于表空间:test2现在有一个dmp文件是从别处(不是本地)的test1用户下导出来的,现在我使用
imp test2/test2@sid file=d:\test1.dmp fromuser=test1 touser=test2
把从别处test1导出dmp文件导入本地的test2用户下,但是我发现虽然连接test2用户能够看到表、存储过程等,但是test2的表空间没增加,反而在test1表空间下增加了相应的大小请问如何操作才能让test2用户占用自己的test2表空间,而不是放在test1下

解决方案 »

  1.   

    可能是原来的表空间指定的是test1的,而你的test2的用户有又unlimited tablespace的权限,所以出现这样的情况。在重用原有的dmp文件的前提下,如果是普通的表,没有long或者lob以及分区等影响的情况下,你可以通过减低test1表空间的配额,然后在imp试试。如果可以重新做dmp的话,可以用transport_tablespace,tablespace的选项导出导入表空间
    如果服务器都是10g的话,可以用expdp来导入导出。
      

  2.   


    我加了一句alter user test2 quota 0m on test1;
    为什么还是不行?
      

  3.   

    imp 是根据你原来的表空间来看的, 就是你之前导处的是test1表空间, 它就会在你的本地找test1的表空间,如果有就导入到该表空间,如果没有就导入其他的表空间,至于楼主所说的意思,没做过,关注。。
      

  4.   


    你说的不行,是报错,还是又导入到test1下去了。
      

  5.   

    刚查了下,如果是oracle 10g的,impdp可以实现, 楼主可以试试。impdp 有个参数REMAP_TABLESPACE,将源表空间的所有对象导入到目标表空间中
    REMAP_TABLESPACE=source_tablespace:target_tablespace示例:
    Impdp system/manager DIRECTORY=dump_dir DUMPFILE=tablespace.dmp TABLESPACES=user01 
    REMAP_TABLESPACE=source_tablespace:target_tablespaceEXPDP和IMPDP使用说明 
    http://user.qzone.qq.com/251097186/blog/1245825202
      

  6.   


    还是导入到了test1下
    我在另外论坛也问了下,那边给的答复
    我马上来验证下--去掉用户在表空间的权利 
    revoke unlimited tablespace from test2的默认表空间;
    --去掉用户在system表空间的配额
    alter user test2 quota 0 on test2的默认表空间;
    --给予用户默认表空间不受限制的配额 
    alter user test2 quota unlimited on 你想迁移的表空间名;
    grant unlimited tablespace to 你想迁移的表空间名;
    ALTER USER "test2"  DEFAULT TABLESPACE "你想迁移的表空间名";
    --
    导入数据
    --
    收回相关权限
    --去掉用户在表空间的权利 
    revoke unlimited tablespace from 你想迁移的表空间名;
    --去掉用户在system表空间的配额
    alter user test2 quota 0 on 你想迁移的表空间名;--
    一般我前面都会给用户赋予dba权限,迁移完成后再进行收回刚才突然有人找我处理问题,所以直接将我做迁移的脚本改了一下,没有注意看就发了,现已修改,下次我会注意发帖前先检查一下
      

  7.   

    imp 是根据你原来的表空间来看的, 就是你之前导处的是test1表空间, 它就会在你的本地找test1的表空间,如果有就导入到该表空间,如果没有就导入其他的表空间,至于楼主所说的意思,没做过,关注。。
      

  8.   


    EXPDP和IMPDP是10G的新功能,所以需要目标和源都是10G, 他们的命令的OPTION和EXP/IMP很相识,多个S,功能更大,而且由于10G里DATA DUMP引入了DIRECTORY的概念,而不是以前的FILE,所以只能在服务器上保持文件。具体OPTIONS查看EXPDP HELP=Y
      

  9.   


    你上面说失败,不会是没有把UNLIMITED TABLESPACE收回来吧
      

  10.   


    现在解决了是表空间和用户建立完后
    加了这两句
    revoke unlimited tablespace from test2;
    alter user test2 quota unlimited on test2;但是为什么呢?
    这第一句收回了unlimited,这第二句又给了unlimited能否解释下?
      

  11.   


    注意这两句的差异revoke unlimited tablespace from test2; 
    取消test2用户的不限表空间的权限alter user test2 quota unlimited on test2; 
    给test2(第一个test2的含义)用户 在test2表空间(第二个test2的含义)上不限制配额的权利这里应该还掉了一个
    alter user test2 quota 0 on test1;
    给test2(第一个test2的含义)用户 在test1表空间上0配额的权利这样才行哟。
      

  12.   


    非常感谢,不过没加test2用户在test1表空间上0配额的语句也是可以的啊?