




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、、SA骑的概念SAP的锁是一种逻辑锁,SAP为了同步同时多个用户操作同一数据,防止数据出现不一致性而采用了锁机制。一般SAP会在操作数据前设置锁,防止第二个用户进行修改操作,当操作结束后系统再释放锁。二、SAP什么要设置锁1 .保持数据的一致性如果几个用户要访问同样的资源,需要找到一种同步访问的方法去保持数据的一致性。比如说,在航班预订系统中,需要检查还有没有空座位,当检查的时候,你不想别人修改重要的数据(空座位的数量)。2 .仅仅用Database锁是不够的数据库管理系统物理锁定了要修改的行记录,其他用户要等到数据库锁释放才能访问这个记录。SAPLock是一种逻辑锁,相对于DBLock,是一
2、种轻量级的锁,DBLock一旦发现不能加锁会进行延迟等待,使用SAPLock一定程度上可以减少对DBLock的占用,避免死锁,同时合理使用SAPLock可以保证数据的一致性在SAP系统中,当一个新屏幕显示的时候会释放掉Database锁,因为屏幕的改变会触发一个隐式的DBCOMMIT如果数据是从好几个屏幕收集来的话,而且在这段时间内这些数据会分别被锁定,仅仅用Database锁就不够了。SAP系统在应用服务器层面有一个全局的LOCKTABLE可以用来设置逻辑锁来锁定相关的表条目,并有ENQUEUE作进程来管理这些锁。SAP锁是一种逻辑意义上的锁,有可能你锁定的表条目在DATABASES根本就不
3、存在。注:selectforupdate是在DB层次上加的锁三、锁对象和其对应的FM在SE11里创建锁对象,自定义的锁对象都必须以EZ或者EY开头来命名。一个锁对象里只包含一个PRIMARYTABLE可以包含若干个SECONDARTABLE锁的模式有三种:E(Exclusivelock),S(Sharedlock),X(Exclusivebutnotcumulativelock)。LOCKPARAMETERS里填写你要根据哪些字段来锁定表条目。模式E(写锁):当更改数据的时候设置为此模式。Exclusivelock:Thelockeddatacanbereadorprocessedbyoneu
4、seronly.Arequestforanotherexclusivelockorforasharedlockisrejected.模式S(读锁):本身不需要更改数据,但是希望显示的数据不被别人更改。Sharedlock:Severaluserscanreadthesamedataatthesametime,butassoonasausereditsthedata,asecondusercannolongeraccessthisdata.Requestsforfurthersharedlocksareaccepted,eveniftheyareissuedbydifferentusers,bu
5、texclusivelocksarerejected.模式X(独占锁):和E类似,但是不允许累加,完全独占。Exclusivebutnotcumulativelock:Exclusivelockscanberequestedbythesametransactionmorethanonceandhandledsuccessively,butanexclusivebutnotcumulativelockcanonlyberequestedoncebyagiventransaction.Allotherlockrequestsarerejected.E,其他用户不能再对这个锁X,其他用户不能再对这个
6、锁S,其他用户不能再对这个锁E,在这个程序,你还可以再X,在这个程序,你不可以再S,在这个程序,你还可以再如果你在一个程序里成功对一个锁对象加锁之后,如果模式为对象加E、X、S模式的任意一种锁;如果你在一个程序里成功对一个锁对象加锁之后,如果模式为对象加E、X、S模式的任意一种锁;如果你在一个程序里成功对一个锁对象加锁之后,如果模式为对象加E、X模式的锁,但是可以加S模式的锁;如果你在一个程序里成功对一个锁对象加锁之后,如果模式为对这个锁对象加E、S模式的锁,X模式的不可以。如果你在一个程序里成功对一个锁对象加锁之后,如果模式为对这个锁对象加E、X、S模式的锁。如果你在一个程序里成功对一个锁对
7、象加锁之后,如果模式为对这个锁对象加S模式的锁,如果没有别的用户对其加S模式的锁,那么你还可以对其加E模式的锁。X模式的不可以。当激活锁对象的时候,系统会自动创建两个FMENQUEUE_对象名和DEQUEUE第对象名,分别用来锁定和解锁。四、锁定和解锁当用逻辑锁来锁定表条目的时候,系统会自动向LOCKTABL冲写入记录。当调用设置锁的FM时,LOCKPARAMETERS果没有指明,系统会锁定整个表。当然,LOCKPARAMETERCLIENT有点特殊,如果不指定,默认是SY-MANDT如果指定相应的CLIENT,会锁定对应CLIENT上的相应的表记录;如果设置为SPACE则锁定涉及所有的CLI
8、ENT当逻辑锁设置失败后,一般会有两种例外。一个是EXCEPTIONFOREIGN_LOCK意思是已经被锁定了;另一个是EXCEPTIONSYSTEM_FAILURE有些情况下,程序中设置成功的逻辑锁会隐式的自己解锁。比如说程序结束发生的时候(MESSAGETYPEA或者X的时候),使用语句LEAVEPROGRAMLEAVETOTRANSACTION或者在命令行输入/n回车以后。在程序的结束可以用DEQUEUEUNCTIONMODUL来解锁(当然如果你不写这个,程序结束的时候也会自动的解锁),这个时候,系统会自动从LOCKTABLE把相应的记录删除。使用DEQUEUEFUNCTIONMODUL
9、解锁的时候,不会产生EXCEPTION要解开你在程序中创建的所有的逻辑锁,可以用FMDEQUEUE_ALL.五、上锁的一般步骤先上锁,上锁成功之后,从数据库取数据,然后更改数据,接着更新到数据库,最后解锁。按照这个步骤,才能保证更改完全运行在锁的保护机制下。六、SA度的相关知识1 .相关TCODE:SE112 .相关表DD25L:组合标题(方式,MC目标,锁定目标)(纪录了锁主表)DD25T:视图和锁定对象的短文本DD26S:视图的基本表和外来码关系(纪录了所有和锁相关的表)DD27S合计(视图,MC对象,锁定对象)字段3 .相关函数RS_DD_ENQU_EDITRS_DD_ENQU_ADD4
10、 .获取表相关锁的列表程序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=加锁函数名appendg_fieldcattog_fcat.g_fieldcat-fieldnam
13、e=DNAME.g_fieldcat-seltext_s=解锁函数名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 .通过断点找程序所用到的锁用se38打开程序LSENAF01并定位到send_enqueue子过程,在该过程中的任一语句设置断点。完成断点设置后,则去执行标准tcode,系统就会在程序调用锁时自动停止在断点处,这时你就可以通过调用堆栈获取加锁函数(ENQUEUE_XXXXX初中XXXXXX就是锁名称,你就可以通过SE11查看锁信息。6锁相关的函数DEQUEUE_ALReleaseLocksofanLUW(释放当前LUW勺所有锁)7如何对表加锁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.七、锁对象和FM激活锁定对象时,产生的FM的名字是什么?答案:首先要在ABAP字典中创建锁对象,然后才能在ABAP程序中设锁。创建锁对象时,系统会自动生成两个FM来进行锁管理。用于设锁的FM为:ENQUEUE_对象名。它用于在锁表
16、(LockTable)中生成一个锁项(LockEntry)。若设锁不成功的话,就会在Return中反映出来。用于释放锁的FM为:DEQUEUE对象名。它用于从锁表中删除一个锁项。在ABAP程序中,只需使用CALLFUNCITION.语句就可以调用它们。这两个锁FM是在SAP系统的一个特殊工作进程中执行的,专门进行锁管理。它运行在一个单独的服务器上,而该服务器专门用于维护整个SAP系统的主锁表(CentralLocakTable)。八、加锁和解锁FM的一些参数scope参数:1表示程序内有效,2表示updatemodule内有效,3表示全部有效。_wait表示如果对象已经被锁定,是否等待后再尝试加锁,最大的等待时间有系统参数ENQUE/DELAY_MAX制。_COLLECT参数表示是否收集后进行统一提交COLLECT是一种缓存与批处理方法,即如果指定了Collect,加锁信息会放
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB41∕T 1715-2018 阀门密封面堆焊工艺导则
- 小语种证书考试中的语境理解技巧及试题及答案
- 银行从业资格证考试适应策略试题及答案
- 2024秋七年级英语上册 Unit 7 How much are these socks Period 4 Section B (2a-Self Check)教学设计(新版)人教新目标版
- 三年级道德与法治下册 第一单元 我和我的同伴 2 不一样的你我他教学设计设计(pdf) 新人教版
- 6探访古代文明 第二课时 教学设计-2023-2024学年道德与法治六年级下册统编版
- Module 5 Unit 2 It's too big for you.(教学设计)-2023-2024学年外研版(三起)英语五年级下册
- 三年级语文上册 第二单元 4 古诗三首 夜书所见教学设计 新人教版
- Unit 9 Section B 2a-2e 教学设计2024-2025学年人教版八年级英语下册
- 五一皮肤管理活动方案
- 三轴搅拌桩安全操作规程
- 第十套广播体操教案
- 南京传媒学院新闻传播学院招聘网络与新媒体教师模拟备考预测(自我提高共1000题含答案解析)检测试卷
- GB/T 629-1997化学试剂氢氧化钠
- GB/T 3785.3-2018电声学声级计第3部分:周期试验
- 焦化厂生产工序及工艺流程图
- optimact540技术参考手册
- 第一章电力系统仿真软件介绍课件
- 产品QC工程图 (质量保证工程图)Excel表格
- 人民医院人才队伍建设规划人才队伍建设五年规划
- 电气平行检验用表
评论
0/150
提交评论