SAP鎖機(jī)制整理_第1頁(yè)
SAP鎖機(jī)制整理_第2頁(yè)
SAP鎖機(jī)制整理_第3頁(yè)
SAP鎖機(jī)制整理_第4頁(yè)
SAP鎖機(jī)制整理_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、、SA騎的概念SAP的鎖是一種邏輯鎖,SAP為了同步同時(shí)多個(gè)用戶操作同一數(shù)據(jù),防止數(shù)據(jù)出現(xiàn)不一致性而采用了鎖機(jī)制。一般SAP會(huì)在操作數(shù)據(jù)前設(shè)置鎖,防止第二個(gè)用戶進(jìn)行修改操作,當(dāng)操作結(jié)束后系統(tǒng)再釋放鎖。二、SAP什么要設(shè)置鎖1 .保持?jǐn)?shù)據(jù)的一致性如果幾個(gè)用戶要訪問同樣的資源,需要找到一種同步訪問的方法去保持?jǐn)?shù)據(jù)的一致性。比如說,在航班預(yù)訂系統(tǒng)中,需要檢查還有沒有空座位,當(dāng)檢查的時(shí)候,你不想別人修改重要的數(shù)據(jù)(空座位的數(shù)量)。2 .僅僅用Database鎖是不夠的數(shù)據(jù)庫(kù)管理系統(tǒng)物理鎖定了要修改的行記錄,其他用戶要等到數(shù)據(jù)庫(kù)鎖釋放才能訪問這個(gè)記錄。SAPLock是一種邏輯鎖,相對(duì)于DBLock,是一

2、種輕量級(jí)的鎖,DBLock一旦發(fā)現(xiàn)不能加鎖會(huì)進(jìn)行延遲等待,使用SAPLock一定程度上可以減少對(duì)DBLock的占用,避免死鎖,同時(shí)合理使用SAPLock可以保證數(shù)據(jù)的一致性在SAP系統(tǒng)中,當(dāng)一個(gè)新屏幕顯示的時(shí)候會(huì)釋放掉Database鎖,因?yàn)槠聊坏母淖儠?huì)觸發(fā)一個(gè)隱式的DBCOMMIT如果數(shù)據(jù)是從好幾個(gè)屏幕收集來的話,而且在這段時(shí)間內(nèi)這些數(shù)據(jù)會(huì)分別被鎖定,僅僅用Database鎖就不夠了。SAP系統(tǒng)在應(yīng)用服務(wù)器層面有一個(gè)全局的LOCKTABLE可以用來設(shè)置邏輯鎖來鎖定相關(guān)的表?xiàng)l目,并有ENQUEUE作進(jìn)程來管理這些鎖。SAP鎖是一種邏輯意義上的鎖,有可能你鎖定的表?xiàng)l目在DATABASES根本就不

3、存在。注:selectforupdate是在DB層次上加的鎖三、鎖對(duì)象和其對(duì)應(yīng)的FM在SE11里創(chuàng)建鎖對(duì)象,自定義的鎖對(duì)象都必須以EZ或者EY開頭來命名。一個(gè)鎖對(duì)象里只包含一個(gè)PRIMARYTABLE可以包含若干個(gè)SECONDARTABLE鎖的模式有三種:E(Exclusivelock),S(Sharedlock),X(Exclusivebutnotcumulativelock)。LOCKPARAMETERS里填寫你要根據(jù)哪些字段來鎖定表?xiàng)l目。模式E(寫鎖):當(dāng)更改數(shù)據(jù)的時(shí)候設(shè)置為此模式。Exclusivelock:Thelockeddatacanbereadorprocessedbyoneu

4、seronly.Arequestforanotherexclusivelockorforasharedlockisrejected.模式S(讀鎖):本身不需要更改數(shù)據(jù),但是希望顯示的數(shù)據(jù)不被別人更改。Sharedlock:Severaluserscanreadthesamedataatthesametime,butassoonasausereditsthedata,asecondusercannolongeraccessthisdata.Requestsforfurthersharedlocksareaccepted,eveniftheyareissuedbydifferentusers,bu

5、texclusivelocksarerejected.模式X(獨(dú)占鎖):和E類似,但是不允許累加,完全獨(dú)占。Exclusivebutnotcumulativelock:Exclusivelockscanberequestedbythesametransactionmorethanonceandhandledsuccessively,butanexclusivebutnotcumulativelockcanonlyberequestedoncebyagiventransaction.Allotherlockrequestsarerejected.E,其他用戶不能再對(duì)這個(gè)鎖X,其他用戶不能再對(duì)這個(gè)

