表空间的迁移

举个例子说明下表空间之间如何迁移:
 
在一个数据库上实例的前提下,
正式表空间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;

--去掉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 错误,以下的语句失败
 
导致这个错误的原因是在使用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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值