首页 > 技术文章 > ORACLE表批量迁移表空间

Memories-off 2019-02-26 09:21 原文

第一步:将表迁移到目标表空间
 1)使用如下语句,可以将需要移动的表空间语句在pl/sql中列出来,
select 'alter table ' ||table_name || ' move tablespace 目标表空间名称;' from user_all_tables where tablespace_name='源表空间名称'
例如:
登录数据库用户TEST。将TEST所有表从SYSTEM表空间迁移到USERS表空间。
select 'alter table ' ||table_name || ' move tablespace users;' from user_all_tables where tablespace_name='SYSTEM';
将PL/SQL中列出来的语句执行一次,就完成表的迁移。

2)将上面语句的结果拷贝到sql文件1.sql中
第二步:重新生成索引:
1)使用如下语句,生成重新编译索引语句:
SELECT 'alter index ' || index_name || ' rebuild tablespace users;'
  FROM user_indexes
 WHERE index_type = 'NORMAL'
   AND table_owner = 'SDHY_DEV'
   AND dropped = 'NO';
注意:
index_type包括两种类型'NORMAL'为普通表,'LOB'为blob或者clob字段生成的索引,在这里要排除掉
 DROPPED包括YES和NO两种类型,为YES时是废弃的索引
2)将上面语句的结果拷贝到sql文件2.sql中
第三步:批量执行操作:
将第一步与第二步列出的语句放在SQL执行窗口中执行,就可以实现表数据及索引迁移。

推荐阅读