Oracle 数据库 批量移动表空间和索引

项目中遇到,需要在原数据库的基础上更换表空间,经过多方查找,现总结最好用与最快速的方法,用于日记和大家学习!

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.问题完美解决!

猜你喜欢

转载自www.cnblogs.com/bai--xiaochun/p/12430647.html
今日推荐