亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4041 | 回復(fù): 1
打印 上一主題 下一主題

[轉(zhuǎn)貼] Informix數(shù)據(jù)庫的鎖技術(shù) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2003-01-04 18:18 |只看該作者 |倒序?yàn)g覽
                Informix數(shù)據(jù)庫的鎖技術(shù)
                   作者:不詳
   

INFORMIX使用鎖技術(shù)解決在多用戶訪問數(shù)據(jù)庫情況下,對同一對象訪問的並發(fā)控制問題。INFORMIX
支持復(fù)雜的、可伸縮性的鎖技術(shù)。

鎖的類型

INFORMIX有三種不同類型的鎖。它們在不同的情況下使用。

1. SHARED鎖

SHARED鎖只保留對象的可讀性。當(dāng)鎖存在時(shí),對象不能改變。多個(gè)程序可對同個(gè)對象加SHARED鎖。

2. EXCLUSIVE鎖

只能使單個(gè)程序使用。在程序要改變對象時(shí)使用。當(dāng)其他鎖存在時(shí),EXCLUSIVE鎖不能使用。當(dāng)使用了E
XCLUSIVE 鎖,其他鎖不能用同一對象。

3. PROMOTABLE鎖

實(shí)現(xiàn)更新的目的。PROMOTABLE鎖可以放在已經(jīng)有SHARED鎖的記錄,但不能放在已經(jīng)有PROMOTABLE鎖和EXCLUSIVE
鎖的地方。當(dāng)記錄上無其他鎖(含SHARED 鎖)情況下,這時(shí)在程序準(zhǔn)備改變鎖的記錄時(shí),PROMOTABLE鎖可以提
升為EXCLUSIVE鎖。如果在已有SHARED鎖的記錄上設(shè)置了PROMOTABLE鎖,在PROMOTABLE鎖可以提升到EXCLUSIVE鎖
之前需要刪除SHARED 鎖。PROMOTABLE鎖只能在INFORMIX Universal Server中支持。

鎖的范圍

INFORMIX對數(shù)據(jù)鎖定提供了三種不同的方式,范圍由大到小分別是數(shù)據(jù)庫、表、記錄級鎖。使用的時(shí)機(jī)要看應(yīng)
用狀況而定。

1. 數(shù)據(jù)庫級鎖

你可以用CONNECT, DATABASE, 或 CREATE DATABASE語句打開數(shù)據(jù)庫。打開數(shù)據(jù)庫的操作就在數(shù)據(jù)庫上設(shè)置了SHARED
鎖。只要程序打開一個(gè)數(shù)據(jù)庫,SHARED鎖就會阻止其他程序刪除數(shù)據(jù)庫或在數(shù)據(jù)庫上設(shè)置EXCLUSIVE鎖。你可以用語
句DATABASE database name EXCLUSIVE鎖定整個(gè)數(shù)據(jù)庫。若此時(shí)其他用戶正在使用該數(shù)據(jù)庫,該操作將返回錯(cuò)誤。
一旦設(shè)置了EXCLUSIVE鎖,其他程序就不能打開數(shù)據(jù)庫,因?yàn)榇蜷_時(shí)要放置一個(gè)SHARED鎖。只有數(shù)據(jù)庫關(guān)閉時(shí),數(shù)據(jù)
庫鎖才釋放。你可以用DISCONNECT或CLOSE DATABASE顯示地處理,也可以運(yùn)行其他的DATABASE語句隱含的處理。一般
數(shù)據(jù)庫級EXCLUSIVE鎖是獨(dú)佔(zhàn)數(shù)據(jù)庫資源,防止其他程序訪問數(shù)據(jù)庫。它使得程序非常簡單,不會產(chǎn)生並發(fā)效果。常
用在非高峰時(shí)期要改變大量數(shù)據(jù)時(shí)如數(shù)據(jù)庫備份過程。

2. 表級鎖

INFORMIX提供兩種模式表級鎖:EXCLUSIVE MODE 和SHARE MODE。你可以鎖整個(gè)表。在某些情況下,這個(gè)操作是自動
進(jìn)行。當(dāng)INFORMIX處理下列語句時(shí),一般鎖整個(gè)的表:ALTER INDEX 、ALTER TABLE 、CREATE INDEX、DROP INDEX 、
RENAME COLUMN、RENAME TABLE 。該語句結(jié)束或事務(wù)結(jié)束會釋放該鎖。在某些查詢語句中,INFORMIX也自動鎖整個(gè)表。
你可以用LOCK TABLE語句顯示地鎖整個(gè)表。該語句允許你對整個(gè)表設(shè)置EXCLUSIVE鎖或SHARED鎖。當(dāng)你程序從表中讀取
數(shù)據(jù)時(shí),SHARED鎖防止表中數(shù)據(jù)更新。INFORMIX Universal Server 通過設(shè)置隔離級別實(shí)現(xiàn)更大程度並發(fā)數(shù)據(jù)保護(hù)。
表級EXCLUSIVE鎖防止對同個(gè)表的並發(fā)使用。因此,如果其他許多程序要使用該表時(shí),系統(tǒng)性能會受到嚴(yán)重影響。類
似數(shù)據(jù)庫級EXCLUSIVE鎖,表級EXCLUSIVE鎖常用在非高峰時(shí)期要改變大量數(shù)據(jù)時(shí)。例如,有些應(yīng)用在高峰期間並不更
新表,它們可以在非高峰期間定期以批處理方式更新。

