项目中遇到,需要在原数据库的基础上更换表空间,经过多方查找,现总结最好用与最快速的方法,用于日记和大家学习!
1.创建新的表空间.
2.替换原有表空间;
select replace(wm_concat('alter table '|| table_name|| ' move tablespace 新建的表空间;'),',',chr(13)) from user_tables where tablespace_name = '原表空间'
通过以上sql查询出所有需要转移的表的运行sql ,复制出内容,直接执行即可将表空间替换;
3.修改表空间不能只将表转移过去,这样会报错;java.sql.BatchUpdateException: ORA-01502: 索引 'BEBP.SYS_C0029237' 或这类索引的分区处于不可用状态,通过错误可以看出表中的所有索引无法使用,导致报错.所以,还需要将原表空间的表的索引同样转移过去/或者重新创建需要的索引
4.创建表索引;(我使用了创建新的索引)
select 'alter index '||index_name||' rebuild tablespace 新建的表空间;' from user_indexes
通过该sql查询出新建表空间所缺的索引,并批量生成创建索引的sql语句.
5.执行内容复制出来执行即可,创建全部所需索引/
6.问题完美解决!
扫描二维码关注公众号,回复:
9626640 查看本文章