执行sql发生锁表的问题

laughsmile 2006-02-08 08:03:20
执行以下sql经常会发生锁TBL_PRODUCT_PRINT 表,请大家帮我看看到底是因为什么原因?
UPDATE TBL_PRODUCT_PRINT BBB SET SELECT_FLAG=(CASE WHEN CUSTOMER_CODE IN ('C000000219') THEN 'Y' ELSE 'N' END)
WHERE EXISTS (
SELECT A.CUSTOMER_CODE AS ACCEPT_CODE
FROM TBL_REQUEST A, TBL_CUSTOMER C, TBL_ACCEPT F , TBL_ISSUE G
WHERE A.ACCEPT_CODE=BBB.ACCEPT_CODE AND A.CUSTOMER_CODE = C. CUSTOMER_CODE AND A.ACCEPT_CODE = F.ACCEPT_CODE AND F.ACCEPT_TYPE='1' AND F.PRODUCT_ENV = 'Y' AND A. ISSUE_ID = G.ISSUE_ID AND G.ISSUE_STATUS = 'Y' AND G.CONFIRM_STATUS = 'Y'
AND A.MEDIA_CODE = 'M006' AND A.ISSUE_DATE = to_date('2006/03/03','yyyy/mm/dd')
AND NOT EXISTS ( SELECT 1 FROM TBL_PRODUCT_PRINT WHERE TBL_PRODUCT_PRINT.CUSTOMER_CODE = A.CUSTOMER_CODE)
UNION
SELECT A.CUSTOMER_CODE AS ACCEPT_CODE
FROM TBL_PRODUCT_PRINT A, TBL_AREA B, TBL_CUSTOMER C, TBL_REQUEST D, TBL_ACCEPT F WHERE A.CUSTOMER_CODE=BBB.CUSTOMER_CODE AND A.CUSTOMER_CODE = C. CUSTOMER_CODE AND months_between(SYSDATE,A.CREATE_DATE)<=1 AND D.ACCEPT_CODE = F.ACCEPT_CODE AND F.ACCEPT_TYPE='1' AND F.PRODUCT_ENV = 'Y' AND A.CUSTOMER_CODE = D.CUSTOMER_CODE AND A.MEDIA_CODE = D.MEDIA_CODE AND A.ISSUE_DATE = D.ISSUE_DATE AND A.MEDIA_CODE = 'M006' AND A.ISSUE_DATE = to_date('2006/03/03','yyyy/mm/dd')
)
...全文
597 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
laughsmile 2006-06-01
  • 打赏
  • 举报
回复
up
laughsmile 2006-03-21
  • 打赏
  • 举报
回复
up
laughsmile 2006-03-17
  • 打赏
  • 举报
回复
要更新的记录被其它会话check out,那应该是等待其它会话的commit或者rollback啊.怎么能把整张表都锁了呢
开发者开聊 2006-03-13
  • 打赏
  • 举报
回复
一般情况就是你要更新的记录被其它会话check out并尚未commit或rollback。

heyixiang 2006-03-13
  • 打赏
  • 举报
回复
你首先要知道为什么会锁表,一般情况就是你要更新的记录被其它会话check out并尚未commit或rollback。

问题并不是由于不同的机器造成的。

先考虑简单的情况,排除可能后再考虑更深层次的,90%的错误都是由于简单的操作失误造成的。
laughsmile 2006-03-13
  • 打赏
  • 举报
回复
up
laughsmile 2006-02-17
  • 打赏
  • 举报
回复
又出现了锁表的情况,不过这次锁的是另外一张,也是sql比较复杂的一个update的sql.并且这个update的sql与上次同样也是存在事务中的sql之一.
从会话中只能看是web服务器锁住了表,我们都是通过客户端操作tomcat服务器来写数据库.解锁表之后,试了很多次却再也无法重现了
bobfang 2006-02-13
  • 打赏
  • 举报
回复
现在很难分析是什么原因引起的锁表。如果再出现这类情况,应当在锁表时查查是什么会话锁住了什么表,这个会话运行在什么机器上,到底是个什么应用。
laughsmile 2006-02-13
  • 打赏
  • 举报
回复
有哪位老大知道这可能是什么原因么
laughsmile 2006-02-11
  • 打赏
  • 举报
回复
是的,我和我的同事都是在本机的java程序中连接到数据库服务器来执行此sql,前天晚上搞了一晚上我的机器上始终是锁表,昨天早上来我的机器一开机,执行却是好好的,很奇怪.
使用的连接方式是jdbc:oracle:thin
bobfang 2006-02-10
  • 打赏
  • 举报
回复
“这个sql在我的机器上执行肯定锁表,但是在别人机器上执行却好好的”,请问你的机器和别人的机器都只是客户端吧?这个sql是在什么工具中执行的?重起机器是重起你的机器吗?
cenlmmx 2006-02-10
  • 打赏
  • 举报
回复
有啊,看看v$lock,v$lock_object看琐的内容,锁的问题一般和应用有关,很难找
laughsmile 2006-02-10
  • 打赏
  • 举报
回复
今天把机器重启了一遍这个现象就消失了,请问这个原因大家见过没有啊
laughsmile 2006-02-08
  • 打赏
  • 举报
回复
很奇怪,这个sql在我的机器上执行肯定锁表,但是在别人机器上执行却好好的。
laughsmile 2006-02-08
  • 打赏
  • 举报
回复
解决问题马上揭帖

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