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

首頁 > 數據庫 > Oracle > 正文

ORACLE7數據庫并發控制技術的研究及其應用

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

  摘 要 數據庫鎖技術作為保證數據并發性和數據一致性的有效手段,是RDBMS的要害技術之一。作 者以Oracle7數據庫在編組站的應用為例,對關系數據庫治理系統的數據庫鎖的 種類及其應用進行了研究。
  要害詞 并發控制 DML鎖 數據庫 ORACLE 7
  
  1 ORACLE數據庫中的各類鎖
  
  ORACLE在各種不同的開發應用環境中,根據封鎖對象和封鎖方式的不同,可劃分出多種不同 類型的鎖,見表1。
  
  表1 不同類型的鎖
   ORACLE7數據庫并發控制技術的研究及其應用(圖一)
  實際上,ORACLE中任何一種鎖的操作最終都是調用封鎖治理程序來完成,而它是ORACLE內核 數據庫中的一個組成部分,具有LOCK與UNLOCK兩大功能。
  1.1 LOCK算法
  1.1.1 一般調用格式:LOCK(s-jd,locktype,lockmode,Tid,NOWAIT)
  其中:s-jd是封鎖對象的內部標識
  locktype是封鎖類型
  lockmode是封鎖模式
  Tid是事務對象標識號
  NOWAIT:為“N”時等待,為“Y”時不等待
  1.1.2 基本步驟
  a. L.1 申請空隊列塊,若暫不為空,則繼續循環檢測,時間等待10 s;若申請不到,給出 錯誤信息;若申請到了,則填寫封鎖隊列塊;
  b. L.2 在活動隊列中查找有沒有與s-jd相同的塊,若無,則填寫ACHIVE標志,然后掛入 活動隊列,并退出。若有則進入L.3進行判定;
  c. L.3 LOCKTYPE=“DDL”嗎?若是,即按字典鎖相容性進行判定;若沖突,則給出錯誤信 息 ;若不沖突,則填寫ACHIVE標志,然后掛入活動隊列并返回;當LOCKTYPE=“DML”時,則轉 入L.4,若LOCKTYPE為內部鎖時,則陷入等待;
  d. L.4進行DML鎖相容性判定,若不沖突,填寫ACHIVE標志,然后插入活動鎖隊列并返回; 若沖突,則判定其它Tid是否相同,若相同,給出出錯信息;若不同,則進入L.5;
  f. L.5進入判定NOWAIT,當為“N”時,則退出并給出錯誤信息,若為“Y”時,則進入死 鎖 檢測;若死鎖,則給出錯誤信息;若不出現死鎖,則填寫WAIT標志,同時還填相應的WAIT -POINT,然后插入等待隊列并返回。
  1.2 UNLOCK的算法
  一般調用格式:UNLOCK(Tid)
  a.U.1在活動鎖隊列中查找擁有Tid的鎖,然后將該鎖釋放,并掛入空閑隊列;
  b.U.2等待鎖隊列中喚醒(激活)相應的等待鎖。
  1.3 死鎖檢測算法
  在ORACLE中提供了有效的死鎖檢測機制。在檢測死鎖中存在兩個問題:(1)死鎖判定, 即等 待回路的判定;(2)選擇退出事務。選擇退出事務的原則是執行修改數目最小者,即以 記錄 為單位進行增、刪和改記錄個數最少的事務被選為退出事務。下面給出死鎖處理的基本算法 :
  . TD.1-當新的等待鎖到來時,即把Tid放入集合S中,然后取WAIT-POINT賦于P;
  . TD.2-判定P.Tid ∈ S嗎?若是,則進行調用回收資源,并喚醒相應事務,然后返回, 否則進入TD.3;
  . TD.3-在等待隊列中尋找P.Tid所擁有的等待塊,若有,則把P.Tid并入集合S中,同時 將WAIT-POINT賦于P,然后轉到TD.2繼續循環;否則,不發生死鎖,返回。
  從以上鎖的分類以及LOCK與UNLOCK的算法中,可以看出ORACLE核心實現的封鎖治理程序與死 鎖診斷是簡便靈活及有效的。
  2 SYIS的并發控制技術
  
  2.1 事務控制
  事務控制SYIS為事務控制提供3種調用方法:開始事務、中止事務、結束事務。開始事 務用以標志一組邏輯上有關的SYIS的開始;結束事務用來完成一個事務并對受影響的數據文 件做適當的修改;中止事務用來刪除自一個活動的事務開始以來執行的所有操作并終止這個 事務。任何時候當應用訪問事務內的基表時,ORACLE就為該應用鎖定該基表,直到事務結束 或異常終止,而其他用戶可以在非事務內和非鎖定狀態下讀該基表。
  一般情況下,當開始事務時,用戶可以指定為等待鎖定或非等待鎖定。當指定為等待鎖定時 ,假如有2臺終端試圖訪問同一個事務內的文件,ORACLE將鎖定第二臺終端,直到第一個用 戶結束或中止事務,若指定為非等待鎖,則第二個用戶可以檢測到死鎖的信息,這時系統管 理員作出相應的處理。由于事務操作是對基表級鎖定,因此很輕易產生死鎖。
  2.2 被動并發性
  被動并發性控制方法答應讀取與更新記錄而不用執行任何鎖定或事務,如 果一個記錄在用戶的程序讀取的時間或試圖更新的時間之間有變動,則返回錯誤信息。
  2.3 記錄鎖定
  當SYIS的用戶訪問一個基表內的記錄時,用戶可以鎖定希望封鎖的記錄。一 旦被用戶指定封鎖的記錄,其他用戶可以不帶鎖定地讀取記錄。
  記錄鎖定有單個和多個鎖定。對這兩類記錄可指定為等待鎖定或非等 待鎖定。具體辦法是把一個值與任一“取”、“異步”、“打開”或者“開始事務”的操作 碼相加,列出下表的鎖定偏置值
  
  表2 鎖定偏置值
   ORACLE7數據庫并發控制技術的研究及其應用(圖二)
  對于單個記錄鎖定,在某一時刻只能鎖定基表中的一個記錄,若對這個基表發出帶有一個鎖 定的另一個“取”的操作、更新或刪除這個被鎖定的記錄,或者發出一個“解鎖”命令,于 是ORACLE就解放這個鎖定。
  對于多個記錄鎖定,答應一個應用在一個基表中鎖定多個記錄,并隨后在必要時對那些 記錄進行更新或刪除,這于單個記錄不同的是更新記錄或發出另一個帶有多記錄鎖定的“取 ”操作時,不解鎖該記錄,只有通過顯式“解鎖”操作,這個鎖才被解除。 這種等待解鎖 不返回狀態碼,直到該鎖定成功,而非等待鎖定,當另一個用戶保持記錄鎖定時,立即給用 戶返回一個忙的狀態。

  由于DML語句會自動獲得所需要的鎖,因此,在應用程序中,可以直接使用DML語句,而不必 考慮數據庫鎖,但是,由于數據庫鎖是自動獲得的,因此用戶無法對其進行判定,尤其是在 有長大事務或者對基表DML操作較多的應用中,輕易出現長時間等待鎖的情況,如圖1所示。
   ORACLE7數據庫并發控制技術的研究及其應用(圖三)
  圖1 長時間等待鎖情況
  
  事務2在時間2對DEPT表進行更新,但由于事務1對基表DEPT有鎖,故須等待,直到時間3時事 務1回退或提交,事務2的語句才能執行,假如時間1與時間2間隔較長,則事務2將出現 較長的等待時間。
  為了避免自動使用數據庫鎖造成的事務長時間等待其他事務釋放鎖的情況,可以采用手工獲 得數據庫鎖的辦法,手工獲得數據庫鎖的方法是在對數據更新操作(INSERT、UPDATE、DELET E)之前,先利用獲得鎖的DML語句來檢查所要操作的基表是否有數據鎖,再決定是否進行進 一步的數據更新操作。見圖2。
   ORACLE7數據庫并發控制技術的研究及其應用(圖四)
  圖1 長時間等待鎖的情況
  
  由于在時間1時事務1對基表DEPT加鎖,因此,在時間2時事務1手工獲得鎖失敗(產生ORACLE 例外ORA-00054),表明對基表DEPT的deptno=10的記錄的更新操作與其他事務沖突,而當時 間3事務1進行回退或提交后,事務2就可以實現對DEPT基表的手工加鎖(時間4)。這樣,便可 以根據手工獲得鎖的情況在決定下一步的操作而不必一直等待其他事務釋放所需要的鎖。
  
  3 兩階段非等待鎖定機制
  
  在SYIS中,稱交易為事務,現在將有關概念術語列述如下:(1)事務:在批處理或運程批處理中的一個作業或作業步;或一個工作站與完成一個非凡動 作或結果的其它設備間的一次數據交換;或對數據庫文件的一組更改;(2)事務粒度:一次事務中所占有的共享資源量的多少;(3)事務回滾:事務失敗時,要恢復事務所執行的所有動作到事務初始狀態,就象事務沒有發生 過一樣;(4)事務封鎖:為執行事務中的操作,對需要的共享資源進行的封鎖;(5)事務提交:事務成功時,使操作及結果數據能有效地操作。
  在傳統的兩步鎖并發控制協議中,事務的執行分兩個階段:第一階段獲得所有的數據庫源, 即對所有的數據加鎖;第二階段對數據資源解鎖。在事務第一次解鎖后,就不能再對數據資 源加鎖。這樣,實際上,有一些數據資源被不必要地鎖住了太長時間,顯然,這造成了數據 資 源的閑置。利用我們討論的數據庫一致性劃分,可以在一定程度上解決問題:一個事務對于 同一個原子數據集中的數據項滿足前面所述的加鎖解鎖的時序關系。而對一個原子數據集中 的數據開始解鎖后,同一事務還可以對其它原子數據集的數據加鎖。這在一定程度上避免了 資源的閑置,提高了并發度,相應地提高了系統的性能。
  ORACLE7數據庫并發控制技術的研究及其應用(圖五)
  
  在嵌套事務模型中,往往是父事務只訪問一個原子數據的數據集中的數據,而子事務訪問另 一個原子數據集的數據。這樣,可以只保證各原子數據集的一致性,從而也就保證了整個數 據庫的一致性。
  在ORACLE數據庫中,數據的一致性、完整性、可恢復性和并發性,使事務成為數據庫系統的 一個基本的工作單位,具體說是對訪問的不可再分性的操作系統。具有以下4個基本性質: a.事務的不可再分性;b.事務的持久性;c.事務的串行性;d.事務的隔離性。
  二階段非等待封鎖機制的實現是在SYIS提供的事務和封鎖調用基礎上,在應用程序級解決了 可能出現死鎖的問題,無論數據庫系統是否提供了死鎖檢測和保護功能,此機制都能很好地 處理各進程之間的事務并發控制。
  定義:對所有事務都滿足下述兩條件的協議被成為二階段封鎖協議:(1)在對任何數據單元執行操作之前,事務首先對該數據單元加鎖;(2)若對一個數據單元開鎖后,事務不再對任何其他單元進行加鎖。
  定理:滿足二階段封鎖協議的事務的并發執行是可串行化的,即保證了事務的串行性。
  二階段非等待鎖定機制按以下步驟實現:LN.0 初值V.delay=0;LN.1 延時2V.delay;LN.2 非等待開始事

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岗巴县| 阜康市| 两当县| 邛崃市| 和政县| 平塘县| 阿拉尔市| 眉山市| 手机| 新泰市| 中阳县| 潜山县| 册亨县| 莎车县| 萍乡市| 叶城县| 天全县| 奇台县| 无极县| 琼中| 雷州市| 工布江达县| 肥城市| 明星| 福鼎市| 察隅县| 剑河县| 平泉县| 江油市| 镇坪县| 博野县| 崇左市| 鄂伦春自治旗| 旬邑县| 都江堰市| 石首市| 平泉县| 公安县| 天气| 济阳县| 岳池县|