Oracle exp/imp导入不同的表空间

已经测试过,没问题

 我们在做Oracle数据库表迁移时,通常会有这种需求,在开发阶段,可能所有用户的数据都放在一个表空间中,比如users表空间,但是在生产中,我们希望将每个用户的数据分别放到不同表空间中,此时直接使用exp/imp是不具备选择表空间功能的(expdp/impdp可以),这里我们提供了一种方法来实现这种功能。

正常情况下,我们使用exp导出,再用imp导入,它会将数据导入到原来表空间中。

 我们做imp导入时,即使新建用户指定了默认表空间,也很会导入到原来的表空间中(除非原来默认的表空间已经被删除掉了,否则即便换用户也不行)

此时我们提供另一种方式来更改数据表的表空间,假设用户为test01,步骤如下:

 1、创建用户,注意一定要加默认表空间

create user test01 identified by test01 default tablespace test01;

2、赋予权限,注意不要赋予dba权限,如果实在需要可以导入后再赋权,当然导入操作可以用system来做

GRANT CONNECT TO test01;
GRANT IMP_FULL_DATABASE TO test01;
GRANT RESOURCE TO test01;

3、收回用户test01无限制表空间权限

revoke unlimited tablespace from test01;

4、将原来表空间的权限收回

alter user test01 quota 0 on USERS;

5、赋予新表空间权限

alter user test01 quota unlimited on test01;

需要注意的是,假如users表空间可以删除,则可以直接导入到新的默认表空间test01中

此时我们直接导入,发现表全部在新的默认空间中

imp system/oracle file=test01.dmp fromuser=test01 touser=test01 buffer=10240 commit=y log=imptest01.log 

我是这样导入的

imp test01/test01@你的ip/orcl full=y   file=test01.dmp

猜你喜欢

转载自www.cnblogs.com/li-sx/p/9641126.html