您的位置:首页 > 数据库 > Oracle

oracle 数据表 表空间迁移

2014-01-11 12:02 169 查看
数据库经常会由于规划不好或者一些其他原因导致用户的表建在system表空间的情况,这样会导致system表空间急剧膨胀而且无法缩小,并引发性能上的问题。因此建议对客户的所有数据库进行检查,并把数据表都挪到别的表空间。已经膨胀很大的system表空间的客户,建议重做数据库,并检查代码创建表的时候必须建在指定的表空间下。这样的好处是以后可以统一管理数据库表空间,并可以对数据库索引进行重建,以后也可以按类似的方法定期重建数据库索引,具体操作步骤如下:

1.      在做调整之前,一定要做完整的数据库备份。

2.      登陆系统所使用用户,用下面的语句检查数据库表所使用的表空间:

select*from user_all_tables;

tablespace_name列显示的是所使用的表空间的名称

 

3.      筛选出使用system表空间的表名

select*from user_all_tables wheretablespace_name =’SYSTEM’;

4.      复制table_name列到UltraEdit,使用列编辑模式,编辑命名,保存成sql脚本

 

然后切换至列模式

 选中整列,编辑命令alter table tablename
move tablespace tablespacename;

 另存为1.sql

 

5.      用语句检查索引使用的表空间;

select index_name,table_owner,table_name,tablespace_name
from user_indexes;

tablespace_name列显示的是所使用的表空间的名称

 

6.      参照第3步,复制index_name列UltraEdit,使用列编辑模式,编辑命名,保存成sql脚本

alter index inde_name rebuild tablespace tablespace_name;

 

7.      使用sqlplus登陆oracle数据库,按顺序执行脚本

C:\>sqlplususername/password@SID

SQLPLUS>@d:\1.sql

小机环境类似,使用oracle安装用户登陆,将脚本文件复制到/home/oracle目录

#/home/oracle>sqlplus username/password@SID

SQLPLUS>@1.sql

注:脚本文件过大,可能存在上万行,所以不建议在plsql中执行,可能会没响应。

8.      再次检查表使用的表空间,索引使用的表空间;

select*from user_all_tables;

select index_name,table_owner,table_name,tablespace_name
from user_indexes;

 

9.      遇到有使用clob等大对象的表,由于索引的rebuil语句无法执行,可以先将原表更名,创建新表指定表空间,将原有数据导入新表,删除旧表;

 

alter table tablenameArename tablenameB;

create table tablenameA
tablespace tablespacename  as select * fromtablenameB;

drop table tablenameB;

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 表空间 clob system