Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226652
  • 博文数量: 26
  • 博客积分: 1435
  • 博客等级: 上尉
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-15 16:11
文章分类

全部博文(26)

文章存档

2014年(1)

2013年(2)

2012年(1)

2011年(1)

2010年(2)

2009年(11)

2008年(3)

2006年(3)

2005年(2)

我的朋友

分类: 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:10.2.0.1 单机

oracle用户:user1 

默认表空间:tbs1

表:tb1tb2

要求:新建一个表空间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权限。

阅读(6152) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~