Timesten日志不及时清理的故障处理

昨天一早到公司,有同事就提醒说是装Timesten的服务器的磁盘空间满了,首先看到的是timesten生成了Ncore文件,400M一个,当时下意识就把core文件删掉了,看了一下日志,有很多提示分配空间错误的。 到了中午,那个同事又告诉我空间又不够了,我查了一下core文件,没有core文件,用du查了一下,在timesten的日志目录下,有900多个日 志文件,照理根据配置,timesten10分钟做一次checkpoint,做完后会把相关的日志删掉的啊,有幸在抓虾上看到了下面这篇文章(实在不好 一下,可能是抓虾编辑过了,找不到原出处)<o:p></o:p>

最近碰到一个比较少见的一个问题,就是由于某种原因导致TimesTen的日志无法自动删除,导致在磁盘上有大量的日志累积,磁盘的使用空间有被耗尽的危险。通过仔细排查相关的TimesTen 系统日志等相关信息,并没有发现异常情形。通过ttlogholds命令才发现有一个长的事务因为某种原因一直未提交,从而导致了日志的无法自动删除。解决过程如下:<o:p></o:p>

  1.  通过ttlogholds查看相关信息<o:p></o:p>

<!---->2.    <!---->Command> call ttlogholds; < 41, 231442592, Replication                   , AHOCSRB1:_ORACLE > < 41, 231442592, Replication                   , AHOCSRB2:DATA > < 41, 231442592, Long-Running Transaction      , 138.1089 > < 121, 30922688, Checkpoint                    , DATA.ds0 > < 121, 84106376, Checkpoint                    , DATA.ds1 > 5 rows found.<o:p></o:p>

发现第3行存在一个长的事务(Long-Running Transaction),事务号为138.1089 ,导致了从41号日志之后无法删除。<o:p></o:p>

  1. 通过ttxactadmin查看该事务详细情形<o:p></o:p>

<!---->4.    <!---->ttxactadmin <DSN><o:p></o:p>

Program File Name: ****** 2730    0×6000000000080020  138.1089   Active          Database  0×01312d0001312d00   IX                                                          HashedKey -6667089929831852570 X     ODS30.TB_BIL_ACCT_BALANCE_LIMIT                                                        Row       0×000000001b<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue="8306" numbertype="1" negative="False" w:st="on" unitname="F">8306f</st1:chmetcnv>0   Xn    ODS30.TB_BIL_ACCT_BALANCE_LIMIT                                                        Command   6455310528           S   <o:p></o:p>

发现在目前的活动事务中确实存在这个事务。<o:p></o:p>

  1. 回滚该事务<o:p></o:p>

ttxactadmin -xactIdRollback <xid> <DSN><o:p></o:p>

 通过上述命令回滚该事务。<o:p></o:p>

         之后不久当checkpoint被触发后,就可以看到日志被自动清除了。当然也可以手工强制checkpoint( call ttckpt;) <o:p></o:p>

        从这个问题的表现来看,个人认为应用中出现异常的可能性较大。一种可能性是应用中有个长的事务忘记提交,导致日志一直被Block在那里。<o:p></o:p>

<o:p> </o:p>

于是,我进行了如下操作<o:p></o:p>

  1.  通过ttlogholds查看相关信息<o:p></o:p>

Command> call ttlogholds;<o:p></o:p>

发现日志号2被两个xlasample的程序挂着了,估计是同事做测试的时候出现的一些异常。<o:p></o:p>

  1.  通过xladeletebookmark查看相关信息<o:p></o:p>

Command> xladeletebookmark;<o:p></o:p>

显示出来这两个xla的相关情况,用这个命令把它们清除掉<o:p></o:p>

  1.  通过ttCkpt手工做checkpoint<o:p></o:p>

Command> call ttCkpt;<o:p></o:p>

等做完了,一看日志已经正常了。<o:p></o:p>

<o:p> </o:p>

总结,TimesTen出现日志挂起,不能删除的情况在实际生产环境中是一个很危险的事情,如果出现大量的同步操作,会产生大量的日志,这些日志如果不及时checkpoint清除掉的话,会很快把磁盘空间消耗掉。

由于使用的时间不多,从目前了解到的情况来看,一般都是先用ttlogholds看是什么原因导致日志不能清楚,然后挂起日志的原因进行针对性的处理

你可能感兴趣的:(oracle,应用服务器,活动,F#)