oracle impdp 变动用户、表空间
- 引言:
expdp 'sys/123456 AS SYSDBA' directory=dump_dir dumpfile=mz_schema_%U.dmp logfile=mz_schema_2016.log schemas=HCPROD
impdp 'sys/HCPROD AS SYSDBA' directory=dir_dir dumpfile=mz_schema_%U.dmp logfile=impdp_mz_schema_2016.log schemas=HCPROD table_exists_action=replace remap_talespace=qz_prod:users
expdp 'sys/HCPROD AS SYSDBA' directory=dump_dir dumpfile=accaddr_mz_schema_%U.dmp logfile=accaddr_mz_schema_2016.log schemas=HCPROD
impdp 'sys/HCPROD AS SYSDBA' directory=dump_dir dumpfile=accaddr_mz_schema_%U.dmp logfile=impdp_accaddrdemo_mz_schema_2016.log schemas=HCPROD table_exists_action=replace
***************************************************************************
本人遇到ORA-00959: tablespace 'qz_prod' does not exist(表空间不存在)这个问题的背景:
源数据库里的HCPROD用户使用了表空间qz_prod,而目标数据库里不存在表空间qz_prod。
故而执行impdp 'sys/HCPROD AS SYSDBA' directory=dir_dir dumpfile=mz_schema_%U.dmp logfile=impdp_mz_schema_2016.log schemas=HCPROD table_exists_action=replace时,提示ORA-00959: tablespace 'qz_prod' does not exist(表空间不存在),此时就需要调整REMAP_SCHEMA参数。
改为
impdp 'sys/HCPROD AS SYSDBA' directory=dir_dir dumpfile=mz_schema_%U.dmp logfile=impdp_mz_schema_2016.log schemas=HCPROD table_exists_action=replaceremap_talespace=qz_prod:users
注释:
以schemas作业模式执行expdp时,expdp不会创建表空间qz_prod的对象类型到导出文件里,这样,impdp时就不能导出文件里的表空间qz_prod的对象类型来在目标数据库里创建一个名为qz_prod的表空间这个数据库对象。而目标数据库里又不存在表空间qz_prod。所以,执行impdp时,就会提示ORA-00959: tablespace 'qz_prod' does not exist(表空间不存在)。
只要参数schema、参数tablespace、参数table(以及其他数据库对象类型)三种作业模式的值是expdp时存在的,expdp都会为这些值创建对应的对象类型(即数据库对象的元数据)。也就是说,参数schema,对应创建的对象类型包含有用户元数据;参数tablespace,对应创建的对象类型包含有表空间元数据(和用户<