各位好:
小弟现在碰到一个dmp文件的导入问题。请大家多帮忙!
现有一个用户为a,表空间为b的dmp文件,我想将其导入用户为c,表空间为d的表空间。
查了一些资料,都是提示说改变用户在表空间的权限,但是一直没改成功。
我用编辑器打开dmp文件发现里面有原表空间b的名字,我将其全部改为新表空间d,但是这个文件保存后导入时没通过字符检查
请问有什么方法能将dmp文件中的全部内容(不光是table)导入另外一个新的表空间?
以前没用过oracle,麻烦各位将操作步骤写的稍微详细一些,谢谢!

解决方案 »

  1.   

    由于你导出的表的表空间名b跟d不同命。所以可能导致,有些对象无法正常导入比如存在分区的表。导出的二进制存在着源表空间的字段。
    方法:
    再要导入的数据库中建个表空间为b的表空间
    imp c/passwd file= fromuser=a touser=c ...;
    然后在用plsql导出的sql脚本文件。修改其中的B为D再导入到d表空间中
      

  2.   

    正常导入不会有问题的收回用户c拥有的unlimited tablespace权限,再导入就会发现导入用户c的默认表空间了revoke unlimited tablespace from user_c;
    imp file=xxxxx fromuser=user_a touser=user_c log=xxxxx ....
      

  3.   

    对于特定的某几个表,可以先建表(plsql也可以导出建表sql),改变一下表空间(包括索引的表空间)
    imp导入dmp时,加上ignore=y
      

  4.   

    scott用户的emp和dept表是在users表空间的.d:\>exp scott/tiger file=test1.dmp tables=(emp,dept)Export: Release 10.2.0.4.0 - Production on 星期二 3月 24 21:13:17 2009Copyright (c) 1982, 2007, Oracle.  All rights reserved.
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集即将导出指定的表通过常规路径...
    . . 正在导出表                             EMP导出了          13 行
    . . 正在导出表                            DEPT导出了           4 行
    成功终止导出, 没有出现警告。
    d:\>sqlplus /nologSQL*Plus: Release 10.2.0.4.0 - Production on 星期二 3月 24 21:13:26 2009Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.idle> conn / as sysdba
    已连接。
    sys@TEST> create user xx identified by xx default tablespace test;用户已创建。sys@TEST> grant create session ,create table to xx;授权成功。sys@TEST> alter user xx quota unlimited on test;用户已更改。sys@TEST> exit
    从 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
    d:\>imp system/sys  file=test1.dmp fromuser=scott touser=xxImport: Release 10.2.0.4.0 - Production on 星期二 3月 24 21:16:21 2009Copyright (c) 1982, 2007, Oracle.  All rights reserved.
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options经由常规路径由 EXPORT:V10.02.01 创建的导出文件警告: 这些对象由 SCOTT 导出, 而不是当前用户已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
    . 正在将 SCOTT 的对象导入到 XX
    . . 正在导入表                           "EMP"导入了          13 行
    . . 正在导入表                          "DEPT"导入了           4 行
    即将启用约束条件...
    成功终止导入, 没有出现警告。d:\>sqlplus /nologSQL*Plus: Release 10.2.0.4.0 - Production on 星期二 3月 24 21:17:14 2009Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.idle> conn / as sysdba
    已连接。
    sys@TEST> SELECT OWNER, TABLE_NAME, TABLESPACE_NAME
      2    FROM DBA_TABLES S
      3   WHERE S.TABLE_NAME IN ('EMP', 'DEPT') AND owner='XX';OWNER                          TABLE_NAME                     TABLESPACE_NAME
    ------------------------------ ------------------------------ ------------------------------
    XX                             EMP                            TEST
    XX                             DEPT                           TESTsys@TEST> exit
    从 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
      

  5.   

    你执行imp b/password@database 然后选择导入文件后,按照提示执行,到一步需要输入用户名,你输入a
    然后顺序执行,执行完后,如果表空间不是你要的,你再改不久行了吗?
      

  6.   

    to linzhangs
    我使用你的方法导出了脚本文件,发现只有建立表结构的信息,那里面的数据我应该如何转呢?
    使用的是pl/sql的export user object功能,你是指这个功能吗?
    麻烦大家再解答一下,本人以前没用过oracle,可能问题比较白。to oracledbalgtu
    我使用你的方法,可是在导入过程中有的数据表是没问题的,但是有些表提示错误找不到原来的那个表空间,我打开过dmp文件,
    dmp文件里面含有原表空间的名称,这些含有原表空间名称的表有什么特殊性吗?谢谢大家支持,麻烦再解答一下!
      

  7.   

    to linzhangs
    我使用你的方法导出了脚本文件,发现只有建立表结构的信息,那里面的数据我应该如何转呢?
    使用的是pl/sql的export user object功能,你是指这个功能吗?
    麻烦大家再解答一下,本人以前没用过oracle,可能问题比较白。to oracledbalgtu
    我使用你的方法,可是在导入过程中有的数据表是没问题的,但是有些表提示错误找不到原来的那个表空间,我打开过dmp文件,
    dmp文件里面含有原表空间的名称,这些含有原表空间名称的表有什么特殊性吗?谢谢大家支持,麻烦再解答一下!
      

  8.   


    收回你用户的unlimited tablespace权限之后导入就会自动导入默认的表空间,不需要任何修改revoke unlimited tablespace from user_C;
    alter user user_C quota unlimited on TBS_D;
    imp file=xxxx fromuser=user_A touser=user_C ...
      

  9.   

    改用户不影响导入,表空间修改有些麻烦,试一下:
        给导入用户c授予DBA权限,然后导入后,再收回其权限,给予合适的权限是否可以?。另外,看是否可以使用DTS,先导入到SQLSERVER中,然后再导入新用户,这样对表空间应该没有限制,是可以迁移数据的。