0
点赞
收藏
分享

微信扫一扫

不得不说的秘籍--用Imp导入到不同的用户的表空间中。


  • 作者:​​三十而立​​


 

 

imp导入表空间更换的实例过程


有时候,我们exp了一个数据dump,但是我们再imp的时候,想把原来用户的表空间进行切换,

这时一个很常见的问题,我经常见到csdn里的朋友提出这样的问题。



现在我们来做一个完全的exp和imp的过程,在这个过程中我们将把原来test2的schema导出来,


然后导入到test3的用户里,test2的用户的默认表空间是test2, 而test3的用户的默认表空间是test3.



我们先来看看,我的测试数据吧。



这里可以看到我们现在使用的用户是test2




用户test2的默认表空间是TESTTS2




在test2里现在总共有三个表,表的表空间是TESTTS2



现在我们导出我们需要的test2的schema,进行逻辑备份,然后准备好逻辑备份以后,我们将用这个逻辑备份


用imp来进行对test3用户的逻辑恢复



exp如下



导出文件test.dump



现在我们来建立我们的test3的用户吧。 根据我们的实验要求,我们的test3用户的默认表空间是TESTTS3


和test2用户的表空间不一致,这样才可以才是我们的目的,如果是TESTTS2到TESTTS2,


就没有技术可言了。 大家顺便就可以完成了。我们现在建立test3用户。



命令如下



这里我们只是做一个简单的实验,所以我这里表空间的datafile的设置,只是个sample而已,


具体的设置应该以你的实际情况为准。




建立新的用户test3,默认表空间是TESTTS3




现在我们常规的导入的话


是会有提示告诉我们没有权限的。因为我们还没有个test3附上权限,不过我们这里如果给了unlimit tablespace的权限的话,这里test3的imp将不会把表导入到test3的默认表空间TESTTS3里,而是TESTTS2里,这里是由于 imp的原理是先按exp里的表空间来建对象,


如果表空间建立不成功,会用其默认表空间来导入,



所以我们按照这个原理来实现我们的目标了。



先附上必须的权限。



这里附上了我们经常用到的connect和resource的权限,这里如果导入就是常规导入,由于resource包括unlimited tablespace的系统权限,所以这里如果不做其他的处理是会导入到TESTTS2里的,而不是我们需要的TESTTS3



我们需要处理一下:



这里我们先revoke了unlimited tablespace的权限,这样test3的用户就不能access其他的表空间了


我们有alter了test3的quota 0 on TESTTS2使得用户test3可以访问TESTTS2,但是有没有配额


最后我们有在TESTTS3上给了test3用户配额,这样在TESTTS2上建立不了,就建立到TESTTS3上去了



下面我们imp一下,看看我们imp吧




imp成功,验证一下我们的对象是不是在TESTTS3的表空间上去了吧




到此,整个过程完全成功了,你可以取消到test3刚才的配额的一些设置了。 


 

 




 


  • 如果没有那句“三十而立”,三十岁的男人正可以轻轻松松



 

举报

相关推荐

0 条评论