数据库生态圈(RDB & NoSQL & Bigdata)——专注于关系库优化(Oracle & Mysql & Postgresql & SQL Server )

https://www.cnblogs.com/lhdz_bj
http://blog.itpub.net/8484829
https://blog.csdn.net/tuning_optmization
https://www.zhihu.com/people/lhdz_bj

导航

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

前几天,一个用户找到我,说他们的物化视图不能刷新了,这得从几天前主库的一次意外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 64B3AB5C1,050TM1234 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问题依次全部解决,大家参照学习,禁止转载。

posted on 2018-04-04 13:15  lhdz_bj  阅读(171)  评论(0编辑  收藏  举报