已经测试过,没问题
我们在做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