举个例子说明下表空间之间如何迁移:
在一个数据库上实例的前提下,
正式表空间EHR,正式用户EHR,
测试表空间EHRTEST,测试用户EHRTEST,并且也指定了表空间跟用户的对应关系。
当通过EXP命令把EHR用户的对象导出后,再通过IMP命令以EHRTEST用户导入数据时,实际上对象还是保存在EHR的表空间上了!!!也就是说在建用户时即使给EHRTEST用户指定了EHRTEST表空间,但IMP命令还是默认往当时生成导出文件时使用的EHR的表空间导入数据。
也就是说正式环境的表空间(EHR)中包含了2套用户(EHR、EHRTEST)的对象。
这一点可以通过ORACLE管理器上“存储”-》“表空间”,通过表空间的已使用情况看出;也可以通过“方案”,找到测试用户,直接双击表可以看到“表空间”;
通过查资料、试验,整理出如下解决方案
当EHRTEST表空间已经建立后,通过执行下面的脚本,强制使导入数据时使用EHRTEST表空间:
--创建EHRTEST用户并指定使用EHRTEST表空间;
create user EHRTEST identified by EHRTEST default tablespace EHRTEST temporary tablespace temp;
--给EHRTEST用户分配基本权限
grant connect,resource to EHRTEST;
grant dba to EHRTEST;
revoke unlimited tablespace from EHRTEST;
grant dba to EHRTEST;
revoke unlimited tablespace from EHRTEST;
--去掉EHRTEST用户使用EHR表空间上的空间限量
alter user EHRTEST quota 0 on EHR;
--设定EHRTEST用户在EHRTEST表空间上的无限空间限量
alter user EHRTEST quota unlimited on EHRTEST;
上面的脚本执行完后就可以通过命令行导入数据
imp EHRTEST /EHRTEST file=c:\ehr0320.dmp fromuser=ehr touser=EHRTEST grants=n
这时我们看到EHRTEST用户的所有对象确实保存到EHRTEST表空间了。但在导入时可能还遇到一个问题(呵呵,问题还真不少),那就是有些表可能会出现如下的错误:
IMP-00003: 遇到 ORACLE 错误 1536
ORA-01536: 超出表空间'EHR'的空间限量
IMP-00017: 由于 ORACLE 的 1536 错误,以下的语句失败
ORA-01536: 超出表空间'EHR'的空间限量
IMP-00017: 由于 ORACLE 的 1536 错误,以下的语句失败
导致这个错误的原因是在使用CBLOB,BLOB字段类型时,这种方式导入会有点问题,那么只能在导入数据前,先把那些有CBLOB,BLOB字段类型的表的创建脚本先执行一遍,然后再在命令行执行下面命令导入数据
imp EHRTEST /EHRTEST file=c:\ehr0320.dmp fromuser=ehr touser=EHRTEST grants=n ignore=y
注意多了个ignore=y参数,因为有CBLOB,BLOB字段类型的表在导入前已经创建,导入时要忽略再次创建表结构的错误
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12158104/viewspace-259870/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12158104/viewspace-259870/