近日做ODI迁移时,做数据库的导入报错,原因是导出库和导入库的表空间不一样,exp/imp报错咯。
后来通过expdp/impdp实现数据表空间的转移。
具体步骤如下:
1、使用sys用户登录,在导出库和导入库中分别创建directory
create or replace directory expdir as '/home/oracle/'
create or replace directory DPUMPDIR as '/home/oracle/upload/'
2、将directory的读写权限授权给导出、导入用户
grant read,write on directory DPUMPDIR to JJE_ODI_REPO;
grant read,write on directory DPUMPDIR to snpw;
3、导出、导入时需要登录服务器执行expdp/impdp,原因为expdp和impdp为服务器命令。
expdp QA_SOA/oracle$testdb directory=expdir dumpfile=WORKBACK.DUMP
impdp snpw/oracle$esbdb directory=DPUMPDIR remap_schema=QA_SOA:SNPW remap_tablespace=DEV_ODI_USER:JJE_ODI_USER dumpfile=WORKBACK.DUMP
其中impdp的两个参数remap_schema和remap_tablespace是进行shema和表空间转换的。使用方法为:remap_schema=QA_SOA:SNPW 含义为将数据从Schema:QA_SOA导入Schema:SNPW,使用方法类似imp中的fromuser=QA_SOA touser