亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Oracle數(shù)據(jù)庫鎖的研究

        2021-08-09 03:23:48王志國周笑宇蘇仕斌
        電子技術(shù)與軟件工程 2021年11期
        關(guān)鍵詞:事務(wù)視圖一致性

        王志國 周笑宇* 蘇仕斌

        (1.中國人民解放軍聯(lián)勤保障部隊(duì)第九六三醫(yī)院 黑龍江省佳木斯市 154002)

        (2.中國人民解放軍總醫(yī)院醫(yī)學(xué)創(chuàng)新研究部 北京市 100853)

        數(shù)據(jù)庫是多個(gè)用戶使用的共享資源。 當(dāng)多個(gè)用戶同時(shí)訪問同一數(shù)據(jù)庫時(shí),多個(gè)事務(wù)將同時(shí)訪問數(shù)據(jù)庫中的相同數(shù)據(jù),此時(shí),多個(gè)用戶很有可能共同進(jìn)行對(duì)于該數(shù)據(jù)庫的查詢、修改等操作。如果對(duì)于并發(fā)操作不加以管理,則可能會(huì)讀寫錯(cuò)誤的數(shù)據(jù),并破壞數(shù)據(jù)庫四大特性中的一致性。 鎖是數(shù)據(jù)庫對(duì)并發(fā)訪問的、在指定權(quán)限下可以進(jìn)行共同訪問的管理的機(jī)制,它用于保護(hù)以合理的方式被修改的數(shù)據(jù)。 當(dāng)事務(wù)提交或者回滾后,對(duì)于該單位進(jìn)行釋放資源,此時(shí)其他用戶可以正常的更新數(shù)據(jù)。

        1 Oralce數(shù)據(jù)庫中關(guān)于鎖的定義

        Oracle 關(guān)于鎖的機(jī)制是輕量級(jí)的,它直接將鎖作為數(shù)據(jù)塊的屬性,存儲(chǔ)在數(shù)據(jù)塊的頭中,而不是建立用于數(shù)據(jù)鎖管理的鎖列表。鎖是數(shù)據(jù)塊本身的一個(gè)屬性,每個(gè)數(shù)據(jù)塊本身將數(shù)據(jù)的信息存儲(chǔ)在自己的數(shù)據(jù)塊中。這個(gè)地方叫做ITL。每當(dāng)此數(shù)據(jù)塊上有活動(dòng)事務(wù)時(shí),它的信息都會(huì)記錄在該數(shù)據(jù)塊中,以供后續(xù)操作查詢,確保事務(wù)的一致性。在oracle 數(shù)據(jù)庫中,沒有實(shí)際屬于對(duì)象或數(shù)據(jù)的鎖。鎖的信息是物理屬性的一部分,而不是邏輯屬性。

        2 數(shù)據(jù)庫鎖的分類

        2.1 按照操作分類

        2.1.1 DML 鎖DML 鎖(數(shù)據(jù)鎖),用于確保數(shù)據(jù)庫數(shù)據(jù)的完全度,其中包括行級(jí)鎖(TX 鎖)、表級(jí)鎖(TM 鎖)。

        2.1.2 DDL 鎖

        DDL鎖(數(shù)據(jù)字典鎖),用于保護(hù)數(shù)據(jù)庫創(chuàng)建的對(duì)象的完整組成,如視圖、索引、存儲(chǔ)過程等。其中包排他DDL 鎖(Exclusive DDL lock)、共享DDL 鎖(Share DDL lock)、可中斷解析鎖(Breakable parse locks)。

        2.2 按照鎖的粒度劃分

        2.2.1 行級(jí)鎖

        行級(jí)鎖指對(duì)正在被修改的行進(jìn)行鎖定,其他用戶可以其他沒有被鎖定的數(shù)據(jù)行。當(dāng)數(shù)據(jù)庫執(zhí)行刪除、更新等操作時(shí),會(huì)自動(dòng)將該事務(wù)在表中的操作行上獲得獨(dú)占鎖。當(dāng)事務(wù)啟動(dòng)第一次修改時(shí),它將獲得TX鎖(事務(wù)鎖),并將保持該鎖,直到事務(wù)被提交(COMMIT)或被回滾(ROLLBACK)。

        在使用以下語句時(shí),Oracle 會(huì)自動(dòng)應(yīng)用行級(jí)鎖:insert, update, delete, select…for update

        2.2.2 表級(jí)鎖

        表級(jí)鎖用于確保表的結(jié)構(gòu)在其他事務(wù)對(duì)于進(jìn)行該表操作時(shí)不會(huì)改變。當(dāng)用戶對(duì)表執(zhí)行 DDL 或 DML 操作時(shí),oracle 數(shù)據(jù)庫會(huì)自動(dòng)給該表加一個(gè)表級(jí)鎖。當(dāng)行級(jí)鎖被事務(wù)操作后,事務(wù)會(huì)自動(dòng)繼承該行級(jí)鎖上級(jí)的表級(jí)鎖(共享鎖), 以防止其他事務(wù)生成的DDL 語句,通過DDL 操作,來影響記錄行的更新。

        圖1:同時(shí)用兩個(gè)賬戶對(duì)同一條數(shù)據(jù)執(zhí)行更新

        圖2:查詢當(dāng)前的TX 鎖和TM 鎖

        圖3:查詢object_id

        圖4:scott 用戶進(jìn)行回滾操作

        圖5:scott 用戶回滾后查詢v$lock 視圖

        表級(jí)鎖按照鎖定的強(qiáng)度,可以分為以下的五個(gè)類型:

        (1)行共享:禁止其他的排他鎖對(duì)表進(jìn)行鎖定;

        (2)行排他:禁止使用除該排他鎖之外的其他共享鎖、排他鎖;

        圖6:system 用戶進(jìn)行回滾操作

        圖7:system 用戶回滾后查詢v$lock 視圖

        (3)共享鎖:對(duì)當(dāng)前操作的表進(jìn)行鎖定,僅允許非該用戶的其他用戶進(jìn)行查詢操作,并且禁止其他用戶插入、更新和刪除行;

        在出現(xiàn)以下條件之一時(shí),共享鎖就會(huì)被當(dāng)前所持有的事務(wù)進(jìn)行釋放:

        A、當(dāng)事務(wù)被ROLLBACK 或COMMIT。

        B、數(shù)據(jù)庫被完全退出。

        C、程序被強(qiáng)行關(guān)閉或停止。

        (4)共享排他鎖:禁止使用共享鎖,以及限制級(jí)別更高的的數(shù)據(jù)鎖;

        (5)排他鎖:數(shù)據(jù)庫中所有鎖中對(duì)于權(quán)限限制最高的鎖,僅允許非當(dāng)前用戶查詢?cè)摫淼男?。禁止修改和鎖定表。

        3 關(guān)于鎖的驗(yàn)證

        分別采用兩個(gè)不同的賬號(hào)登錄同一數(shù)據(jù)庫,對(duì)oracle 數(shù)據(jù)庫中自帶的scott 用戶下的emp 表進(jìn)行更新操作,如圖1 所示。

        可以很明顯的看出,此時(shí)第二個(gè)賬戶并沒有進(jìn)行update 操作,這是因?yàn)閳?zhí)行update 命令時(shí),oracle 數(shù)據(jù)庫會(huì)自動(dòng)將該行數(shù)據(jù)添加行級(jí)鎖,使其他用戶無法更新該行數(shù)據(jù)。為了驗(yàn)證該說法,此時(shí)查詢v$lock 視圖,如圖2 所示。

        可以很明顯的看出,v$lock 視圖中,添加了關(guān)于該行語句的TX 鎖和TM 鎖,為了進(jìn)一步確認(rèn)上述鎖是由emp 表所產(chǎn)生的,我們通過查詢dba_objects 表來進(jìn)行進(jìn)一步的驗(yàn)證,如圖3 所示。

        明顯看到,該進(jìn)程ID 號(hào)是由于對(duì)于dba_object 表進(jìn)行加鎖所產(chǎn)生的,為了進(jìn)一步驗(yàn)證說法,此時(shí)對(duì)兩個(gè)事務(wù)均進(jìn)行回滾操作,如圖4 所示。

        3.1 scott用戶進(jìn)行回滾操作

        此時(shí)可以很明顯的看出,當(dāng)?shù)谝粋€(gè)用戶中的update 被回滾后,TX 鎖瞬間被解鎖,資源被釋放,才使得第二個(gè)用戶的update 得以成功執(zhí)行,此時(shí)查看一下v$lock 視圖,可以發(fā)現(xiàn),此時(shí)TX 鎖的ID 號(hào)已經(jīng)改變,且原來的ID 號(hào)已經(jīng)消失,如圖5 所示。

        3.2 system用戶進(jìn)行回滾操作

        如圖6 所示。

        此時(shí)查詢v$lock 視圖,可以很明顯的發(fā)現(xiàn),所有的TX 鎖和TM 鎖均已經(jīng)消失,如圖7 所示。

        4 死鎖

        4.1 死鎖的定義

        死鎖是指在兩個(gè)或多個(gè)進(jìn)程執(zhí)行過程中,由于資源競(jìng)爭(zhēng)或通信原因而導(dǎo)致的阻塞現(xiàn)象。如果沒有外力,只能互相等待分配資源,所有的進(jìn)程都無法繼續(xù)運(yùn)行。

        4.2 死鎖的產(chǎn)生原因

        在兩個(gè)或多個(gè)任務(wù)中,如果每個(gè)任務(wù)都互相對(duì)于其他已經(jīng)被試圖鎖定的任務(wù)進(jìn)行了加鎖的操作,此時(shí)這些任務(wù)會(huì)互相等待對(duì)方進(jìn)行資源分配,造成互相之間影響的阻塞現(xiàn)象,因此產(chǎn)生了死鎖。例如:事務(wù)A 對(duì)于行 1 的共享鎖進(jìn)行獲取。事務(wù) B 對(duì)于行 2 的共享鎖進(jìn)行獲取。此時(shí)事務(wù)A,因?yàn)榈却聞?wù)B 完成并釋放事務(wù)A 對(duì)于行2現(xiàn)有的共享鎖,從而產(chǎn)生了排他鎖,此時(shí)事務(wù)B,因?yàn)榈却聞?wù)A完成并釋放事務(wù)B 對(duì)于行2 現(xiàn)有的共享鎖,從而也產(chǎn)生了排他鎖。但是由于事務(wù)A 等待事務(wù)B 完成之后才能進(jìn)行釋放該行級(jí)鎖,事務(wù)B 也在等待事務(wù)A 完成之后才能釋放該行級(jí)鎖,兩個(gè)事務(wù)互相阻塞,產(chǎn)生了閉環(huán),所以造成了死鎖。這就是死鎖中的循環(huán)依賴:事務(wù) A 和事務(wù)B 之間相互依賴,從而產(chǎn)生了閉環(huán),導(dǎo)致了死鎖的產(chǎn)生。

        根據(jù)Oracle 數(shù)據(jù)庫的機(jī)制,該數(shù)據(jù)庫會(huì)自動(dòng)發(fā)現(xiàn)數(shù)據(jù)庫中產(chǎn)生的死鎖,并通過破壞死鎖條件之一進(jìn)行釋放部分資源,從而對(duì)某個(gè)事務(wù)的全部鎖進(jìn)行釋放,或直接消除代價(jià)最小的事務(wù),從而可以使其他單位的事務(wù)繼續(xù)運(yùn)行。

        4.3 避免死鎖的措施

        (1)在UPDATE 和DELETE 后,應(yīng)及時(shí)的進(jìn)行COMMIT 或ROLLBACK 操作,以免表或行的鎖定時(shí)間過長(zhǎng),造成死鎖。

        (2)當(dāng)多個(gè)事務(wù)同時(shí)對(duì)于某個(gè)數(shù)據(jù)表進(jìn)行操作時(shí),此時(shí)不要使用共享鎖。相反,請(qǐng)使用共享更新鎖,以便其他用戶可以使用行級(jí)鎖來提高并行性。

        (3)在高應(yīng)用程序負(fù)載期間不適合修改相關(guān)的數(shù)據(jù)結(jié)構(gòu)(表,視圖,觸發(fā)器,存儲(chǔ)過程等)。

        5 結(jié)語

        Oracle 數(shù)據(jù)庫之所以能成為全世界最廣泛使用的數(shù)據(jù)庫之一,原因之一就是因?yàn)樗鼘?duì)于事務(wù)的原子性、一致性、隔離性、持久性的保障,而鎖是oracle 數(shù)據(jù)庫為了確保數(shù)據(jù)的一致性、實(shí)現(xiàn)并發(fā)控制的非常重要的技術(shù)。在日常oracle 數(shù)據(jù)庫的維護(hù)和開發(fā)中,要深刻理解鎖的概念,并確保開發(fā)過程中不要出現(xiàn)死鎖,這樣才能確保數(shù)據(jù)更加健壯、穩(wěn)定。

        猜你喜歡
        事務(wù)視圖一致性
        “事物”與“事務(wù)”
        基于分布式事務(wù)的門架數(shù)據(jù)處理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
        關(guān)注減污降碳協(xié)同的一致性和整體性
        公民與法治(2022年5期)2022-07-29 00:47:28
        注重教、學(xué)、評(píng)一致性 提高一輪復(fù)習(xí)效率
        IOl-master 700和Pentacam測(cè)量Kappa角一致性分析
        河湖事務(wù)
        5.3 視圖與投影
        視圖
        Y—20重型運(yùn)輸機(jī)多視圖
        SA2型76毫米車載高炮多視圖
        美女裸体无遮挡免费视频国产| 亚洲国产一区二区三区精品 | 国产a级精精彩大片免费看| 综合久久久久6亚洲综合| 日本成人中文字幕亚洲一区| 不卡一区二区三区国产| 狼人伊人影院在线观看国产| 国产动作大片中文字幕| 亚洲乱妇老熟女爽到高潮的片| 国产极品喷水视频| 国产成人高清亚洲一区二区| 国产高清成人在线观看视频| 日本老熟妇50岁丰满| 久久久久亚洲AV无码专| 一区二区三区av资源网| 国产精品久久久久久久久电影网| 激烈的性高湖波多野结衣| 极品熟妇大蝴蝶20p| 人妻精品一区二区三区视频| 国产精品亚洲一区二区三区久久 | av在线手机中文字幕| 麻豆精品在线视频观看| 免费无码精品黄av电影| 性生交大全免费看| 天堂√最新版中文在线天堂| 无码av专区丝袜专区| 亚洲乱码一区二区av高潮偷拍的| 99久久精品免费观看国产| 国产伦精品一区二区三区视| 一区二区三区在线观看视频免费| 凌辱人妻中文字幕一区| 无遮挡又黄又刺激又爽的视频| 国产成人国产在线观看入口| 永久免费中文字幕av| 亚洲黄色精品在线播放| 国产片精品av在线观看夜色| 久久精品国产精品青草色艺| 99色网站| 久久开心婷婷综合中文 | 久久er99热精品一区二区| 亚洲男同志gay 片可播放|