12
返回列表 发新帖
楼主: BTxigua

记录删除后,数据块空间不释放,请大家帮忙看看分析一下

[复制链接]
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
11#
发表于 2010-8-10 01:41 | 只看该作者
原帖由 magic007 于 2010-8-9 10:48 发表
我估计用dbms_repair.segment_fix_status可以修复标记为FULL状态的BITMAP。但造成这个的原因我估计还是BUG。DELETE之后,没有将BMB中的数据标记正确,而块上的数据全部被DELETE之后,如果没有从FULL更改状态为其他状态,那永远就为FULL状态了。因为块只有在DML操作时才会作状态更改,而块上没有数据,因此不再可能有UPDATE和DELETE,而状态为FULL,又不能有INSERT。

要看你们的业务逻辑,是否是在INSERT之前DELETE数据?这个INSERT和DELETE是否在同一事务之中?


I checked the SR I opened a year ago. It was indeed dbms_repair.segment_fix_status that I ran to fix a similar issue. I read Bug 4660718 and found it. Read

https://support.oracle.com/CSP/m ... CH&id=4660718.8
https://support.oracle.com/CSP/m ... =BUG&id=4660718

The bug description note also mentions the parameter _minfree_plus. It would be implemented if you apply a patch. It's available in the database (without a patch) as of 11gR1.

Yong Huang

使用道具 举报

回复
论坛徽章:
25
授权会员
日期:2007-08-20 23:44:422011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:42:49管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-01-04 11:49:54咸鸭蛋
日期:2012-02-06 17:15:202012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:36
12#
发表于 2010-8-10 09:18 | 只看该作者
不知LZ的库是多少版本,是否满足Huang版提到的BUG的触发条件。

使用道具 举报

回复
论坛徽章:
13
数据库板块每日发贴之星
日期:2007-09-20 01:04:22铁扇公主
日期:2012-02-21 15:02:402010新春纪念徽章
日期:2010-03-01 11:08:28月度精华徽章
日期:2009-04-01 02:15:18数据库板块每日发贴之星
日期:2008-05-17 01:02:08生肖徽章2007版:兔
日期:2008-04-07 19:49:48生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44数据库板块每日发贴之星
日期:2007-10-20 01:03:31
13#
 楼主| 发表于 2010-8-10 09:36 | 只看该作者
10204,bug的条件不满足。

使用道具 举报

回复
论坛徽章:
13
数据库板块每日发贴之星
日期:2007-09-20 01:04:22铁扇公主
日期:2012-02-21 15:02:402010新春纪念徽章
日期:2010-03-01 11:08:28月度精华徽章
日期:2009-04-01 02:15:18数据库板块每日发贴之星
日期:2008-05-17 01:02:08生肖徽章2007版:兔
日期:2008-04-07 19:49:48生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44数据库板块每日发贴之星
日期:2007-10-20 01:03:31
14#
 楼主| 发表于 2010-8-10 09:40 | 只看该作者
昨天下午18点的时候,truncate了表。表恢复到initial大小:19M。晚上22点试了DBMS_SPACE_ADMIN.ASSM_SEGMENT_VERIFY。

SQL> select sysdate from dual;

SYSDATE
-----------
2010-8-9 22

SQL> select count(*) from ocs.OCP_PROCESS_CCR_LOG;

  COUNT(*)
----------
    226021

SQL> select extents,bytes from dba_segments where segment_name='OCP_PROCESS_CCR_LOG';

   EXTENTS      BYTES
---------- ----------
        97  101711872

SQL> exec DBMS_SPACE_ADMIN.ASSM_SEGMENT_VERIFY('OCS','OCP_PROCESS_CCR_LOG','TABLE',null,9);

PL/SQL procedure successfully completed

SQL>

貌似这个起作用了。从昨天晚上22点到现在空间没再增长。
当前的情况:
SQL> select sysdate from dual ;

SYSDATE
-----------
2010-8-10 9

SQL> select count(*) from ocs.OCP_PROCESS_CCR_LOG ;

  COUNT(*)
----------
    292958

SQL> select extents,bytes from dba_segments where segment_name='OCP_PROCESS_CCR_LOG';

   EXTENTS      BYTES
---------- ----------
        97  101711872

SQL>

使用道具 举报

回复
论坛徽章:
13
数据库板块每日发贴之星
日期:2007-09-20 01:04:22铁扇公主
日期:2012-02-21 15:02:402010新春纪念徽章
日期:2010-03-01 11:08:28月度精华徽章
日期:2009-04-01 02:15:18数据库板块每日发贴之星
日期:2008-05-17 01:02:08生肖徽章2007版:兔
日期:2008-04-07 19:49:48生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44数据库板块每日发贴之星
日期:2007-10-20 01:03:31
15#
 楼主| 发表于 2010-8-10 09:53 | 只看该作者
exec DBMS_SPACE_ADMIN.ASSM_SEGMENT_VERIFY('OCS','OCP_PROCESS_CCR_LOG','TABLE',null,9);的dump结果

