鄧永志
(南陽(yáng)市中心血站,河南 南陽(yáng)473000)
眾所周知,數(shù)據(jù)庫(kù)系統(tǒng)的核心是信息管理,基本工作包括聯(lián)機(jī)的分析處理、聯(lián)機(jī)的事務(wù)處理、突發(fā)事件的應(yīng)對(duì)等,是計(jì)算機(jī)技術(shù)在具體的社會(huì)活動(dòng)中得到運(yùn)用的一個(gè)重要表現(xiàn)。
數(shù)據(jù)庫(kù)技術(shù)通過(guò)與相關(guān)技術(shù)的結(jié)合,已經(jīng)從單一的商用數(shù)據(jù)庫(kù)技術(shù)發(fā)展成為商用、分布式、并行式等類型的數(shù)據(jù)庫(kù)技術(shù)。數(shù)據(jù)壓縮、海量數(shù)據(jù)的存儲(chǔ)、寬帶網(wǎng)絡(luò)、高速網(wǎng)絡(luò)計(jì)算機(jī)技術(shù)、多媒體技術(shù)、網(wǎng)絡(luò)技術(shù)等方面的發(fā)展對(duì)數(shù)據(jù)庫(kù)技術(shù)的發(fā)展有一定的促進(jìn)作用。多媒體數(shù)據(jù)處理技術(shù)是一門(mén)涉及面非常廣泛的綜合性信息處理技術(shù),與語(yǔ)音圖形圖像的識(shí)別、語(yǔ)音控制等都有著非常密切的關(guān)系。到目前為止,還沒(méi)有公認(rèn)的統(tǒng)一數(shù)據(jù)模型與標(biāo)準(zhǔn)規(guī)范。
在Sybase數(shù)據(jù)庫(kù)里,人們一般使用服務(wù)模式的多用戶數(shù)據(jù)庫(kù),這種數(shù)據(jù)庫(kù)能過(guò)接收并且處理很多用戶的特別要求。所以,Sybase數(shù)據(jù)庫(kù)所帶來(lái)的最大效用就是能夠同時(shí)處理、解決很多的問(wèn)題。
Sybase的服務(wù)程序是應(yīng)用了多線程的一種系統(tǒng)結(jié)構(gòu),多線程是在一起共同運(yùn)行的,運(yùn)行時(shí)會(huì)有很多的用戶來(lái)請(qǐng)求,從數(shù)據(jù)庫(kù)里調(diào)用數(shù)據(jù)需要很多資料來(lái)發(fā)送,并存儲(chǔ)發(fā)出去的同樣的數(shù)據(jù)。因?yàn)闀?huì)有多個(gè)用戶都是一樣的數(shù)據(jù),會(huì)導(dǎo)致數(shù)據(jù)的不一致,有時(shí)數(shù)據(jù)共享會(huì)出現(xiàn)丟失數(shù)據(jù)的情況,甚至可能會(huì)讀出錯(cuò)誤的數(shù)據(jù),這樣就會(huì)給用戶造成很大的不便,不能夠重新找尋數(shù)據(jù)。所以,Sybase數(shù)據(jù)庫(kù)里的服務(wù)程序應(yīng)用了封鎖的程序,把這些要處理的問(wèn)題當(dāng)作是維修方面的很重要一個(gè)項(xiàng)目,來(lái)阻止其他用戶訪問(wèn)到了那些不一致的數(shù)據(jù)。服務(wù)程序因此而推出了3種基本的方法:共享的鎖定程序、更新式的鎖定程序、排斥性的程序。這些程序負(fù)責(zé)3種基本的隔離程序,提出了兩種程度的鎖,有頁(yè)面級(jí)別的鎖定程序和表示級(jí)別的鎖定程序,大的系統(tǒng)會(huì)根據(jù)情況的不同而設(shè)計(jì)出不同類型級(jí)別的鎖定程序。至于用戶這一方面來(lái)說(shuō),可以通過(guò)并發(fā)的程度和準(zhǔn)確的程度需要選擇不一樣的鎖定程序。經(jīng)過(guò)封鎖的程序,進(jìn)度程序可以在得到對(duì)數(shù)據(jù)進(jìn)行封鎖以后,阻止其他的進(jìn)程影響數(shù)據(jù)的正常使用,使數(shù)據(jù)得到了一致性的處理。
數(shù)據(jù)庫(kù)并發(fā)的能力指的是在一個(gè)相同的時(shí)間里數(shù)據(jù)能夠同時(shí)進(jìn)行訪問(wèn)。一般情況下,Sybase會(huì)有并發(fā)控制能力,但事實(shí)上,需要全面看待這種并發(fā)控制的功能,有用戶想要進(jìn)行同樣操作時(shí),可以從PB里的進(jìn)行設(shè)置到并發(fā)控制。并發(fā)控制要在用戶數(shù)據(jù)進(jìn)行改正的時(shí)候,不會(huì)被蓋住或者改變。
封鎖程序的運(yùn)行要在某個(gè)特定的時(shí)間進(jìn)行固定的操作,需要把很多并發(fā)運(yùn)行程序的數(shù)據(jù)進(jìn)行分開(kāi),使它們不會(huì)互相干擾。在使用Sybase數(shù)據(jù)庫(kù)后,進(jìn)入開(kāi)發(fā)的MIS系統(tǒng)里,用戶會(huì)經(jīng)常性地把數(shù)據(jù)窗口從數(shù)據(jù)庫(kù)的記錄中進(jìn)行調(diào)用,調(diào)用次數(shù)增多后數(shù)據(jù)被修改,要對(duì)這些改正后的數(shù)據(jù)進(jìn)行操作,數(shù)據(jù)窗口會(huì)短暫地將緩存的數(shù)據(jù)儲(chǔ)存到緩沖區(qū)域里,還要對(duì)其進(jìn)行一系列地操作也就是進(jìn)行數(shù)據(jù)的提交后,會(huì)把真正需要送走的數(shù)據(jù)交到數(shù)據(jù)庫(kù)去。在這個(gè)程序操作時(shí),為了用戶能保證數(shù)據(jù)的一致性,有必要把這些操作過(guò)的記錄進(jìn)行數(shù)量上的改變。在序號(hào)上進(jìn)行加減都可以,操作時(shí)一般會(huì)把改過(guò)的數(shù)據(jù)又重新放到緩沖的區(qū)域中去。
很多應(yīng)用程序都會(huì)根據(jù)數(shù)據(jù)庫(kù)之外的緩沖區(qū)域里的數(shù)據(jù)來(lái)判斷,這會(huì)造成緩沖區(qū)域里的數(shù)據(jù)出現(xiàn)混淆,出現(xiàn)多個(gè)相同的主鍵值,使不同記錄的主鍵值會(huì)出現(xiàn)沖突,序號(hào)的數(shù)值也會(huì)因此發(fā)生錯(cuò)誤,破壞了數(shù)據(jù)很重要的一致性。兩個(gè)用戶同時(shí)在Sybase庫(kù)中調(diào)出某個(gè)表格的數(shù)據(jù)來(lái)做局部地修改并且錄進(jìn)去,讀取數(shù)據(jù)時(shí)出現(xiàn)的序號(hào)數(shù)最大為5,假如兩個(gè)人都想要在表格的最后做一個(gè)記錄時(shí),應(yīng)用程序就會(huì)發(fā)揮出它應(yīng)有的效用,重新地把序號(hào)設(shè)置成為6。這一步的操作就會(huì)使系統(tǒng)和Sybase無(wú)法對(duì)其進(jìn)行甄別,出現(xiàn)了混亂,其中的一個(gè)用戶上傳的數(shù)據(jù)就會(huì)存入到Sybase里面去,但其實(shí)那個(gè)用戶所修改的序號(hào)是被占用了的,就無(wú)法將數(shù)據(jù)存入庫(kù)里面,數(shù)據(jù)庫(kù)的一致性被破壞了。第二個(gè)用戶的操作就被抵制了。
Sybase的服務(wù)程序有Identify來(lái)供使用,Identify是在設(shè)置序列號(hào)時(shí)設(shè)置的屬性,在序列號(hào)被定義成為Identify后,再向表里面加進(jìn)去一個(gè)行號(hào),或者系統(tǒng)會(huì)給出序列號(hào)的新數(shù)值,還要保證這個(gè)值有連貫性,在這個(gè)操作后,系統(tǒng)會(huì)自動(dòng)地給出有順序的序列號(hào),從而避免了序號(hào)的重復(fù)出現(xiàn)。
由于使用數(shù)據(jù)時(shí)會(huì)有不一樣的情況出現(xiàn),還要訪問(wèn)并且修正控制并發(fā)方案,這就會(huì)用到數(shù)據(jù)鎖定程序。在表的主鍵以外的地方,還要加上操作數(shù)據(jù)并加以修改,使這些數(shù)據(jù)能夠被系統(tǒng)接受并錄入到數(shù)據(jù)庫(kù)。
序號(hào)的類型和屬性所在的表的主鍵是應(yīng)該重現(xiàn)的一個(gè)方面,在用戶程序以及數(shù)據(jù)庫(kù)里會(huì)進(jìn)行修改的都應(yīng)該采取創(chuàng)立最大序列號(hào)表的對(duì)策。
序號(hào)的屬性要和多種屬性一起整合后組建成主鍵,所以,不同的序號(hào)會(huì)采取不一樣的數(shù)值。但如果把這些屬性的數(shù)值都調(diào)到一個(gè)值上,而序號(hào)的數(shù)值卻都不一樣,因此,還要考慮連續(xù)性,屬性不能夠亂設(shè)。比如在單位里,操作人員會(huì)定期地檢修設(shè)備,在記錄表里面會(huì)有單位的名稱指代、時(shí)間、機(jī)器的專屬號(hào)碼,這些值是應(yīng)該取成不一樣的,而生產(chǎn)號(hào)碼也必須是連續(xù)性的。對(duì)于操縱設(shè)備的工作人員來(lái)說(shuō),他們每天都要在早錄入本上寫(xiě)進(jìn)當(dāng)天的檢修情況等。然而在整個(gè)系統(tǒng)里,為了使用戶能夠正常地使用程序,只要用戶發(fā)出一條信息,程序就會(huì)把這些信息填進(jìn)已經(jīng)設(shè)計(jì)好的表格里。表格內(nèi)容會(huì)包括單位的名稱指代、檢修的情況和日期,程序會(huì)自動(dòng)把這些記錄后的同樣格式的信息的編號(hào)值進(jìn)行修改。
但當(dāng)主鍵的序號(hào)屬性很多時(shí),或者在問(wèn)題交付前會(huì)加上幾條信息的,如果采用以上幾種方法來(lái)解決問(wèn)題,還需設(shè)置一個(gè)專門(mén)用來(lái)進(jìn)行窗口互相排斥的模型去保證數(shù)據(jù)的一致性。因此,專家開(kāi)發(fā)出了“窗口的互斥管理程序”,在任何一個(gè)時(shí)間里都只允許一個(gè)窗口被一個(gè)用戶操作和使用,來(lái)保證數(shù)據(jù)庫(kù)的一致性不被破壞。
其它不是來(lái)自于序號(hào)沖突問(wèn)題的并發(fā)控制問(wèn)題,都能夠按照它們所有的屬性,總結(jié)出它們的規(guī)律,就完全可以進(jìn)行快速地分類了。靈活地運(yùn)用文章中提到的方法,就能夠有效地解決在MIS系統(tǒng)Sybase中可能會(huì)出現(xiàn)的并發(fā)控制問(wèn)題,使數(shù)據(jù)能保持一致性。
并發(fā)能力是指很多用戶在同一個(gè)時(shí)間里訪問(wèn)相同的數(shù)據(jù)的一種程式能力。在普通的數(shù)據(jù)庫(kù)里都有并發(fā)控制的功能,但是并發(fā)控制功能正是導(dǎo)致數(shù)據(jù)庫(kù)不能一致的一個(gè)重要原因,所以說(shuō)并發(fā)控制是我們要進(jìn)行抑制的狀況。
[1] 王秀敏.基于SYBASE SQL SERVER的頁(yè)鎖表鎖及死鎖研究[J].計(jì)算機(jī)應(yīng)用研究,2002,19(4):66-67.
[2] 邵佩英,揚(yáng)孝如.數(shù)據(jù)庫(kù)系統(tǒng)基礎(chǔ)知識(shí)[M].北京:中國(guó)水利水電出版社,2001.
[3] 諶 明.PE系統(tǒng)數(shù)據(jù)庫(kù)重構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)[D].杭州:浙江大學(xué),2006.
[4] 謝西庭.嵌入式主動(dòng)實(shí)時(shí)數(shù)據(jù)庫(kù)ARTs-EDB事務(wù)處理的設(shè)計(jì)[D].武漢:華中科技大學(xué),2004.