2016-09-16 137 views
0

我想在oracle中创建一个物化视图(使用sql开发人员)。创建物化视图时出现死锁

我已经在一张小桌子上测试过了,一切正常。

我现在做它一个非常大的表,和阐述我得到以下错误的一些小时之后: “ORA-04020:死锁检测,同时试图锁定”

有没有办法避免它?或者因为桌子太大而不能做很多事情?

+0

查询会帮助从查询执行日志 – aviad

+0

一些统计信息抱歉,但我不是很有经验......什么是查询执行日志?我在哪里可以找到它? – Maik

+0

http://www.toadworld.com/platforms/oracle/w/wiki/376.tracing-sql-statement-execution也使用excution计划https://docs.oracle.com/database/121/TGSQL/tgsql_genplan。 htm#TGSQL95114 – aviad

回答

1

你的数据库中的其他东西有一个对象被锁定,你的查询需要被构建。

要找出哪个对象尝试;

SELECT vo.object_id, obj.object_name, vo.oracle_username, vo.os_user_name, vo.session_id 
    FROM v$locked_object vo 
     INNER JOIN all_objects obj 
     ON vo.object_id = obj.object_id 

寻找你的物化视图试图使用的对象,你应该看看哪个用户锁定了对象。

转到用户并要求他们提交或回滚他们正在做的任何事情。

+0

谢谢你的提示。这是否意味着在oracle试图创建MV的所有时候,没有人可以在源表上工作?这可能是一个大问题... – Maik

+0

这将取决于对桌子做什么。 – BriteSponge

+0

嗯,我认为如果有人在我的桌子上做了一个选择,它不会锁定它,但是如果他更新桌子上的某一行而不是它。然后我有一个很大的问题,因为创建MV需要几个小时,在那个时候有人肯定会锁定桌子。有什么我可以做的吗? – Maik