通過UNLOCK TABLE table name 解除鎖。當(dāng)存在事務(wù)時(shí),事務(wù)結(jié)束時(shí)解除鎖。

3. 記錄級、頁級、鍵字級鎖

表的一個(gè)記錄是可設(shè)置鎖的最小對象。一個(gè)程序可以鎖一個(gè)記錄或記錄的集合,同時(shí)其他程序可以操作同一個(gè)表的其
他記錄。Universal Server 以磁盤頁面(disk pages)為單位存儲數(shù)據(jù)。一個(gè)磁盤頁面包含一個(gè)或多個(gè)記錄。在有
些情況下,頁級鎖比單個(gè)鎖更好些。其他數(shù)據(jù)庫服務(wù)器可能不存在頁級、鍵字級鎖。

在Universal Server上,當(dāng)你創(chuàng)建表時(shí),你可以選擇使用記錄級鎖或頁級鎖。其他的數(shù)據(jù)庫服務(wù)器不提供這種選擇。
頁級、記錄級鎖有相同的效果。當(dāng)Universal Server需要鎖一個(gè)記錄時(shí),根據(jù)表創(chuàng)建時(shí)的鎖模式,鎖這個(gè)記錄或記錄
所在的頁面。在一定情況下,數(shù)據(jù)庫服務(wù)器需要鎖一個(gè)不存在的記錄。它的效果相當(dāng)在記錄將要存在的地方放一個(gè)
鎖。當(dāng)表使用記錄鎖時(shí),對假想的記錄使用鍵字鎖。當(dāng)表使用頁級鎖時(shí),含有或可能含有鍵字的索引頁將被設(shè)置鍵級鎖。
鎖的時(shí)期

程序控制數(shù)據(jù)庫級鎖的時(shí)期。數(shù)據(jù)庫關(guān)閉時(shí),數(shù)據(jù)庫鎖級也就釋放。表級、記錄級、索引級鎖的時(shí)期依賴使用的SQL
語句以及是否使用事務(wù)。如果數(shù)據(jù)庫沒有使用事務(wù),也就是說,事務(wù)日志不存在並且你沒有使用COMMIT WORK語句,當(dāng)
運(yùn)行UNLOCK TABLE語句時(shí),表級鎖就釋放。當(dāng)使用了事務(wù)時(shí),事務(wù)結(jié)束,表級、記錄級、索引級鎖都釋放。修改時(shí)鎖的
處理

當(dāng)數(shù)據(jù)庫服務(wù)器通過一個(gè)更新遊標(biāo)取一條記錄時(shí),它在該記錄上設(shè)置一個(gè)PROMOTABLE鎖。如果這個(gè)動作成功,數(shù)據(jù)庫服
務(wù)器知道其他程序不能改變此記錄。因?yàn)镻ROMOTABLE鎖不是獨(dú)佔(zhàn)的,其他程序能夠繼續(xù)讀這條記錄。由在取此記錄的
程序執(zhí)行UPDATE、DELETE語句或簡單地取下一條記錄之前,它可能花一些時(shí)間。這樣就提高了性能。當(dāng)它改變一個(gè)記錄
時(shí),數(shù)據(jù)庫服務(wù)器在這條記錄上設(shè)置一個(gè)EXCLUSIVE鎖。如果它已經(jīng)有一個(gè)PROMOTABLE鎖,它將鎖改為EXCLUSIVE狀態(tài)。

EXCLUSIVE鎖的時(shí)期依賴是否使用事務(wù)。如果沒有使用事務(wù),被修改的記錄寫到磁盤上就會釋放該鎖。當(dāng)使用了事務(wù)時(shí),
鎖就會保持到事務(wù)的結(jié)束。這個(gè)動作防止其他程序使用可能回滾到原來狀態(tài)的記錄。

當(dāng)使用了事務(wù)時(shí),只要刪除記錄鍵級鎖就會設(shè)置。使用鍵級鎖解決下列錯(cuò)誤:程序A刪除一個(gè)記錄,程序B插入有同樣鍵的
記錄。程序A回滾事務(wù),使數(shù)據(jù)庫服務(wù)器恢復(fù)了刪除的記錄,這時(shí)程序B插入的記錄怎辦?通過鎖索引,數(shù)據(jù)庫服務(wù)器等
到程序A提交事務(wù)時(shí)才插入記錄。