ORACLE_HOME = /oracle/app/oracle/product/10.2.0/db
System name:    AIX
Node name:      ocsdb2
Release:        3
Version:        5
Machine:        00CBEBA44C00
Instance name: ocs
Redo thread mounted by this instance: 1
Oracle process number: 235
Unix process pid: 959108, image: oracle@ocsdb2

*** 2010-08-09 22:30:17.026
*** ACTION NAMEÃüÁî´°¿Ú - н¨) 2010-08-09 22:30:17.019
*** MODULE NAMEPL/SQL Developer) 2010-08-09 22:30:17.019
*** SERVICE NAMEocs) 2010-08-09 22:30:17.019
*** SESSION ID2187.4966) 2010-08-09 22:30:17.019
Segment header [dba: 0x007082f8c, (file 28,block 536460)]
Segment object id: 198163; inc. no.: 0
*********
verifying extent map and tablespace bitmap consistency
---------
Verifying extent map and L1 bitmap blocks consistency in the segment
---------
Verifying consistency of segment header, L3, L2 and L1 bitmap blocks
---------
Verifying Segment HWM Consistency
Verifying High HWM information
Verifying Low HWM information
---------
Verifying consistency of hwm information in segment header and L1 bitmap block
---------
Verifying segment header and seg$ information consistency of the segment
---------

使用道具 举报

回复
论坛徽章:
13
数据库板块每日发贴之星
日期:2007-09-20 01:04:22铁扇公主
日期:2012-02-21 15:02:402010新春纪念徽章
日期:2010-03-01 11:08:28月度精华徽章
日期:2009-04-01 02:15:18数据库板块每日发贴之星
日期:2008-05-17 01:02:08生肖徽章2007版:兔
日期:2008-04-07 19:49:48生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44数据库板块每日发贴之星
日期:2007-10-20 01:03:31
16#
 楼主| 发表于 2010-8-10 10:00 | 只看该作者
原帖由 magic007 于 2010-8-10 00:48 发表
我估计用dbms_repair.segment_fix_status可以修复标记为FULL状态的BITMAP。但造成这个的原因我估计还是BUG。DELETE之后,没有将BMB中的数据标记正确,而块上的数据全部被DELETE之后,如果没有从FULL更改状态为其他状态,那永远就为FULL状态了。因为块只有在DML操作时才会作状态更改,而块上没有数据,因此不再可能有UPDATE和DELETE,而状态为FULL,又不能有INSERT。

要看你们的业务逻辑,是否是在INSERT之前DELETE数据?这个INSERT和DELETE是否在同一事务之中?



insert和delete是互不相干的。
应用专门写了个imp程序用来insert日志信息。后来发现这个表涨的太快了,写了个定时任务来清理,delete 15分钟之前的记录。

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
17#
发表于 2010-8-11 03:27 | 只看该作者
> 10204,bug的条件不满足。

The database I had the problem on is 10.2.0.4. Sometimes the version numbers in the bug should be taken with a grain of salt.

> 昨天下午18点的时候,truncate了表。表恢复到initial大小:19M。晚上22点试了DBMS_SPACE_ADMIN.ASSM_SEGMENT_VERIFY。

You lost a precious opportunity to truly verify the integrity of the metadata blocks. A truncate may well have "fixed" your problem already.

Wait till next time you have the problem and don't rush to truncate.

Yong Huang

[ 本帖最后由 Yong Huang 于 2010-8-10 15:19 编辑 ]

使用道具 举报

回复
论坛徽章:
13
数据库板块每日发贴之星
日期:2007-09-20 01:04:22铁扇公主
日期:2012-02-21 15:02:402010新春纪念徽章
日期:2010-03-01 11:08:28月度精华徽章
日期:2009-04-01 02:15:18数据库板块每日发贴之星
日期:2008-05-17 01:02:08生肖徽章2007版:兔
日期:2008-04-07 19:49:48生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44数据库板块每日发贴之星
日期:2007-10-20 01:03:31
18#
 楼主| 发表于 2010-8-11 17:40 | 只看该作者
>You lost a precious opportunity to truly verify the integrity of the metadata blocks. A truncate may well have "fixed" your problem already.

Wait till next time you have the problem and don't rush to truncate.

事实上,我不是第一次truncate这个表了,在半年之前,我已经truncate过这个表了。只是上次truncate的时候我没有注意到这个问题,不知道是在truncate之前就存在这个问题,还是truncate之后才冒出来的。

这个问题我也拖了一个多月了,metalink也一直没有得到答复,所以拿出来请教大家。最近因为业务要调整,所以必须做清理了,所以就做了truncate了。

从这两天的数据看,貌似没有出现原来的情况了?不知道是truncate起作用了,还是verify起作用了。
SQL> select extents ,bytes from dba_segments where segment_name='OCP_PROCESS_CCR_LOG';

   EXTENTS      BYTES
---------- ----------
       125  131072000

SQL> SELECT COUNT(*) FROM OCP_PROCESS_CCR_LOG;

  COUNT(*)
----------
    290912

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表