重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
如果当前有用户在对某行数据进行修改登操作,oracle会在这行数据上添加行级锁,期间,所有用户对该行数据只能查询,不可修改,如果比如说执行update操作,需等待该修改操作事务提交或者回滚之后,才行。
站在用户的角度思考问题,与客户深入沟通,找到镇巴网站设计与镇巴网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计制作、网站建设、企业官网、英文网站、手机端网站、网站推广、主机域名、虚拟空间、企业邮箱。业务覆盖镇巴地区。
这种情况叫死锁,与网络质量无关。
最大的可能就是程序的原因。
如A进程修改a表的某条记录,修改完a表后,会继续修改b表的某条记录,然后提交事务。
这个时候,B进程在修改b表的那条记录,修改完后要去修改a表的那条记录,然后提交事务。
这样,当A修改完a尚未修改b,B修改完b尚未修改a的时候,就可能出现B进程等待A进程提交事务,A进程又在等待B进程提交事务,两个进程一直在等。
所以死锁就出现了。
1、在sql语句后面加上for update可以获得行锁。
2、捕捉返回的sqlcode 和 sqlerrmc 可以得到返回值和错误信息。
---
以上,希望对你有所帮助。
半专业回答:
1,
这是个疑问句吗
2,如果只是
读操作是不会加锁的
3,事务2
什么操作都不行
4,事务2
可以加共享锁,不能加排他锁
问题补充回答
读操作就是select
,任何时刻都可以,因为是非阻塞读,由undo机制实现
共享锁是保证表结构不能被更改,但是可以更改没有加排他锁的数据
共享锁是表级的,排他锁是行级的
oracle数据库分行级锁和表级锁。用select * from table-name for update完成行级锁。用delete或update完成表级锁。你锁定的资源 别人会等待你的提交语句或回退语句完成以后再继续进行。