博主资料

留言 加为好友 收藏

用户名:  humint

个人统计

用户名: humint
等级: 初来乍到
威望: 120
积分: 250
在线时间: 2 小时
日志总数: 25
评论数量: 13
访问次数: 110808
建立时间: 2006-08-08
RSS订阅       手机访问

最新评论

文章搜索

文章列表

友情链接

最近访问的人:

sunny—携我同行,..
2008-07-11 14:44:48
自由的天空
2008-05-28 17:21:00
MyBlog
2008-04-30 21:18:44
2008-04-29 16:55:13
2008-04-25 11:01:50
痴心如鱼
2008-04-12 19:48:57
雪人变大佬
2008-03-26 13:13:11
电子商务研究(B2C)
2008-02-19 10:44:15
路人甲
2007-10-25 08:14:42
乱聊
2007-10-19 01:49:26

日志文章

2007年04月18日 11:17:00

表空间维护


通过EMC连接上数据库,在
库-》存储-》表空间
中发现某个表空间使用率已经达88%,

通过DBA用户登陆,使用SQL查看表空间使用情况:

select segment_type, sum(bytes)/1024/1024 from dba_segments where tablespace_name='AA' group by segment_type;
1      INDEX      1077.9375
2      LOBINDEX      0.0625
3      LOBSEGMENT      0.0625
4      TABLE      21988.546875
可知使用最多的是表,查询哪些表占用了表空间:

select bytes/1024/1024 sizeM, owner, segment_name
from dba_segments
where tablespace_name = 'DD'
and segment_type = 'TABLE' order by sizeM desc;
1      12113.984375   AE      JAMES
2      1683         AE      CATE
3      920         AE      WORKLOG
4      793         AE      SEVERLOG

由此可看出,最大的表是JAMES,可以对其进行清理
删除一个表的大量数据,不能直接删除,否则回滚段会溢出。
网上已经有高人写了相应的存储过程,在这里引用一下:

Copy code
create or replace procedure delbigtab
(
p_tablename in varchar2,
p_condition in varchar2,
p_count in varchar2
)
as
pragma autonomous_transaction;
n_delete number:=0;
begin
  while 1=1 loop
      execute immediate
            'delete from '||p_tablename||' where '||p_condition||' and rownum <= :rn'
            using p_count;
      if sql%notfound then
        exit;
      else
          n_delete:=n_delete + sql%rowcount;
      end if;
      commit;
  end loop;
  commit;
  dbms_output.put_line('finished! totally '||to_char(n_delete)||' records deleted!');
end;

执行此存储过程,对表JAMES删除一些历史数据,删除后表JAMES的空间缩小到9G左右

另外,表WORKLOG已经是没有用的,可以删除:
truncate table worklog;
drop table worklog;
由此也释放920M左右空间。

PS:表空间的维护,还应通过对表的定期常规性维护来实现,不要在空间满了才处理:P

Tags: oracle   表空间   维护  

类别: 数据库技术 |  评论(0) |  浏览(3510) |  收藏
-20楼 [楼主][匿名] Says:
-21楼 [楼主][匿名] Says:
-22楼 [楼主][匿名] Says:
发表评论