ORACLE 修改表所属表空间

 
解决方法1
alter table xxx move tablespace xxx;
move过table以后索引会丢失,所以还重建索引,先查找失效的索引
select index_name from user_indexes where status = 'UNUSABLE' 
alter index xxxx rebuild;
 
这个方法缺点是对于表较多的库会非常麻烦,要move多个表rebuild很多索引
最大的缺点是不能move入带有long字段的表。
 
解决方法2
思路,给需要导入的用户dba权限,再取消这个用户的tablespace ulimited权限,让这个用户在SYSTEM表空间的使用空间的size为0,再允许这个用户有需要导入的表空间的ulimited权限(当然足够大小的size权限也行),记得commit
然后再用这个用户导入dmp文件,这样所有表都会导入到指定表空间了,导入完毕再取消这个用户的dba权限
CREATE USER loli
IDENTIFIED BY "loli"
DEFAULT TABLESPACE LOLI
TEMPORARY TABLESPACE TEMP
ACCOUNT UNLOCK 
PROFILE DEFAULT; 
grant CONNECT to loli;
grant resource to loli;
GRANT dba TO loli;
REVOKE UNLIMITED TABLESPACE FROM loli;
alter user loli quota 0 on SYSTEM;
alter user loli quota unlimited on LOLI;
commit;
 
$imp file='xxx' fromuer='xx' touser='xx' tablespace='xxx'
 
最后
REVOKE dba FROM loli;
 
第三个
重建表,重新指定表空间
posted @ 2012-08-14 15:16  忆~  阅读(1546)  评论(0编辑  收藏  举报