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
这时候我们就可以修改表空间为USERS的两个表所属的表空间
2、确认需要修改的批量组装成修改SQL语句
SELECT 'alter table '||TABLE_NAME||' move tablespace FCCMS;' FROM USER_TABLES WHERE TABLESPACE_NAME = 'USERS'
得到如下结果
现在我们赋值查询结果,粘贴至命令框进行执行
3、执行表空间修改
4、查看修改结果
成功!
修改表索引同上
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);
三、源库新库都将表移到新的表空间后(最好新库和源库表空间一样,这样省去很多麻烦,尤其数据量大时),在进行数据导库。原问题解决。