注意事项:在执行过程中,需要在索引所在表上获取锁,因此应尽可能的保证索引表不被其他事务锁定,以尽快清理临时数据,如果长时间不能清除数据,查看后台日志,我们会发现
online index (re)build cleanup: objn=87859 maxretry=2000 forever=0
Thu Nov 21 14:36:58 2013
online index (re)build cleanup: objn=87859 maxretry=2000 forever=0
Thu Nov 21 14:38:45 2013
online index (re)build cleanup: objn=87859 maxretry=2000 forever=0
Thu Nov 21 14:39:10 2013
online index (re)build cleanup: objn=87859 maxretry=2000 forever=0
Thu Nov 21 14:45:32 2013
online index (re)build cleanup: objn=87859 maxretry=2000 forever=0
Thu Nov 21 14:49:07 2013
online index (re)build cleanup: objn=87859 maxretry=2000 forever=0
Thu Nov 21 14:50:54 2013
online index (re)build cleanup: objn=87859 maxretry=2000 forever=0
Thu Nov 21 14:54:19 2013
online index (re)build cleanup: objn=87859 maxretry=2000 forever=0
Thu Nov 21 14:57:44 2013
online index (re)build cleanup: objn=87859 maxretry=2000 forever=0
手工修改数据字典,清除中间表
sql>update ind$ set flags=flags-512 where obj#=<object id>; /* 首先要确认flags>512如果不是,说明这个标志是正常的*/
sql>drop table <owner>.sys_journal_<object_id>; /*这个步骤可能会报资源忙,因为有大量的日志正在插入,可以反复重试一下 */
注意顺序操作顺序,不到万不得已,不要修改数据字典
唤醒SMON
我们可以尝试使用ORADEBUG WAKEUP 来唤醒smon,可以多试几次
更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12