早期的資料庫管理都是採用文件系統。在文件系統中,數據按其內容、結構和用途組成若干命名的文件。文件一般為某個用戶或用戶組所有,但可供其他用戶共享。用戶可以通過操作系統對文件進行打開、讀、寫和關閉等操作。
文件系統有明顯的缺點:
(1).編寫應用程序很不方便。
應用程序的設計者必須對所用的文件的邏輯及物理結構有清楚的了解。操作系統 只能打開、關 閉、讀、寫等幾個低級的文件操作命令,對文件的查詢修改等處理都須在應用程序內解決。應用程序還 不可避免地在功能上有所重復。在文件系統上編寫應用程序的效率不高。
(2).文件的設計很難滿足多種應用程序的不同要求,數據冗餘經常是不可避免的。
為了兼顧各種應用程序的要求,在設計文件系統時,往往不得不增加冗餘的數據。數據冗餘不僅浪費空間,而且會帶來數據的不一致性(inconsistency).在文件系統中沒有維護數據一致性的監控機制,數據的一致性完全有用戶負責維護。在簡單的系統中勉強能應付,但在大型復雜的系統中幾乎是不可能完成的。
(3).文件結構的修改將導致應用程序的修改,應用程序的維護量將很大。
(4).文件系統不支持對文件的並發訪問(concurrent access)。
(5).數據缺少統一管理,在數據的結構、編碼、表示格式、命名以及輸出格式等方面不容易做到規范化、標准化;數據安全和保密方面,也難以採取有效的辦法。
❷ 資料庫的並發操作可能帶來哪些問題 丟失更新 死鎖 違反唯一性約束
資料庫中常見的並發操作所帶來的一致性問題包括:丟失的修改、不可重復讀、讀臟數據、幻影讀(幻影讀在一些資料中往往與不可重復讀歸為一類)。
丟失修改
下面先來看一個例子,說明並發操作帶來的數據的不一致性問題。
考慮飛機訂票系統中的一個活動序列:
甲售票點(甲事務)讀出某航班的機票余額A,設A=16.
乙售票點(乙事務)讀出同一航班的機票余額A,也為16.
甲售票點賣出一張機票,修改余額A←A-1.所以A為15,把A寫回資料庫.
乙售票點也賣出一張機票,修改余額A←A-1.所以A為15,把A寫回資料庫.
結果明明賣出兩張機票,資料庫中機票余額只減少1。
歸納起來就是:兩個事務T1和T2讀入同一數據並修改,T2提交的結果破壞了T1提交的結果,導致T1的修改被丟失。前文(2.1.4數據刪除與更新)中提到的問題及解決辦法往往是針對此類並發問題的。但仍然有幾類問題通過上面的方法解決不了,那就是:
不可重復讀
不可重復讀是指事務T1讀取數據後,事務T2執行更新操作,使T1無法再現前一次讀取結果。具體地講,不可重復讀包括三種情況:
事務T1讀取某一數據後,事務T2對其做了修改,當事務1再次讀該數據時,得到與前一次不同的值。例如,T1讀取B=100進行運算,T2讀取同一數據B,對其進行修改後將B=200寫回資料庫。T1為了對讀取值校對重讀B,B已為200,與第一次讀取值不一致。
事務T1按一定條件從資料庫中讀取了某些數據記錄後,事務T2刪除了其中部分記錄,當T1再次按相同條件讀取數據時,發現某些記錄神密地消失了。
事務T1按一定條件從資料庫中讀取某些數據記錄後,事務T2插入了一些記錄,當T1再次按相同條件讀取數據時,發現多了一些記錄。(這也叫做幻影讀)
讀"臟"數據
讀"臟"數據是指事務T1修改某一數據,並將其寫回磁碟,事務T2讀取同一數據後,T1由於某種原因被撤消,這時T1已修改過的數據恢復原值,T2讀到的數據就與資料庫中的數據不一致,則T2讀到的數據就為"臟"數據,即不正確的數據。
產生上述三類數據不一致性的主要原因是並發操作破壞了事務的隔離性。並發控制就是要用正確的方式調度並發操作,使一個用戶事務的執行不受其它事務的干擾,從而避免造成數據的不一致性。
並發一致性問題的解決辦法
封鎖(Locking)
封鎖是實現並發控制的一個非常重要的技術。所謂封鎖就是事務T在對某個數據對象例如表
❸ 如何解決ACCESS資料庫鎖定的問題
你在後面的來代碼一定要有源conn.close,用語關閉資料庫連接,否則只打開連接不關閉的話時間長了所有的連接就會都被佔用.而程序無法申請到新的連接就會這樣.
還有一種情況就是你使用XP做伺服器,其中的系統連接數被限制到10個,這也會影響資料庫的連接數量.