由 Universal Server數(shù)據(jù)庫服務(wù)器管理自己的鎖,所以它能提供不同類型的鎖。其他的數(shù)據(jù)庫服務(wù)器是通過操作系統(tǒng)
的特性實(shí)現(xiàn)鎖,所以不能提供多種選擇。有些操作系統(tǒng)通過操作系統(tǒng)服務(wù)方式向外提供鎖函數(shù)。在這些系統(tǒng),數(shù)據(jù)庫支持
SET LOCK MODE語句。而有些操作系統(tǒng)不支持內(nèi)核級的特性,數(shù)據(jù)庫這時(shí)通過在數(shù)據(jù)庫目錄下產(chǎn)生小文件實(shí)現(xiàn)鎖。這些文
件帶有.lok綴。如果你的程序使用單個(gè)SELECT語句或沒有用FOR UPDATE聲明的遊標(biāo)提取一個(gè)記錄,此記錄不管是否被
一個(gè)未完成的交易上鎖會馬上被提取。這樣能產(chǎn)生最好的性能。當(dāng)你使用FOR UPDATE聲明的遊標(biāo)時(shí),它在提取前將當(dāng)前
記錄上鎖。如果當(dāng)前記錄已經(jīng)有鎖,隨作選擇模式的不同,程序會等待或返回錯(cuò)誤。當(dāng)取下一個(gè)記錄時(shí),數(shù)據(jù)庫看當(dāng)前
記錄是否更新(使用帶WHERE CURRENT OF 的UPDATE  


鎖的模式

鎖的模式?jīng)Q定程序遇到被鎖的數(shù)據(jù)會產(chǎn)生怎樣的結(jié)果。當(dāng)程序要提取或修改一個(gè)上鎖的記錄時(shí),會有下面幾種情況:

1、 數(shù)據(jù)庫馬上通過SQLCODE變量或SQLSTATE結(jié)構(gòu)給程序返回一個(gè)錯(cuò)誤代碼。

2、 在數(shù)據(jù)解鎖前,數(shù)據(jù)庫將程序掛起。

3、數(shù)據(jù)庫將程序掛起一段時(shí)間。如果鎖還未解,數(shù)據(jù)庫給程序返回一個(gè)錯(cuò)誤代碼。

你可以通過SET LOCK MODE模式選擇以上結(jié)果。

如果你喜歡程序等待(對大多數(shù)程序而言這是最好的選擇),運(yùn)行下列語句:SET LOCK MODE TO WAIT。

當(dāng)設(shè)置了鎖模式,程序常忽視其他並發(fā)程序的存在性。如果程序需要訪問其他程序已上鎖的記錄時(shí),它等待別的程序
解鎖,然繼續(xù)。延遲的時(shí)間常不可預(yù)測。

等待解鎖不利的一面就是可能會等待很長時(shí)間。如果不能接受很長延遲,程序可以運(yùn)行下列語句:SET LOCK MODE TO  
NOT WAIT選擇不等待。當(dāng)程序需要一個(gè)鎖記錄時(shí),它馬上返回一個(gè)錯(cuò)誤代碼,且當(dāng)前的SQL語句終止。這時(shí),程序必須回
滾當(dāng)前的交易再試一次。程序開始時(shí),數(shù)據(jù)庫初始設(shè)置為不等待。

當(dāng)你使用UNIVERSAL SERVER時(shí),你有另外的選擇。你可以讓數(shù)據(jù)庫設(shè)置等待時(shí)間的上限。你可用下列語句:SETLOCK MODE  
TO WAIT 18讓數(shù)據(jù)庫有18秒等待上限。若期間鎖還沒有解開,將返回錯(cuò)誤代碼。

在每個(gè)程序都選擇了鎖等待模式情況下,有可能出現(xiàn)死鎖。死鎖是程序之間相互阻塞,每個(gè)程序在其他程序要訪問的對象
上設(shè)置了鎖。UNIVERSAL SERVER在單個(gè)網(wǎng)絡(luò)服務(wù)器情況下會馬上檢測到死鎖。如果程序選擇了鎖等待模式,通過給程序返
回錯(cuò)誤代碼,你就知道你遇到了死鎖。而在多個(gè)數(shù)據(jù)庫服務(wù)器的情況下,UNIVERSAL SERVER不能馬上檢測到。每個(gè)數(shù)據(jù)庫
服務(wù)器都設(shè)置鎖等待的上限。如果超時(shí),數(shù)據(jù)庫服務(wù)器就認(rèn)為發(fā)生了死鎖且返回相關(guān)的錯(cuò)誤代碼。數(shù)據(jù)庫管理員可以設(shè)置
和修改等待時(shí)間的上限。


論壇徽章:
11
數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-06-25 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-06-24 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-05-03 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-04-21 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-01-23 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-12-03 06:20:00綜合交流區(qū)版塊每周發(fā)帖之星
日期:2015-12-02 15:03:53數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-10-19 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-08-20 06:20:002015年辭舊歲徽章
日期:2015-03-03 16:54:15數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-07-30 06:20:00
2 [報(bào)告]
發(fā)表于 2003-01-04 21:05 |只看該作者

[轉(zhuǎn)貼] Informix數(shù)據(jù)庫的鎖技術(shù)

UP
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP