国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

在Oracle數據庫中處理數據的高并發響應

2024-08-29 13:53:06
字體:
來源:轉載
供稿:網友

某些系統可能對系統應付數據高并發的響應要求比較高 (如: 飛行航空訂票系統). 本文采用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 訂到機票但實際沒有座位的情況。


若確希望使用常規邏輯來實現, 需要用到 Oracle 的表的讀鎖功能 (精細訪問策略), 而此非本文范圍, 且其對于SYS用戶無效。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新绛县| 沙坪坝区| 辽阳县| 通辽市| 绥阳县| 卢龙县| 阿拉尔市| 西平县| 连州市| 牟定县| 格尔木市| 阳朔县| 平南县| 云浮市| 临湘市| 巴塘县| 德兴市| 东辽县| 万州区| 高邮市| 阿勒泰市| 万盛区| 班戈县| 婺源县| 邹城市| 秦皇岛市| 梓潼县| 什邡市| 宁德市| 额尔古纳市| 天水市| 罗平县| 卢氏县| 乌拉特前旗| 华容县| 合作市| 麦盖提县| 车致| 车致| 金沙县| 宁强县|