用户: whnaproject 所属表空间: whnaproject
新用户 : wniec 所属新表空间: wniec
要求:将用户whnaproject中的数据库表以及数据 ,全部复制到 新表空间wniec的 wniec用户中。
常规过程:用exp命令把用户whnaproject的表及数据导出,然后用IMP命令把导出的表及数据导入到新用户wniec中。
存在问题:用户whnaproject的表及数据可以导入到新用户wniec中,但wniec中的导入的表所属的表空间还是原来导出用户whnaproject的所属表空间whnaproject ,而不是我想要的新表空间wniec。
解决方法:
1. select * from user_tables 可以查询出当前用户所属表的所属表空间信息。
2. 修改用户表table的表空间:alter table 表名 move tablespace 新表空间名;可以采用批量更新的方式,如下:
select 'alter table '||table_name||' move tablespace wniec;' from user_tables where tablespace_name <>'wniec'
这样能保证表结构及数据都能转移到新的表空间中,其它一些方式只能转移表结构,数据无法复制过来。
3. 如果用户表中的字段类型含有 “LONG”、“BLOB”、"CLOB",则该类表不能直接采用上述MOVE语句移动。如果表无数据,则直接重建表时,修改表空间即可。如有数据可参考4、5两种方式处理。
4. 字段类型为 “LONG”的表不能采用MOVE方式处理,只能采用COPY方式处理,还未验证。
5. “BLOB”、"CLOB"为LOB类型,可参照下面该类型的处理方式进行移动,还未验证。
注意事项:
1.move操作只能在数据库空闲的时候。
2.move以后记得重建index。
3.move表空间会改变rowid,如果程序中使用其运算,可能产生奇怪的问题,且很难恢复