利用expdp/impdp实现表空间转移功能

近日做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=SNPW;remap_tablespace=DEV_ODI_USER:JJE_ODI_USER 含义为从将表空间从DEV_ODI_USER转移为JJE_ODI_USER。

常见报错:

1、没有给导入、导出用户对directory授权读写

2、在客户端进行导入、导出操作,常见图片中的错误

利用expdp/impdp实现表空间转移功能_第1张图片

 

另外,网上有一种转移表空间的方法,即还是可以使用exp /imp的命令实现:

1、将目标库的A表空间重命名,与源库的表空间B名字保持一致

2、使用exp/imp命令,进行源库导出,目标库导入

3、将目标库表空间重命名,命名为A

DBA Vicky说这种方式也是可行的,但是总觉得麻烦,而且正式库这么操作,让人担心,

第一种方法据说速度快,而且跨字符集也没问题,还是第一种操作方法好。
 

你可能感兴趣的:(数据库,schema,user,服务器,SOA)