按用户迁移表
迁移表sql
alter table owner.table_name move tablespace tablespace_name;
示例,操作如下:
将表空间下一个用户的所有表迁移到另一个表空间
一、查看表空间表及其大小:
1、查看表空间表及其表大小
select owner, segment_name, tablespace_name, sum(bytes/1024/1024)||'MB' from dba_extents
where tablespace_name ='USERS'
group by owner, segment_name, tablespace_name
order by 4;
2、按照用户查询表及其表大小
select owner, segment_name, tablespace_name, sum(bytes/1024/1024)||'MB' from dba_extents
where OWNER ='TEST'
group by owner, segment_name, tablespace_name
order by 4;
二、创建目标表空间并添加数据文件:
1、创建表空间(#临时表空间 CREATE TEMPORARY TABLESPACE)
CREATE TABLESPACE TEST_DATA DATAFILE '+DATA' SIZE 10G AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
2、添加数据文件(#临时表空间 ADD TEMPFILE)
ALTER TABLESPACE TEST_DATA ADD DATAFILE '+DATA' SIZE 10G AUTOEXTEND ON NEXT 2G MAXSIZE UNLIMITED;
三、修改用户默认表空间:
1、永久表空间
alter user TEST default tablespace TEST_DATA;
2、临时表空间
alter user TEST default temporary tablespace TMP_TEST_DATA;
四、按照用户拼接表迁移语句:
1、使用dba_tables查询表拼接迁移语句
select 'alter table '||owner||'.'||table_name ||' move tablespace TEST_DATA;' from dba_tables where owner='TEST';
#有的表用dba_extents能查到,也可以用,但是导出的时候报错表不存在,既然没有那就忽略吧
select distinct 'alter table '||owner||'.'||segment_name ||' move tablespace TEST_DATA;' from dba_extents where owner='TEST' ;
2、输出如下:
SQL> select 'alter table '||owner||'.'||table_name ||' move tablespace TEST_DATA;' from dba_tables where owner='TEST';
'ALTERTABLE'||OWNER||'.'||SEGMENT_NAME||'MOVETABLESPACETS_TANGRZ_DATA;'
-----------------------------------------------------------------------------------
alter table TEST.T_TAB_01 move tablespace TEST_DATA;
alter table TEST.T_TAB_02 move tablespace TEST_DATA;
alter table TEST.T_TAB_02 move tablespace TEST_DATA;
alter table TEST.T_TAB_03 move tablespace TEST_DATA;
#在数据库中执行迁移语句即可,监控一下目标表空间大小,避免空间不够导致表迁移失败
执行 “步骤一”命令验证表所在表空间是否更改。
至此结束,有什么问题欢迎留言,谢谢。