亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

Oracle數(shù)據(jù)庫編寫有效事務(wù)指導(dǎo)方針

瀏覽:113日期:2023-11-25 12:54:58

數(shù)據(jù)共享是數(shù)據(jù)庫最基本的特征之一。但是數(shù)據(jù)共享雖然為員工帶來了便利,但也產(chǎn)生了一些負面作用。例如因用戶并發(fā)存取而導(dǎo)致的對數(shù)據(jù)一致性的破壞、由于在修改數(shù)據(jù)過程中的意外事故導(dǎo)致數(shù)據(jù)完整性破壞、非法用戶未經(jīng)授權(quán)修改數(shù)據(jù)等等。所以,在數(shù)據(jù)庫設(shè)計過程中,數(shù)據(jù)庫管理員一方面要想著如何提高數(shù)據(jù)的共享程度,另一方面,也需要考慮如何保護數(shù)據(jù)的安全性。

在Oracle數(shù)據(jù)庫中,提供了一種被稱為“事務(wù)”的控制機制。通過事物,能夠完成對數(shù)據(jù)有效安全的修改操作,使數(shù)據(jù)庫中的數(shù)據(jù)達到一個數(shù)據(jù)一致的狀態(tài)。舉個簡單的例子,現(xiàn)在有一個借書系統(tǒng)中設(shè)涉及到兩張表,一張是圖書庫存表,一張是用戶借書情況表。在用戶借書的時候,數(shù)據(jù)庫需要進行兩個操作,一是從圖書庫存表中扣掉庫存;另一個操作時在用戶借書表中加入這個借書操作。數(shù)據(jù)庫在操作時,往往是先扣減庫存,然后再在用戶借書情況表中加入借書紀(jì)錄。假設(shè)用戶在借書的時候,第一步操作成功,即已經(jīng)從圖書庫存表中扣除了某書的庫存;但是,在第二步時由于發(fā)現(xiàn)用戶借的書已經(jīng)超量或者發(fā)現(xiàn)用戶的卡中還有罰款不能夠借書時,借書就會不成功。若沒有事務(wù)做控制的話,很明顯圖書庫存就會不準(zhǔn)。而在事務(wù)的管理下,當(dāng)?shù)诙讲怀晒Φ脑?,第一步操作就會發(fā)生回滾。也就是說,事務(wù)可以把數(shù)據(jù)庫的好幾個操作步驟當(dāng)作一個整體,當(dāng)其中有某個操作沒有成功的話,則所有操作都會發(fā)生回滾。Oracle數(shù)據(jù)庫就是通過這種機制來保障數(shù)據(jù)的一致性問題。

但是,事務(wù)若編寫的不好的話,則不但起不到應(yīng)有的作用,還會大大降低數(shù)據(jù)庫的性能。如在數(shù)據(jù)庫事務(wù)執(zhí)行時間比較長,就很有可能導(dǎo)致鎖沖突,從而降低數(shù)據(jù)庫的并發(fā)訪問性能。所以,數(shù)據(jù)庫管理員在編寫事務(wù)時,還是需要遵守幾個指導(dǎo)方針。

指導(dǎo)方針一:在事務(wù)中盡量使得訪問的紀(jì)錄最小。

在事務(wù)中,若執(zhí)行Update等記錄操作語句,數(shù)據(jù)庫為了保障數(shù)據(jù)的一致性,會對其所訪問的記錄加鎖,防止在同一時間內(nèi)其他用戶對其修改。此時,若其他用戶需要訪問加鎖的記錄,則必須等待。此時就會發(fā)生鎖沖突。

所以,在事務(wù)中要盡量使得訪問的記錄量最小。如此就可以減少鎖定的行數(shù),從而減少事務(wù)之間的沖突。這要求數(shù)據(jù)庫管理員在事務(wù)中盡量精確的定位語紀(jì)錄。如在數(shù)據(jù)庫中讀取記錄時,最好能夠使用Where語句進行定位。并且在編寫Where語句的時候,要盡量的詳細,最好能夠?qū)崿F(xiàn)一對一,則是最好的。

如在庫存盤點的時候,事務(wù)處理語句需要從數(shù)據(jù)庫中讀取一定數(shù)量的記錄,并且為這些記錄進行加鎖。此時,若記錄讀取的過多的話,就會對其他用戶訪問表中的記錄造成麻煩。為此,數(shù)據(jù)庫管理員應(yīng)該建議應(yīng)用前臺應(yīng)用程序在開發(fā)的過程中,加入一些限制條件。如按照產(chǎn)品的分類來更新庫存。如此的話,就可以減少一個事務(wù)一次性讀取的記錄數(shù)量,從而把鎖的影響降低到最低。