6、鎖S,其他用戶不能再對(duì)這個(gè)鎖E,在這個(gè)程序,你還可以再X,在這個(gè)程序,你不可以再S,在這個(gè)程序,你還可以再如果你在一個(gè)程序里成功對(duì)一個(gè)鎖對(duì)象加鎖之后,如果模式為對(duì)象加E、X、S模式的任意一種鎖;如果你在一個(gè)程序里成功對(duì)一個(gè)鎖對(duì)象加鎖之后,如果模式為對(duì)象加E、X、S模式的任意一種鎖;如果你在一個(gè)程序里成功對(duì)一個(gè)鎖對(duì)象加鎖之后,如果模式為對(duì)象加E、X模式的鎖,但是可以加S模式的鎖;如果你在一個(gè)程序里成功對(duì)一個(gè)鎖對(duì)象加鎖之后,如果模式為對(duì)這個(gè)鎖對(duì)象加E、S模式的鎖,X模式的不可以。如果你在一個(gè)程序里成功對(duì)一個(gè)鎖對(duì)象加鎖之后,如果模式為對(duì)這個(gè)鎖對(duì)象加E、X、S模式的鎖。如果你在一個(gè)程序里成功對(duì)一個(gè)鎖對(duì)

7、象加鎖之后,如果模式為對(duì)這個(gè)鎖對(duì)象加S模式的鎖,如果沒有別的用戶對(duì)其加S模式的鎖,那么你還可以對(duì)其加E模式的鎖。X模式的不可以。當(dāng)激活鎖對(duì)象的時(shí)候,系統(tǒng)會(huì)自動(dòng)創(chuàng)建兩個(gè)FMENQUEUE_對(duì)象名和DEQUEUE第對(duì)象名,分別用來鎖定和解鎖。四、鎖定和解鎖當(dāng)用邏輯鎖來鎖定表?xiàng)l目的時(shí)候,系統(tǒng)會(huì)自動(dòng)向LOCKTABL沖寫入記錄。當(dāng)調(diào)用設(shè)置鎖的FM時(shí),LOCKPARAMETERS果沒有指明,系統(tǒng)會(huì)鎖定整個(gè)表。當(dāng)然,LOCKPARAMETERCLIENT有點(diǎn)特殊,如果不指定,默認(rèn)是SY-MANDT如果指定相應(yīng)的CLIENT,會(huì)鎖定對(duì)應(yīng)CLIENT上的相應(yīng)的表記錄;如果設(shè)置為SPACE則鎖定涉及所有的CLI

8、ENT當(dāng)邏輯鎖設(shè)置失敗后,一般會(huì)有兩種例外。一個(gè)是EXCEPTIONFOREIGN_LOCK意思是已經(jīng)被鎖定了;另一個(gè)是EXCEPTIONSYSTEM_FAILURE有些情況下,程序中設(shè)置成功的邏輯鎖會(huì)隱式的自己解鎖。比如說程序結(jié)束發(fā)生的時(shí)候(MESSAGETYPEA或者X的時(shí)候),使用語(yǔ)句LEAVEPROGRAMLEAVETOTRANSACTION或者在命令行輸入/n回車以后。在程序的結(jié)束可以用DEQUEUEUNCTIONMODUL來解鎖(當(dāng)然如果你不寫這個(gè),程序結(jié)束的時(shí)候也會(huì)自動(dòng)的解鎖),這個(gè)時(shí)候,系統(tǒng)會(huì)自動(dòng)從LOCKTABLE把相應(yīng)的記錄刪除。使用DEQUEUEFUNCTIONMODUL

9、解鎖的時(shí)候,不會(huì)產(chǎn)生EXCEPTION要解開你在程序中創(chuàng)建的所有的邏輯鎖,可以用FMDEQUEUE_ALL.五、上鎖的一般步驟先上鎖,上鎖成功之后,從數(shù)據(jù)庫(kù)取數(shù)據(jù),然后更改數(shù)據(jù),接著更新到數(shù)據(jù)庫(kù),最后解鎖。按照這個(gè)步驟,才能保證更改完全運(yùn)行在鎖的保護(hù)機(jī)制下。六、SA度的相關(guān)知識(shí)1 .相關(guān)TCODE:SE112 .相關(guān)表DD25L:組合標(biāo)題(方式,MC目標(biāo),鎖定目標(biāo))(紀(jì)錄了鎖主表)DD25T:視圖和鎖定對(duì)象的短文本DD26S:視圖的基本表和外來碼關(guān)系(紀(jì)錄了所有和鎖相關(guān)的表)DD27S合計(jì)(視圖,MC對(duì)象,鎖定對(duì)象)字段3 .相關(guān)函數(shù)RS_DD_ENQU_EDITRS_DD_ENQU_ADD4

10、 .獲取表相關(guān)鎖的列表程序REPORTZRFI0090LINE-COUNT70LINE-SIZE255NOSTANDARDPAGEHEADING.type-pools:slis.tables:DD02L,dd26s.data:beginofg_taboccurs10,TABNAMElikedd26s-TABNAME,VIEWNAMEtypedd26s-VIEWNAME,enamelikeEMFIN-FBEMFIN,dnamelikeEMFIN-FBEMFIN,endofg_tab.datag_fcattypeslis_t_fieldcat_alv.data:g_fieldcattypeslis

