【expdp】数据泵重新映射表空间

xixuefeng Oracle, Utilities 2013-01-24 21:23:45 821 次浏览 【expdp】数据泵重新映射表空间已关闭评论

我们都知道system表空间我们最好是不要使用,可是万一就有些表不小心使用了system表空间,那么该如何处理呢?

方法有很多,刚刚测试了一下利用数据泵重新映射表空间的功能,还是很方便的。

1:创建测试用户及相应测试表(测试表T1使用system表空间,T2使用users表空间)

2:准备数据泵环境,创建目录并将目录的相应权限赋予xxf用户

3:利用数据泵导出schema

4:删除测试用户xxf,并重新创建xxf用户,同时将目录的权限赋予xxf用户

5:利用数据泵,将dmp文件导入刚刚创建的xxf用户(注意,本次导入使用了表空间的映射)

6:验证,system表空间已经完美的转换为users表空间

小结:

1:这种方法比较适合数据相对较多的数据迁移场景。

2:另外转换表空间的方法很多,比如可以通过exp导出,然后在目标库先把所有的创建上,在创建的时候,指定正确的表空间,在imp的时候,使用ignore=y来忽略创建错误

3:如果网络是连通的,也可以通过dblink直接写入等等,不过这些办法都适合那些数据相对较少的场景

4:往往还有这种情况,不是数据迁移,而是当前环境中的某些表使用了system表空间,那么可以采用move的方式转换表空间(不过需要注意的是,move以后,行地址都发生了变化,需要重新rebuild索引,还有,move的时候,会影响表的正常使用),当然,10g以后还有一个功能叫在线重定义,很好的解决了move的缺陷,不过相对move来说,使用起来不如move方便。

其实,这些问题最好的解决办法是从根上解决,那就是,在创建用户的时候,一定要指定SYSAUX和SYSTEM表空间的限额为0,这样,就彻底解决了误使用SYSTEM的“尴尬”情况。

回顶部