我有一個用例,我從表中讀取一組記錄,對它執行一些操作,然後更新記錄。我希望在此期間沒有其他應用程序/組件能夠讀取記錄。這是因爲我想在多臺主機上運行相同的應用程序以獲得可伸縮性,但不希望發生競態條件。我的應用程序使用一些SQS更改事件並將它們應用於Oracle商店。請建議使用什麼機制。 SELECT FOR UPDATE將在這種情況下工作嗎?Oracle Java - 如何鎖定一行以便其他進程無法讀取它?
0
A
回答
2
選擇更新鎖定行並保留它以供您更新,但不會阻止他人閱讀它。我想你可能想重新考慮這個想法。想象一下,根據有多少人正在查看某些數據,整個表中的所有報表或所有查詢都有不一致的數字,無論他們是否決定更新數據?
或者,如果其他用戶查詢但無法看到該行 - 他們是否會試圖插入它,並且您要麼達到唯一的鍵約束或處理重複的數據?或者,如果我查詢了一次並查看它,然後重新查詢,並且因爲其他人查詢它而消失 - 我將擁有該應用程序多少信心?
當有人去度假時會發生什麼,但忘記關閉應用程序 - 爲其他人留下一個「失蹤」行一週?
你可能想研究樂觀鎖定來處理競爭條件。是的,這是實施的工作,但要比提供不一致結果的應用程序更好!或者,您可以使用兩種模式來顯示和編輯屏幕。用戶點擊「編輯」,然後重新獲取FOR UPDATE,執行編輯,然後提交更改或放棄編輯。然而,這種技術的用處不大,因爲如果事務沒有解決,可能需要DBA干預才能解決,它通常會留下行或甚至整個表被鎖定。
相關問題
- 1. 鎖定SELECT以便其他進程不會獲取舊數據
- 2. 進程是否可以鎖定磁盤,以便其他進程無法訪問它?
- 3. 如何鎖定Java線程,以便在Platform.runLater完成之前鎖定其他人
- 4. Hibernate可以用來鎖定數據庫表或行,以便其他程序無法訪問它?
- 5. Python - 我如何閱讀和讀出,以便其他讀者可以閱讀它進一步追求?
- 6. 鎖定Oracle行,使第二個線程無法讀取數據
- 7. C++ MongoDB如何「鎖定」集合,使其他進程無法寫入它
- 8. 如何鎖定表進行讀取和寫入,以便我可以執行SQL,然後再刪除鎖?
- 9. 如何鎖定一個文件,使其他應用程序無法刪除它?
- 10. 如何讀取其他進程內存
- 11. 一行可以鎖定,因此無法讀取[使用Rails/Postgres]?
- 12. SVN:如何鎖定文件以便無人修改它?
- 13. Python:任何方式讓一個進程有一個寫鎖定和其他人只是平行讀取?
- 14. 讀取(日誌)文件不鎖定重命名/移動其他進程
- 15. 如何鎖定節點以便刪除進程
- 16. Java ImageIO:如何從文件讀取BufferedImage,以便它使用DataBufferFloat?
- 17. 如何確保我可以讀取該文件並且不會被其他進程鎖定
- 18. 如何鎖定文件,讀取其內容並覆蓋它?
- 19. 在寫入過程中如何鎖定文件,以便在打開時無法讀取文件?
- 20. 如何在java中鎖定一個向量,以便只有一個線程可以同時使用它?
- 21. 分發文件,以便收件人無法讀取它
- 22. 如何讀取其他應用程序
- 23. 從其他進程讀取和寫入
- 24. 使用除鎖定對象以外的其他鎖定線程
- 25. 線程並行於其他進程java
- 26. 如何實現一個java類,以便它保存其他文件中的其他類的常量
- 27. 如何鎖定一個MySQL數據庫,以便寫入/讀取/更新/刪除..everything被鎖定?
- 28. 如何執行事務以及不鎖定表以便其他人執行更改?
- 29. Java,子進程和未讀輸出流:它何時死鎖?
- 30. 如何「無法訪問」文件,以便程序的其他部分可以訪問它