oracle数据库里的并发,如何在Oracle数据库中处理数据的高并发响应呢?

某些系统可能对系统应付数据高并发的响应要求比较高 (如: 飞行航空订票系统)。 本文采用Oracle的lock table来解决此问题:

Procedure中关键code如下:

---------------------------------------

lock table tb_book_ticket in share mode;

。。

insert into tb_book_ticket (id, scheduled_flight, ticket_no, book_time) values (ID。nextval, v_scheduled_flight, v_ticket_no, SYSDATE); -- mark1

。。 -- mark2

select count(*) into v_book_count from tb_book_ticket where scheduled_flight = v_scheduled_flight; -- mark3

if v_book_count <= v_book_max_count then

v_result := 'book successfully';

commit;

else

v_result := 'book unsuccessfully';

rollback;

end if;

return v_result;

-------------------------------------------------------------

以上有2个地方需注意:

1) 采用 lock table table_name in share mode 方式而非 lock table table_name in exclusive mode 提高并发性处理, 尽量减少不必要执行等待。

2) 按常规思路, 可能会将 mark1 与 mark3 顺序交换, 但此举不行

-------------------------------------------------------------

select count(*) into v_book_count from tb_book_ticket where scheduled_flight = v_scheduled_flight; -- mark3

。。 -- mark2

if v_book_count < v_book_max_count then

insert into tb_book_ticket (id, scheduled_flight, ticket_no, book_time) values (ID。

nextval, v_scheduled_flight, v_ticket_no, SYSDATE); -- mark1

-- mark4

commit;

end if;

-------------------------------------------------------------

试想若 userA 执行到 mark4, 而同时 userB 执行到 mark3, 就可能会出现由于 userA 尚未commit 而导致 userB 订到机票但实际没有座位的情况。

全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值