指導(dǎo)方針二:保持事務(wù)盡可能的簡潔。

在事務(wù)中盡量使得訪問的紀(jì)錄最小,這是從數(shù)量的角度來考慮鎖沖突。而保持事務(wù)盡可能的簡潔,則是從時間的角度來考慮避免鎖沖突的事情。保持事務(wù)盡可能的簡潔,主要是要求數(shù)據(jù)庫管理員在編寫事務(wù)的時候,不要把事務(wù)寫的太過于龐大與復(fù)雜。否則,事務(wù)在執(zhí)行的時候就會占用比較多的時間。而這直接導(dǎo)致的后果就是數(shù)據(jù)庫會把某些記錄、甚至一張數(shù)據(jù)表鎖住比較長的時間。這就會惡化鎖對數(shù)據(jù)庫的負面影響。

故當(dāng)用戶在知道了必須要進行修改的記錄之后,就要馬上啟動事務(wù);并且在最短時間內(nèi)執(zhí)行完相關(guān)的修改語句,然后立即遞交或者回滾。而且,只有在確實需要時,才打開事務(wù)語句。具體的來說,數(shù)據(jù)庫管理員在事務(wù)的簡潔性方面,可以嘗試如下方法。

一是在同一個事務(wù)中不要加入過多的修改或者刪除語句。如當(dāng)用戶需要更新用戶信息表中的相關(guān)數(shù)據(jù)。例如在員工的編號前加入YG前綴并且同時根據(jù)員工入職年份計算員工工齡。這兩個更新語句若從技術(shù)上來說,放在同一個事務(wù)中并沒有什么不妥。但是,當(dāng)員工數(shù)量比較多時,若把他們合并在一起,則這個事務(wù)執(zhí)行得時間會比較久。為此,最好在更新數(shù)據(jù)庫表的時候,若預(yù)計執(zhí)行時間會比較長,則最好能夠把更新語句進行分割,如一列列更新等等。

二是在更新時,若一次性更新的語句比較多,最好能夠選擇合適的時候更新。更新某個數(shù)據(jù)庫中記錄,其執(zhí)行所需要的時間往往跟數(shù)據(jù)庫的記錄成正比。其記錄越多,更新所需要的時間越多。為此,筆者建議,當(dāng)需要更新的記錄比較多的時候,最好能夠選擇合理的時機。如有些應(yīng)用程序在設(shè)計時,可以把這個更新放在后臺處理。如此的話,應(yīng)用程序就可以選擇數(shù)據(jù)庫比較空的時候,來更新表中的記錄。這無疑可以在很大程度上降低事務(wù)對數(shù)據(jù)庫的負面影響。

指導(dǎo)方針三:不要在事務(wù)處理期間要求用戶輸入。

數(shù)據(jù)庫管理員在編寫事務(wù)時,要確保在事務(wù)啟動之前,讓數(shù)據(jù)庫系統(tǒng)獲得事務(wù)執(zhí)行所需要的所有內(nèi)容。如記錄的查詢條件、所需要更新的內(nèi)容等等。如果在事務(wù)執(zhí)行的過程中還需要用戶的輸入,就回滾當(dāng)前的事務(wù)。當(dāng)用戶提供了必要的參數(shù)之后,再重新啟動這個事務(wù)。因為即使在事務(wù)執(zhí)行的過程中,用戶立即響應(yīng)。但是,用戶的反應(yīng)速度要比電腦的響應(yīng)速度慢的多。所以,當(dāng)用戶在事務(wù)執(zhí)行的過程中需要輸入?yún)?shù)的話,就會使得這個事務(wù)所占用的數(shù)據(jù)庫資源要保持很長的時間。這就有可能增加阻塞的風(fēng)險。因為當(dāng)用戶沒有及時輸入所需要的參數(shù)時,事務(wù)仍然會保持活動狀態(tài),并鎖定相關(guān)的資源,直到他們響應(yīng)為止。若用戶所需要輸入的參數(shù)比較多時,用戶可能會幾分鐘甚至一個小時沒有輸入。

