ITPub博客

首页 > 数据库 > Oracle > 快照库MV不能成功刷新问题的解决

快照库MV不能成功刷新问题的解决

原创 Oracle 作者:sqysl 时间:2016-06-10 17:19:20 0 删除 编辑

前几天,一个用户找到我,说他们的物化视图不能刷新了,这得从几天前主库的一次意外down机说起(另文说明),前几天,用户现场的一个中心库因某原因意外down掉了,当时短期内对中心库进行了重启修复,没有造成数据丢失,但重启后,围绕中心库的几个快照库不能刷新MV了,让我帮忙解决下,没办法,用户就是上帝,用户的需求就是命令,开工吧。
首先,我看了一个快照库上的MV,都是从中心库往快照库中同步数据的,并且也对一个数据量小的MV进行了测试,确实是不可以刷新,一直卡在那里不动,但在快照库上,通过定义MV的SELECT语句,可以快速的从中心库查到数据,有点纳闷儿,怎么回事儿呢?继续排查:

select * from v$Lock where type='TM' and id1='1234';


看到结果,发现了线索,如下:
ADDR          KADDR         SID   TYPE   ID1    ID2    LMODE  REQUEST  CTIME     BLOCK
-------------------------------------------------------------------------------------- 

64B3AB44 64B3AB5C 1,050 TM 1234 0 3 0   370500    0


如果有的同学还没发现线索,那么继续:

select * from v$session where sid=1050;


这条语句的结果较长,我就不贴在这里了,通过结果的SCHEMANAME,MACHINE,PROGRAME,TYPE,LOGON_TIME,STATE等信息,基本可以确定问题所在了,否则,可以通过SQL_ID继续检查:

select * from v$sql where sql_id='bsw0sjtftg6vw'


通过以上语句,可以获取到具体的SQL,这样就能更清楚这些会话当时所做的工作,好了,确定问题所在,我们总的解决:

alter system kill session 'sid,serial#';


命令发出去,居然kill不掉,v$session虽然显示killed,但依然能查到该session,并且,再次刷新MV时,依然卡在那里,通过v$session的process,可以知道该sid对应的PID,于是:
kill -9 pid
再次测试MV的刷新,成功解决,其他几个快照库都如法炮制,MV问题依次全部解决,大家参照学习,禁止转载。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8484829/viewspace-2118202/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Data Guard Wait Events
请登录后发表评论 登录
全部评论
大学毕业至今,一直深耕于数据库领域20余载,擅长数据库优化、数据库分析诊断、数据库规划设计等,曾任职多家知名大型企业,多次独立承担并成功上线关键大型项目。

注册时间:2008-06-27

  • 博文量
    365
  • 访问量
    725283