ORACLE10.2.0.4物化视图死锁问题处理手记
物化视图查询相关
select * from user_mviews;
SELECT * FROM user_mview_refresh_times;
SELECT * FROM DBA_MVIEW_LOGS;
建立物化视图
CREATE MATERIALIZED VIEW LOG ON MEMBER_ORDER;
建立时是很快的,然后在远端建立同步物化视图
CREATE MATERIALIZED VIEW MV_SPMEMBERORDER
REFRESH FAST
AS
SELECT * FROM member_order@remote;
问题来了
因为表的数据量很大,你会发现如果对这个表进行大量读写的时候,会把整个表都会锁住,正好此时有个大存储过程在里面执行,把整个应用全部锁住了。
停止应用,你查询锁定的情况
select object_name,machine,s.sid,s.serial#,s.TYPE,l.LOCKED_MODE,O.,l.
from vlockedobjectl,dbaobjectso,vsession s
where l.object_id = o.object_id and l.session_id=s.sid;
发现已经没有锁定,但是只要一打开应用,系统马上锁住。
无奈,只能删除,
drop materialized view log on MEMBER_ORDER;
再删除物化视图。
但是,问题仍然存在,是否是表空间的问题,加上,还是有问题,起初以为是应用问题,对应用的代码进行优化,仍然无法解决死锁的问题。
此时,发现有个存储过程还在跑,因为这个过程,不会对应用系统的表进行锁定,他只是读写自己的表,按理不会死锁的。 没有办法,先把这个存储过程结束了,试试看。。。竟然好了。死锁解除了。 没有想明白是怎么一回事。