(ORACLE10g)
多个系统,每个系统对应一套独立的表结构。但是数据库服务器只有一台,如果在一台机器上创建多个数据库,内存压力比较大。所以可以采用在一个数据库上建立多个用户,每个用户对应一个系统的方式。oracle10默认表空间是USERS,如果每个用户都建立一套表结构,且都存放在USERS表空间上,这种方式肯定是不好的,几个系统的表都用一块地址存放,不利于维护;也会造成IO使用冲突;影响性能;备份、还原、管理都有问题;且USERS表空间出现问题,几个用户的数据都挂掉了。所以好的方式应该是每一个用户都建立一个单独的表空间。
现在在机器2上建立了一个数据库DB2,建立了一个用户user2,建立了一个表空间tspace2,且将该表空间设为user2的默认表空间,再给用户user2赋予权限。
create user user2 identified by 123456;
grant resource,connect, IMP_FULL_DATABASE to user2;
alter user user2 default tablespace tspace2 quota unlimited on tspace2
这时,从机器1上导出一个db.dmp文件,机器1是用user1用户,在默认表空间USERS上执行exp导出的。
现在在机器2上执行
imp user2/123456@DB2 file=db.dmp full=y ignore=y
发现导入后,还是导入到了DB2的默认表空间USERS上。
解决方法:
收回用户user2的"UNLIMITED TABLESPACE"权限;将user2在USERS表空间的使用限额设为0:
revoke unlimited tablespace from user2;
alter user user2 quota 0 on users;
这时,数据就被导入进了user2的默认表空间tspace2。
----------------------------------------------------------------------------------------------------------------------------------------------------------
但又有点小问题出现,错误如下:
IMP-00017: 由于 ORACLE 错误 1536, 以下语句失败:
"CREATE TABLE "RE_TEMPLATE" ****************“
IMP-00003: 遇到 ORACLE 错误 1536
ORA-01536: 超出表空间 'USERS' 的空间限额
查找原因发现是含用blob,clob类型字段的表无法导入成功。
解决方法:
用建表语句脚本,先将含有blob,clob类型的表建立出来,这时再执行导入,发现导入成功,全部表结构都导入进user2的默认表空间tspace上。注意使用参数ignore=y