ORA-00959: tablespace 'TBS_LZL_OLD' does not exist

impdp错误如下:
IMP-00017: following statement failed with ORACLE error 959:
...
 "DUIF1" LOGGING NOCOMPRESS )"
IMP-00003: ORACLE error 959 encountered
ORA-00959: tablespace 'TBS_LZL_OLD' does not exist
IMP-00017: following statement failed with ORACLE error 959:

错误显示表空间不存在
一般来说,这个问题应该是源端表空间存在,但是没有在目标端创建表空间,引起这个报错,只要创建好表空间,再执行导入就解决了。


但是,这里属于一个特殊情况,源端表空间也不存在,也就是TBS_LZL_OLD在源库中都不存在。

查询用户的默认表空间(实际上impdp导入表跟用户默认表空间没什么关系)
SQL> select USERNAME,DEFAULT_TABLESPACE from dba_users where USERNAME='USER_LZL';

USERNAME                       DEFAULT_TABLESPACE
------------------------------ ------------------------------
USER_LZL                       TBS_LZL_DUIF1

查询建表语句
 CREATE TABLE "USER_LZL"."TI_LZL_SUB"
   (    "TRADEID" NUMBER(32,0) NOT NULL ENABLE,
 ...
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_LZL_OLD"  LOCAL
  
查询源库中这个表的段存在哪
SQL> select OWNER,SEGMENT_NAME,PARTITION_NAME,TABLESPACE_NAME from dba_segments where OWNER='USER_LZL' and SEGMENT_NAME='TI_LZL_SUB';

OWNER                          SEGMENT_NAME                                                       PARTITION_NAME                 TABLESPACE_NAME
------------------------------ --------------------------------------------------------------------------------- ------------------------------ -------------------------
USER_LZL                       TI_LZL_SUB                                                            PAR_TI_LZL_SUB_9   TBS_LZL_HDUIF1
USER_LZL                       TI_LZL_SUB                                                            PAR_TI_LZL_SUB_8   TBS_LZL_HDUIF1
USER_LZL                       TI_LZL_SUB                                                            PAR_TI_LZL_SUB_7   TBS_LZL_HDUIF1
USER_LZL                       TI_LZL_SUB                                                            PAR_TI_LZL_SUB_6   TBS_LZL_HDUIF1
USER_LZL                       TI_LZL_SUB                                                            PAR_TI_LZL_SUB_5   TBS_LZL_HDUIF1
USER_LZL                       TI_LZL_SUB                                                            PAR_TI_LZL_SUB_4   TBS_LZL_HDUIF1
USER_LZL                       TI_LZL_SUB                                                            PAR_TI_LZL_SUB_3   TBS_LZL_HDUIF1
USER_LZL                       TI_LZL_SUB                                                            PAR_TI_LZL_SUB_2   TBS_LZL_HDUIF1
USER_LZL                       TI_LZL_SUB                                                            PAR_TI_LZL_SUB_12  TBS_LZL_HDUIF1
USER_LZL                       TI_LZL_SUB                                                            PAR_TI_LZL_SUB_11  TBS_LZL_HDUIF1
USER_LZL                       TI_LZL_SUB                                                            PAR_TI_LZL_SUB_10  TBS_LZL_HDUIF1
USER_LZL                       TI_LZL_SUB                                                            PAR_TI_LZL_SUB_1   TBS_LZL_HDUIF1

也就是说这个表存储在TBS_LZL_HDUIF1表空间,但是ddl语句定义在TBS_LZL_OLD表空间。(所有跟用户默认表空间没关系)
TBS_LZL_HDUIF1表空间存在,但是TBS_LZL_OLD不存在。

impdp在导入表的元数据时的本质就是提取表的ddl语句在目标端中执行一次,所以impdp会报表空间不存在的错误


解决办法:
1.创建那个不存在的表空间,让ddl编译过去,但是实际上这个表空间不会被使用
2.提取ddl语句,手动更改ddl语句中的表空间,然后到目标端执行(不通过数据泵导元数据)
3.使用remap_tablespace参数

最简单方法就是3.使用remap_tablespace参数,把表空间转换到一个存在的表空间即可,比如TBS_LZL_HDUIF1
如下:
impdp  \'/ as sysdba\' DIRECTORY=AWR_EXTR DUMPFILE=LZL_TBS.dmp logfile=LZL_TBS.log   schemas=USER_LZL remap_tablespace=TBS_LZL_OLD:TBS_LZL_HDUIF1

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuzhilongDBA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值