在使用oracle的 exp 和imp 导出导入的时候。有时遇到,需要导入的数据不是同一个用户的,也不一定是同一个表空间。
例如,源数据库,上用户为aaa,表空间aa 目标数据库 ,用户为bbb 表空间bb 当用imp导入以后查看发现,bbb没有aa这个表空间,但是还是导入进去了,不过全部都跑到了users里面。这种情况时常有发生,特别是迁移数据库的时候。那么为了更好的管理表空间和数据表,可以采用下面的方式。
连接目标数据库
oracle@UCITDB:~> sqlplus /nolog SQL
*Plus: Release 10.2.0.1.0 - Production on Fri Oct 15 16:14:29 2010 Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> CONN /AS SYSDBA Connected.
SQL> revoke unlimited tablespace from ucitdba;
Revoke succeeded. 删除该用户的表空间使用限制
SQL> alter user ucitdba quota 0 on users;
User altered. 修改表空间使用参数
SQL> alter user ucitdba quota unlimited on ucit;
User altered. 将目标表空间的无限制使用权限赋给用户
SQL> quit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production With the Partitioning, OLAP and Data Mining options
imp ucitdba/111111 fromuser=ucitdba touser=ucitdba file=/opt/oracle/oradata/backup/ucit_20101015.dmp tablespaces=ucit grants=y
具体地址根据自己的设置修改,之后回车搞定
如果出现了tablespaces的错误。那么是因为dmp文件中还有大量的创建表的命令中含有表空间users 可以使用 UltraEdit 将 tablespaces "USERS" 替换成 你的表空间,保存后,重新导入。