免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1266 | 回复: 0
打印 上一主题 下一主题

oracle下表所在表空间修改 [复制链接]

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 09:48 |只看该作者 |倒序浏览
imp后经常发现即使指定了fromuser和touser以及tablespace,最后却发现表还是导入了system表空间,一开始以为是用户名称、表空间大小写不对导致,后来发现是其他原因

由于之前的数据库创建的用户有dba权限又没有指定默认表空间(导致默认表空间为system),或者建表的时候指定了表空间为system
由于这些表是dba用户导出的,又只能被dba导入
所以导致导入数据库的时候,这些表又回到了system表空间

解决方法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;


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP