分类: Oracle
2009-02-03 13:48:08
根据oracle版本的不同,有以下两个途径进行表的移动:
一、版本在8i以后:
首先,使用下面的命令移动:
alter table table_name move tablespace tablespace_name;
然后,如果有索引的话必须重建索引:
alter index index_name rebuild tablespace tablespace_name;
这个方法有两个缺点:
1、若表中含有LONG类型,命令无法执行。
2、若表中需要同时移动lob相关字段的数据,就必需用如下的含有特殊参数据的语句来完成。
alter table tb_name move tablespace tbs_name
lob (col_lob1,col_lob2) store as(tablesapce tbs_name);
二、版本在8i以前:
用exp导出,然后imp导入时使用indexfile=...,生成转储文件,
然后手工修改表空间名称,最后运行这个脚本文件即可.
该方法步骤多,太麻烦。目前已经很少有人用了。
三、通用方法
有一个通用的方法可以跨版本使用,因为公司正好这个需求,参考网上的文章完成的。
环境:
OS: RH AS4
ORACLE:
oracle用户:user1
默认表空间:tbs1
表:tb1,tb2
要求:新建一个表空间tbs2,将tb2移动到tbs2中,该表仍属于用户user1(说白了就是将一个用户的多个表分散存放到不同的表空间中,这么做有什么好处可以自己琢磨。我们这么做以后,数据库性能提高了不少。)
步骤1:新建表空间tbs2,要足够大,至少和tbs1一样大,避免导入时空间不够。
步骤2:修改用户user1的配置:
步骤3:导出表tb2
exp user1/user1@db tables=tb2 file=c:\tb2.dmp
删除表tb2
步骤4:导入表tb2到表空间tbs2
imp user1/user1@db fromuser=user1 touser=user1 file=c:\tb2.dmp TABLESPACES=tbs2 log=c:\imp.log
导入完成后,将用户user1的默认表空间仍改回tbs1,同时加上Unlimited tablespace权限。