Oracle 表空间迁移

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wwlhz/article/details/73799981

随着数据库的数据量越来越大,需要把数据量比较大的表单独放在独立的表空间。

1.创建新的临时表空间


create temporary tablespace rdp_temp 
tempfile '/data/tablespace/rdp_temp.dbf' 
size 500m 
autoextend on 
next 500m maxsize unlimited 
extent management local;

2.创建新的表空间

create tablespace rdp_data 
logging 
datafile '/data/tablespace/rdp_data.dbf' 
size 500m 
autoextend on 
next 500m maxsize unlimited 
extent management local
SEGMENT SPACE MANAGEMENT AUTO;

3.查询表原来的表空间


select index_name, tablespace_name from user_indexes where table_name='RDP_TB';
  1. 修改表所在的表空间

alter table RDP_TB move tablespace RDP_DATA;

这样就不需要再导入数据了。

如果是分区表,这样操作就会报错,分区表会对应多个paritions,甚至是子分区,需要把这些分区也迁移过去。


/*修改默认表空间*/
alter table RDP_TB_NEW  modify default attributes tablespace RDP_DATA;

自动生成分区导入语句:

SELECT    'alter table '
       || table_name
       || ' move  PARTITION '
       || partition_name
       || ' tablespace rdp_data;'
  FROM USER_TAB_PARTITIONS
 WHERE SUBPARTITION_COUNT = 0 AND table_name='RDP_TB_NEW';

执行生成的sql语句。

5.修改表索引的表空间

生成索引的sql语句

SELECT 'ALTER INDEX '
    || INDEX_NAME 
    || ' REBUILD TABLESPACE RDP_DATA;' 
FROM user_indexes 
WHERE TABLE_NAME = 'RDP_TB_NEW'  AND TABLESPACE_NAME = 'USERS';

http://blog.csdn.net/leandzgc/article/details/12585459
http://blog.sina.com.cn/s/blog_5f39af320101bceb.html
http://www.cnblogs.com/netuml/archive/2013/09/06/3304841.html
http://blog.csdn.net/starnight_cbj/article/details/6792364
http://blog.chinaunix.net/uid-20802110-id-2105656.html

猜你喜欢

转载自blog.csdn.net/wwlhz/article/details/73799981