Oracle dmp文件导入(还原)到不同的表空间和不同的用户


方法一(常用):

导出原表空和原用户的数据表结构(不含数据rows=n 表示不导出数据)。
exp \'sys/pwd@orcl as sysdba\' file=xx.dmp buffer=65535 owner=user rows=n

导出原表空间和原用户的数据库表及全部数据
exp \'sys/pwd@orcl as sysdba\' file=xx.dmp buffer=65535 owner=user rows=y

导入数据表,更换新用户和表空间, 加tablespaces=newtablespaces 参数
imp \'sys/pwd@orcl as sysdba\' file=xx.dmp fromuser=user1 touser=user2 ignore=y tablespaces=newtablespaces log=xx.log
 
注意:
1.导入时如果不加参数 tablespace=XXX,总是报错:ORA-01950:对表空间无权限。
2. 对临时表空间不能执行配额操作,对永久表空间可以。

 

方法二:

导出命令

expdp username/password@orcl dumpfile=xxx.dmp directory=xxxxx schemas=username

导入命令
  impdp onlinecolzs/onlinecozs dumpfile=XXX.dmp directory=dpdata1 remap_schema=onlinecol:onlinecolzs remap_tablespace=ts_onlinecol_prod:zaixianzs_data logfile=xxx.log
  参数说明
  dumpfile:需要导入的dmp文件名称
  directory:dmp文件所在的目录文件夹
  REMAP_SCHEMA: 该选项用于将源方案的所有对象装载到目标方案中。 REMAP_SCHEMA=source_schema:target_schema
  REMAP_TABLESPACE: 将源表空间的所有对象导入到目标表空间中。  REMAP_TABLESPACE=source_tablespace:target:tablespace 

具体步骤:
   1、创建表空间和用户。
   2、创建目录
      create directory dpdata1 as 'D:\tempdmp'
   3、查询目录
      select * from dba_directories;
      把dmp文件复制到刚才创建的目录文件夹下(D:\tempdmp),这个文件夹需要自己手动创建。
   4、执行impdp导入命令:
      impdp onlinecolzs/onlinecozs dumpfile=XXX.dmp directory=dpdata1 remap_schema=onlinecol:onlinecolzs remap_tablespace=ts_onlinecol_prod:zaixianzs_data log=xxx.log
      其中:ts_onlinecol_prod:原先dmp文件的表空间名称,如果不知道原先的表空间名称是什么,先随便写个,到时候导入的时候会提示表空间不存在,把提示不存在的表空间名称写上去就可以。
            zaixianzs_data:需要导入到的表空间的名称(第一步创建的表空间名称)