用expdp/impdp
导入时指定remap_tablespace参数来转换表空间

解决方案 »

  1.   

    LZ可以考虑只导有用的schema,全库导会有很多错误。
      

  2.   

    担心会有遗漏,怎么挑选有用的schema啊
      

  3.   

    1. 创建directory
    在两端数据库都要创建一个目录,用来操作dump file
    例如,用system用户
    create directory dmpdir as 'd:\';
    在不同的机器上文件路径要改成对应的,并确认路径存在,且oracle对应的用户拥有操作权限2. 导出。
    找出对应的用户
    select username from dba_users order by created;
    找出需要的表空间
    select tablespace_name from dba_tablespaces;在要导出的那台服务器上(数据泵expdp/impdp都需要在数据库服务器端进行)
    执行以下命令(在dos中,%要用%%来代替。schemas后面的参数用要导出的用户的用户名代替,多个用户间用逗号隔开)
    expdp system/密码 directory=dmpdir dumpfile=DBDATA_%U.DMP logfile=expdp.log schemas=用户1,用户2....  parallel=43. 将生成的dmp文件拷贝到目标数据库服务器上,并且存放到这个数据库中创建的directory 对应的路径里,保证用户有文件上的操作权限
    4. 执行导入
    impdp system/密码 directory=dmpdir dumpfile=DBDATA_%U.DMP logfile=impdp.log remap_tablespace=原表空间1:对应要导入的表空间1,原表空间2:对应要导入的表空间2... parallel=4如果两边数据库的小版本不一致,则最好在语句中增加一个参数version,例如version=10.2.0.3.0
    值用两个数据库中版本较低的那个
      

  4.   

    LZ可以用dba_table, dba_objects, 看看应用用的表,索引都是在那个用户下。