oracle数据库导库问题

 

一、DMP导库过程中,数据量小的表导入成功,到数据量大的表时开始报错。发现原库的表空间是USERS,导入新库后默认表空间是USERS,根据错误提示查看新库的的表空间USERS空间不大。采取源库、新库的表空间更换。

IMP-00058: 遇到 ORACLE 错误 1653
ORA-01653: 表 ZRZYK.HY_DP_C 无法通过 1024 (在表空间 USERS 中) 扩展
IMP-00028: 上一个表的部分导入已回退: 回退 2198322 行
. . 正在导入表                     "HY_DP_C_1"
IMP-00058: 遇到 ORACLE 错误 1653
ORA-01653: 表 ZRZYK.HY_DP_C_1 无法通过 128 (在表空间 USERS 中) 扩展
IMP-00028: 上一个表的部分导入已回退: 回退 31171 行
. . 正在导入表                      "HY_DQS_C"
IMP-00058: 遇到 ORACLE 错误 1653
ORA-01653: 表 ZRZYK.HY_DQS_C 无法通过 128 (在表空间 USERS 中) 扩展
IMP-00028: 上一个表的部分导入已回退: 回退 25021 行
. . 正在导入表                    "HY_DQS_C_1"
IMP-00058: 遇到 ORACLE 错误 1653
ORA-01653: 表 ZRZYK.HY_DQS_C_1 无法通过 128 (在表空间 USERS 中) 扩展
IMP-00028: 上一个表的部分导入已回退: 回退 21201 行
IMP-00009: 导出文件异常结束

二、新库源库更换表空间具体应用以下方式。

 原文链接:https://blog.****.net/baby2susan/article/details/81346962。

 1、查看表当前所属表空间

 

SELECT TABLE_NAME,TABLESPACE_NAME FROM USER_TABLES  -- WHERE TABLE_NAME='test' --可以加上条件

        比如我们看到我的库里有两个表表空间是USERS,而非我们自建的FCCMS

oracle数据库导库问题

        这时候我们就可以修改表空间为USERS的两个表所属的表空间

 

        2、确认需要修改的批量组装成修改SQL语句

 

SELECT 'alter table '||TABLE_NAME||' move tablespace FCCMS;' FROM USER_TABLES WHERE TABLESPACE_NAME = 'USERS'

        得到如下结果

oracle数据库导库问题

        现在我们赋值查询结果,粘贴至命令框进行执行

 

        3、执行表空间修改

oracle数据库导库问题

        4、查看修改结果

oracle数据库导库问题

        成功!

        修改表索引同上

 

SELECT 'alter index '|| INDEX_NAME ||' rebuild tablespace FCCMS;' FROM user_indexes;

        PS:这里需要注意TEST2表里包含的CLOB字段,针对Clob、Blob字段需单独做修改处理 

 

ALTER TABLE TEST2 MOVE TABLESPACE USERS LOB(col_lob1,col_lob2) STORE AS(TABLESPACE FCCMS);

 

三、源库新库都将表移到新的表空间后(最好新库和源库表空间一样,这样省去很多麻烦,尤其数据量大时),在进行数据导库。原问题解决。