這不是一種理論上的假設(shè),筆者在實際工作中就碰到過這種例子。如在一個ERP系統(tǒng)中有訂單變更的功能。若在設(shè)計的時候,在用戶打開銷售訂單變更單就觸發(fā)變更事務(wù)的話,則因為用戶輸入訂單變更所需要的時間不能夠確定。有時候用戶這邊改一改,那邊再確認(rèn)一下,可能一個小時就過去了。此時,這張銷售訂單對應(yīng)的內(nèi)容其他用戶就無法查看了,因為數(shù)據(jù)庫中已經(jīng)被這個事務(wù)鎖住。這顯然是設(shè)計的不合理的。筆者認(rèn)為,應(yīng)到在用戶點擊確認(rèn)按鈕時,再觸發(fā)這個變更事務(wù)。此時,用戶已經(jīng)輸入了所需要更改的所有內(nèi)容,在更新事務(wù)的執(zhí)行過程中,不需要用戶再輸入其他的額外參數(shù)。通過這種方式,就可以把事務(wù)所占用資源的時間縮短到最低。

指導(dǎo)方針?biāo)模涸跒g覽數(shù)據(jù)時,盡量不要打開事務(wù)。

根據(jù)筆者的經(jīng)驗,用戶更改數(shù)據(jù)所需要的時間,其實很少。而大部分時間則是在更改數(shù)據(jù)之前對數(shù)據(jù)的分析上。如在定位需要對哪些數(shù)據(jù)要進行更改;如在更改事務(wù)遞交好的審核;如在考慮該怎么進行更改。這個分析工作所占據(jù)的時間往往是大頭。

故筆者提醒數(shù)據(jù)庫管理員,在所有預(yù)備的數(shù)據(jù)分析完成之前,在用戶數(shù)據(jù)瀏覽的時候,不要啟動事務(wù)。也就是說,在用戶更改數(shù)據(jù)的時候,仍然不是觸發(fā)更新事務(wù)的最佳時間。只有到用戶確認(rèn)無誤后,選擇“更新”按鈕,此時,才可以觸發(fā)這個事務(wù)。并且,及時遞交或者回滾這個事務(wù)。如此,在事后審核的過程中,事務(wù)就不會繼續(xù)占用資源。

除了以上這些指導(dǎo)方針外,還有其他的一些小細節(jié)要注意。如盡量采用級別低的事務(wù)隔離級別,數(shù)據(jù)庫管理員要切記,不是所有的事務(wù)都要求串行事務(wù)隔離級別;如事務(wù)設(shè)計的簡短一些;如在事務(wù)回退時,可根據(jù)實際情況選擇回退全部事務(wù)或者是部分事務(wù)等等。另外,要特別注意在事務(wù)中排他鎖的副作用。在修改數(shù)據(jù)時,為了保障數(shù)據(jù)的一致性,往往需要利用排它鎖保護修改過的行,以防止其他任何事務(wù)讀取這一行,并且必須把排它鎖控制到遞交或者回滾事務(wù)為止。為此,數(shù)據(jù)庫管理員在設(shè)計跟更新相關(guān)的事務(wù)時,要合理選擇時機。讓事務(wù)在保障數(shù)據(jù)安全性的同時,最大限度的降低其負面作用。

標(biāo)簽: Oracle 數(shù)據(jù)庫
主站蜘蛛池模板: 一级女性全黄生活片免费 | 国产欧美精品一区二区三区四区 | 又大又粗进出白浆直流动态图 | 久久香蕉国产在产线看观看 | 麻豆精品国产免费观看 | 欧美日本黄色 | 日本二本三本二区 | 国产乱码在线精品可播放 | 欧美一区二区三区在线可观看 | 国产久草视频在线 | 4虎成人 | 亚洲色图1 | 久久成年人 | 亚洲区欧美中文字幕久久 | 综合色亚洲 | 国产免费全部免费观看 | 中文无码日韩欧 | 日韩精品大片 | 丁香综合网 | 国产精品成人免费视频99 | 久草爱视频 | 国内自拍视频一区二区三区 | 亚洲精品aⅴ一区二区三区 亚洲精品aⅴ中文字幕乱码 | 国产麻豆精品一区二区 | 香蕉视频高清 | 欧美ol丝袜高跟秘书在线播放 | 国产一级aaa全黄毛片 | 精品精品国产欧美在线观看 | 美女被啪到深处喷水gif动态图视频 | 美女视频黄是免费 | 好吊色综合网天天高清 | 久久高清一区二区三区 | 成人无遮挡毛片免费看 | 成人网在线播放 | 一区二区三区www | www.国产一区二区 | 国内真实实拍伦视频在线观看 | 国产高清在线免费视频 | 在线观看国产精成人品 | 国产精品视频免费观看 | 黄色一级生活片 |