并發(fā)控制
數(shù)據(jù)庫管理系統(tǒng)(DBMS)中的并發(fā)控制的任務(wù)是確保在多個事務(wù)同時(shí)存取數(shù)據(jù)庫中同一數(shù)據(jù)時(shí)不破壞事務(wù)的隔離性和統(tǒng)一性以及數(shù)據(jù)庫的統(tǒng)一性。下面舉例說明并發(fā)操作帶來的數(shù)據(jù)不一致性問題: 現(xiàn)有兩處火車票售票點(diǎn),同時(shí)讀取某一趟列車車票數(shù)據(jù)庫中車票余額為 X。兩處售票點(diǎn)同時(shí)賣出一張車票,同時(shí)修改余額為 X -1寫回?cái)?shù)據(jù)庫,這樣就造成了實(shí)際賣出兩張火車票而數(shù)據(jù)庫中的記錄卻只少了一張。 產(chǎn)生這種情況的原因是因?yàn)閮蓚€事務(wù)讀入同一數(shù)據(jù)并同時(shí)修改,其中一個事務(wù)提交的結(jié)果破壞了另一個事務(wù)提交的結(jié)果,導(dǎo)致其數(shù)據(jù)的修改被丟失,破壞了事務(wù)的隔離性。并發(fā)控制要解決的就是這類問題。 封鎖、時(shí)間戳、樂觀并發(fā)控制(樂觀鎖)和悲觀并發(fā)控制(悲觀鎖)是并發(fā)控制主要采用的技術(shù)手段。 鎖當(dāng)并發(fā)事務(wù)同時(shí)訪問一個資源時(shí),有可能導(dǎo)致數(shù)據(jù)不一致,因此需要一種機(jī)制來將數(shù)據(jù)訪問順序化,以保證數(shù)據(jù)庫數(shù)據(jù)的一致性。鎖就是其中的一種機(jī)制。 在計(jì)算機(jī)科學(xué)中,鎖是在執(zhí)行多線程時(shí)用于強(qiáng)行限制資源訪問的同步機(jī)制,即用于在并發(fā)控制中保證對互斥要求的滿足。 鎖的分類(oracle)一、按操作劃分,可分為 二、按鎖的粒度劃分,可分為 四、按加鎖方式劃分,可分為 DML鎖(data locks,數(shù)據(jù)鎖),用于保護(hù)數(shù)據(jù)的完整性,其中包括行級鎖(Row Locks (TX鎖))、表級鎖(table lock(TM鎖))。 DDL鎖(dictionary locks,數(shù)據(jù)字典鎖),用于保護(hù)數(shù)據(jù)庫對象的結(jié)構(gòu),如表、索引等的結(jié)構(gòu)定義。其中包排他DDL鎖(Exclusive DDL lock)、共享DDL鎖(Share DDL lock)、可中斷解析鎖(Breakable parse locks) |
|
|