11、_fieldcat_alv.select-optionss_tablefordd02l-TABNAMEdefaultVBAK.end-of-selection.selectdd26sTABNAMEdd25lVIEWNAMEINTOCORRESPONDINGFIELDSOFTABLEg_tabfromdd26sinnerjoindd25londd26sVIEWNAME=dd25lVIEWNAMEanddd25lAGGTYPE=EwhereTABNAMEins_table.loopatg_tab.concatenateENQUEUEg_tab-VIEWNAMEintog_tab-ename.con

12、catenateDEQUEUEg_tab-VIEWNAMEintog_tab-dname.modifyg_tab.endloop.callfunctionREUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name=ZTEST4I_INTERNAL_TABNAME=G_TABi_inclname=ZTEST4CHANGINGct_fieldcat=g_fcat.g_fieldcat-fieldname=ENAME.g_fieldcat-seltext_s=加鎖函數(shù)名appendg_fieldcattog_fcat.g_fieldcat-fieldnam

13、e=DNAME.g_fieldcat-seltext_s=解鎖函數(shù)名appendg_fieldcattog_fcat.callfunctionREUSEALVGRIDDISPLAYexportingi_callback_program=repnamecallback_user_command=g_user_commandstructurename=INVis_layoutitfieldcatisvariant=layout=g_fcat=g_variantitevents=eventsi_callback_pf_status_set=F01_ALV_EVENT_PF_STATUS_SET=g_

14、tab.tablestouttab5 .通過斷點(diǎn)找程序所用到的鎖用se38打開程序LSENAF01并定位到send_enqueue子過程,在該過程中的任一語(yǔ)句設(shè)置斷點(diǎn)。完成斷點(diǎn)設(shè)置后,則去執(zhí)行標(biāo)準(zhǔn)tcode,系統(tǒng)就會(huì)在程序調(diào)用鎖時(shí)自動(dòng)停止在斷點(diǎn)處,這時(shí)你就可以通過調(diào)用堆棧獲取加鎖函數(shù)(ENQUEUE_XXXXX初中XXXXXX就是鎖名稱,你就可以通過SE11查看鎖信息。6鎖相關(guān)的函數(shù)DEQUEUE_ALReleaseLocksofanLUW(釋放當(dāng)前LUW勺所有鎖)7如何對(duì)表加鎖CALLFUNCTIONENQUEUE_E_TABLEEXPORTINGMODE_RSTABLE=ETABNAME=

15、TableName* VARKEY=* X_TABNAME=* X_VARKEY=* _SCOPE=2* _WAIT=* _COLLECT=EXCEPTIONSFOREIGN_LOCK=1SYSTEM_FAILURE=2OTHERS=3.IFsy-subrc=0.WRITE:Locktablesuccessfully!.else.write:Failed.ENDIF.七、鎖對(duì)象和FM激活鎖定對(duì)象時(shí),產(chǎn)生的FM的名字是什么?答案:首先要在ABAP字典中創(chuàng)建鎖對(duì)象,然后才能在ABAP程序中設(shè)鎖。創(chuàng)建鎖對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)生成兩個(gè)FM來進(jìn)行鎖管理。用于設(shè)鎖的FM為:ENQUEUE_對(duì)象名。它用于在鎖表

16、(LockTable)中生成一個(gè)鎖項(xiàng)(LockEntry)。若設(shè)鎖不成功的話,就會(huì)在Return中反映出來。用于釋放鎖的FM為:DEQUEUE對(duì)象名。它用于從鎖表中刪除一個(gè)鎖項(xiàng)。在ABAP程序中,只需使用CALLFUNCITION.語(yǔ)句就可以調(diào)用它們。這兩個(gè)鎖FM是在SAP系統(tǒng)的一個(gè)特殊工作進(jìn)程中執(zhí)行的,專門進(jìn)行鎖管理。它運(yùn)行在一個(gè)單獨(dú)的服務(wù)器上,而該服務(wù)器專門用于維護(hù)整個(gè)SAP系統(tǒng)的主鎖表(CentralLocakTable)。八、加鎖和解鎖FM的一些參數(shù)scope參數(shù):1表示程序內(nèi)有效,2表示updatemodule內(nèi)有效,3表示全部有效。_wait表示如果對(duì)象已經(jīng)被鎖定,是否等待后再嘗試加鎖,最大的等待時(shí)間有系統(tǒng)參數(shù)ENQUE/DELAY_MAX制。_COLLECT參數(shù)表示是否收集后進(jìn)行統(tǒng)一提交COLLECT是一種緩存與批處理方法,即如果指定了Collect,加鎖信息會(huì)放

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論