SAP锁机制整理
关于锁参数讲解
Exclusive but not cumulative lock.
Exclusive locks can be requested several times from the same transaction and are processed successively. In contrast, exclusive but not cumulative locks can be called only once from the same transaction. Each further lock request will be rejected.
X
使用local lock container。
在程序中发出一个lock request就会与lock administration交互一次,如果向多个object发出lock request就会与lock administration交互多次。可以通过lock container来减少与lock administration交互的次数,通过parameter _collect = ‘X’,lock request就会存储在local container中,直到调用FLUSH_ENQUEUE。所有的lock request发送出去后就会清空整个local container。如果local container中有一个lock不能被set,就会触发exception foreign lock,那么一个lock都不会被设置并会重新试着发出请求。可以通过FM:RESET_ENQUEUE删除lock container中的内容。
_SCOPE = 3
锁属于owner_1与owner_2。也就是说其集合了上面两种特性。
ABAP技巧之锁表机制
ABAP技巧之锁表机制SAP的一大特点,就是可以设置Batch Job,定时定量跑程序。
但是这样就会碰到一个问题,会出现多个Batch job读写的情况。
如果仅仅是读或是写的话,还好,最多是数据库延迟。
但是如果对一个表,即读又写的话,就会产生数据一致性问题。
比如,A Job读取数据X,然后做修改,但是修改的同时又有另外一个Job已经更新的X数据,结果A Job把另外一个更新的数据覆盖了,没有达到要预定的要求。
这时候就要引进锁表机制:Exclusive lock: 排他锁,只有自己可以读、写Shared lock:共享锁,自己可以读、写,他人只能读Exclusive but not cumulative lock:排他但不累计,只有自己可以读、写,并且一个事务只能使用一次两种实现方法:1.SE11->新建Lock object(注意是E开头)->设置好表名和Lock Mode(就是我上面说的三种)->激活->Goto->Lock Modules(你可以在程序中调用自动生成的两个函数,进行锁表操作)必须用’E’开头命名‘E’+表名例程序1.首先用'ENQUEUE_READ'查询一下有没有谁在使用表’ZTABLE’CALL FUNCTION'ENQUEUE_READ'EXPORTINGGCLIENT = SY-MANDTGNAME = 'ZTABLE'* GARG = ' 'GUNAME = ''* LOCAL = ' '* FAST = ' '* IMPORTING* NUMBER =TABLESENQ = IT_SEQG3EXCEPTIONSCOMMUNICATION_FAILURE = 1SYSTEM_FAILURE = 2OTHERS = 3.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.READ TABLE IT_SEQG3.………………………2.加锁加锁CALL FUNCTION'ENQUEUE_EZTABLE'EXPORTINGMODE_ZTABLE = 'E'TABNAME = FIELS* X_TABNAME = ' '* X_COUNTS = ' '* _SCOPE = '2'* _WAIT = ' '* _COLLECT = ' 'EXCEPTIONSFOREIGN_LOCK = 1SYSTEM_FAILURE = 2OTHERS = 3.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.TABNAME 被锁表ZTABLE的字段, FIELS字段的值;3.解锁*&--解锁CALL FUNCTION'DEQUEUE_EZTABLE'EXPORTINGMODE_ZTABLE = 'E'TABNAME = FIELS* X_COUNTS = ' ' * _SCOPE = '3' * _SYNCHRON = ' ' * _COLLECT = ' ' .。
ABAP 锁对象与加锁机制(LOCK)
有些情况下,程序中设置成功的逻辑锁会隐式的自己解锁。比如说程序结束发生的时候(MESSAGE TYPE为A或者X的时候),使用语句LEAVE PROGRAM,LEAVE TO TRANSACTION,或者在命令行输入/n回车以后。
如果你在一个程序里成功对一个锁对象加锁之后,如果模式为S,在这个程序,你还可以再对这个锁对象加S模式的锁,如果没有别的用户对其加S模式的锁,那么你还可以对其加E模式的锁。X模式的不可以。
当激活锁对象的时候,系统会自动创建两个FM,ENQUEUE_<锁对象名>和DEQUEUE_<锁对象名>,分别用来锁定和解锁。
SAP系统在应用服务器层面有一个全局的LOCK TABLE,可以用来设置逻辑锁来锁定相关的表条目,并有ENQUEUE工作进程来管理这些锁。SAP锁是一种逻辑意义上的锁,有可能你锁定的表条目在DATABASE上根本就不存在。
二、锁对象和其对应的Function Module
在SE11里创建锁对象,自定义的锁对象都必须以EZ或者EY开头来命名。一个锁对象里只包含一个PRIMARY TABLE,可以包含若干个SECONDARY TABLE,锁的模式有三种:E,S,X。LOCK PARAMETERS里填写你要根据哪些字段来锁定表条目。
ABAP 锁对象与加锁机制 Nhomakorabea一、SAP为什么要设置锁:
1,保持数据的一致性
如果几个用户要访问同样的资源,需要找到一种同步访问的方法去保持数据的一致性。比如说,在航班预订系统中,需要检查还有没有空座位,当检查的时候,你不想别人修改重要的数据(空座位的数量)。
SAP程序运行锁
* –>PO_MSG 返回的消息
*———————————————————————*
FORM do_lock USING pi_progname TYPE progname
pi_wait TYPE c "X=waiting
1. create a Table ZRUNNING_LOCK (tcode:se11)
fields: MANDT , PROGNAME
2. create Lock object EZRUNLOCK (tcode:se11)
短文本 程序运行锁
3. 如果需对程序加锁,则在程序中执行
*———————————————————————*
FORM release_lock USING pi_progname TYPE progname.
CALL FUNCTION ‘DEQUEUE_EZRUNLOCK’
EXPORTING
mode_zrunning_lock = ‘E’
*&——————————————————————–*
*& Form release_lock
*&——————————————————————–*
* 释放锁定
*———————————————————————*
* –>PI_PROGNAME 程序名
EXPORTING
mode_zrunning_lock = ‘E’
mandt = sy-mandt
progname = pi_progname
* X_PROGNAME = ‘ ‘
SEPARATED BY space.
abap如何获取sap标准表的相关的锁(lock)
* i_callback_program = repname
* i_callback_user_command = g_user_command
* i_structure_name = 'INV'
* is_layout = layout
append g_fieldcat to g_fcat.
g_fieldcat-fieldname = 'DNAME'.
g_fieldcat-seltext_s = '解锁函数名'.
append g_fieldcat to g_fcat.
call function 'REUSE_ALV_GRID_DISPLAY'
6.获取表相关锁的列表程序
REPORT ZRFI0090 LINE-COUNT 70
LINE-SIZE 255
NO STANDARD PAGE HEADING.
type-pools: slis.
tables: DD02L,dd26s.
Exclusive but not cumulative lock
Exclusive locks can be requested by the same transaction more than once and handled successively, but an exclusive but not cumulative lock can only be requested once by a given transaction. All other lock requests are rejected.
Shared lock
sap 自动生成锁函数
SAP 自动生成锁函数1. 引言在SAP系统中,锁函数是一种用于控制并发访问的机制。
通过使用锁函数,可以确保在多个用户同时访问同一个数据时,数据的一致性和完整性得到保证。
为了简化锁函数的编写过程,SAP提供了自动生成锁函数的功能,本文将深入探讨这一功能的使用方法和优势。
2. 自动生成锁函数的背景在传统的SAP开发中,为了保证数据的一致性,开发人员需要手动编写锁函数来处理并发访问。
这种方式存在以下几个问题: 1. 需要手动编写大量的锁函数代码,增加了开发工作量; 2. 容易出现编码错误,导致数据的一致性和完整性受到威胁;3. 难以维护和修改,特别是在应对复杂的业务场景时。
为了解决以上问题,SAP引入了自动生成锁函数的功能,通过该功能,开发人员可以自动地生成锁函数代码,从而大大简化了开发过程。
3. 自动生成锁函数的使用方法使用SAP自动生成锁函数的功能非常简单,只需要按照以下步骤进行操作: 1. 打开SAP开发工具(如ABAP Workbench); 2. 找到需要生成锁函数的对象(如表、视图、函数模块等); 3. 右键点击该对象,选择”生成锁函数”; 4. 在弹出的对话框中选择生成锁函数的选项,如锁模式、锁对象等; 5. 点击”确定”按钮,SAP将自动生成相应的锁函数代码。
4. 自动生成锁函数的优势通过使用SAP自动生成锁函数的功能,可以获得以下几个优势: 1. 提高开发效率:自动生成锁函数可以大大减少开发人员的工作量,节省编写大量重复代码的时间;2. 降低错误风险:自动生成的锁函数代码经过严格的测试和验证,可以避免由于人为错误导致的数据一致性问题; 3. 简化维护和修改:自动生成的锁函数代码结构清晰,易于理解和修改,特别是在应对复杂的业务场景时; 4. 提升系统性能:通过合理地使用锁函数,可以减少并发访问时的冲突,从而提升系统的响应速度和吞吐量。
5. 自动生成锁函数的应用场景自动生成锁函数的功能可以广泛应用于SAP系统中的各个模块和业务场景,包括但不限于以下几个方面: 1. 数据库操作:在对数据库中的表进行增删改查操作时,通过自动生成锁函数可以确保数据的一致性; 2. 事务处理:在复杂的事务处理过程中,通过自动生成锁函数可以简化代码编写,并保证事务的完整性; 3. 并发访问控制:在多个用户同时访问同一个数据时,通过自动生成锁函数可以避免数据冲突和竞争条件。
sap 自动生成锁函数
sap 自动生成锁函数【实用版】目录1.SAP 自动生成锁函数的概念和原理2.SAP 自动生成锁函数的作用和应用场景3.SAP 自动生成锁函数的具体实现方法4.SAP 自动生成锁函数的优点和局限性5.总结正文1.SAP 自动生成锁函数的概念和原理SAP 自动生成锁函数是指在 SAP 系统中,根据特定条件和规则,自动为某个数据对象或业务过程生成锁机制,以确保数据一致性和业务流程的完整性。
其原理是通过编程技术,在 SAP 系统中嵌入特定的代码逻辑,当满足生成锁的条件时,系统会自动执行锁函数,从而实现对数据的锁定和保护。
2.SAP 自动生成锁函数的作用和应用场景SAP 自动生成锁函数的主要作用是确保数据安全和一致性。
在 SAP 系统中,有些业务过程涉及到多个用户同时访问和操作数据,为了防止数据冲突和不一致,需要对这些业务过程实施锁机制。
自动生成锁函数可以有效避免数据冲突,确保业务流程的完整性和正确性。
应用场景包括但不限于:库存管理、财务会计、生产计划等领域,涉及到数据敏感性和一致性要求的业务过程。
3.SAP 自动生成锁函数的具体实现方法SAP 自动生成锁函数的实现方法主要包括以下几个步骤:(1)分析业务需求,确定需要实现锁机制的数据对象或业务过程;(2)编写相应的编程代码,实现锁函数的逻辑;(3)在 SAP 系统中嵌入锁函数,与相关业务过程或数据对象关联;(4)设置触发锁函数的条件和规则,确保在满足特定条件时,系统能够自动执行锁函数。
4.SAP 自动生成锁函数的优点和局限性优点:(1)提高了数据安全性和一致性,降低了数据冲突和错误发生的风险;(2)减少了人工干预,降低了维护成本和出错概率;(3)实现了业务过程的自动化管理,提高了工作效率。
局限性:(1)对编程技术要求较高,需要具备一定的开发能力;(2)锁函数的设置和维护需要消耗一定的系统资源,可能影响系统性能;(3)锁函数的适用范围有限,对于一些复杂的业务场景,可能需要额外的手动配置和控制。
sap 自动生成锁函数
sap 自动生成锁函数摘要:1.SAP系统介绍2.锁函数的作用3.自动生成锁函数的优势4.实现自动生成锁函数的方法5.总结正文:SAP(Systems, Applications & Products in Data Processing)是一家全球知名的企业管理和资源规划软件供应商。
SAP系统广泛应用于各行业,为企业提供了一整套业务流程管理解决方案。
在SAP系统中,锁函数是一个重要的功能,用于确保数据的一致性和完整性。
锁函数在SAP系统中的作用主要体现在以下几个方面:1.数据锁定:在执行某些关键业务操作时,如删除、更新等,锁函数可以锁定相关数据,防止并发操作导致数据不一致。
2.事务处理:锁函数可以确保事务在执行过程中,数据不会被其他事务更改,保证事务的隔离性。
3.死锁处理:在发生死锁时,锁函数可以检测到并尝试解决死锁,以恢复系统的正常运行。
自动生成锁函数的优势在于:1.提高效率:自动生成锁函数可以减少人工编写代码的工作量,节省开发时间。
2.减少错误:自动生成锁函数由专业工具生成,相较于人工编写,更不容易出现错误。
3.易于维护:自动生成的锁函数结构清晰,便于后续的维护和优化。
要实现自动生成锁函数,可以采用以下方法:1.使用SAP提供的开发工具,如ABAP、Java等,编写自定义函数库。
2.使用第三方工具,如OpenL Tablets、Scientific T ools等,生成锁函数。
3.利用SAP系统内部的自动化工具,如SAPscript、SmartForms等,生成锁函数。
总之,自动生成锁函数可以提高SAP系统的开发效率和运行稳定性,是企业进行现代化管理的有效手段。
SAP 编辑锁定
ID 'CUSTID' FIELD '1234567890'
ID 'KEY' FIELD DUMMY_KEY.
2,SE38,change LSKEYF00,这时回停在断点上,ok,把SY-SUBRC修改为0,F8继续执行,
然后在CALL 'GET_DEVELOPER_KEY' ID 'NAME' FIELD 'ABCDEFGHIJKL'
ID 'CUSTID' FIELD '1234567890'
ID 'KEY' FIELD DUMMY_KEY.
的后面加上这段话
IF sy-uname = 'ABAPER'.注意:sy-uname为自己的user id
sy-subrc = 0.
ENDIF.
3,save,check,active,这期间会有好几次停在在第1步的时候设置的断点上,
记得把SY-SUBRC都改为0
se30f6tipstrickslskeyf00的属性是否是editorlock如果是执行在右边写下面一段程序f8执行lskeyf00的editorlock就会打开updateprogdirsetedtxwherenamelskeyf00andstatea
先检查程序:LSKEYF00的属性是否是Editor lock,如果是,执行SE30->F6(Tips&Tricks),
在右边写下面一段程序,F8执行,LSKEYF00的Editor lock就会打开
SAP锁机制整理
SAP锁机制整理SAP是一个非常强大的企业资源规划(ERP)软件系统,用于管理企业的各个方面,包括物流、采购、销售、财务等等。
在SAP中,锁机制是一种重要的机制,用于确保并发处理时数据的一致性和完整性。
在本文中,我们将对SAP的锁机制进行整理。
SAP的锁机制实际上是建立在数据库的基础上的。
SAP使用关系数据库作为持久存储,通过数据库的锁机制来实现并发控制。
在SAP中,锁是在数据库的行级别上进行的。
当一个事务对一些表中的其中一行进行处理时,它会对该行加锁,以防止其他并发事务对该行进行修改或删除。
SAP的锁机制可以分为两个层次,一个是SAP内核层面的锁机制,另一个是应用层面的锁机制。
在SAP内核层面,主要有以下几种类型的锁:1. 行锁(Row Lock):锁定一些表中的其中一行。
这是最常见的锁类型,用于避免两个事务同时对同一行进行修改。
2. 表锁(Table Lock):锁定整个表。
这种锁类型较少使用,只有在执行需要修改整个表的操作时才会使用。
3. 字段锁(Field Lock):锁定一些表中的一些字段。
这种锁类型也较少使用,一般只在特定情况下才会使用。
在应用层面,SAP使用两种类型的锁来实现并发控制:1. 更新锁(Update Lock):用于对读取的数据加锁,以避免其他并发事务对该数据进行修改。
2. 排他锁(Exclusive Lock):用于对已经修改的数据加锁,以避免其他并发事务对该数据进行读取或修改。
SAP的锁机制还有一些其他关键点需要了解:1.锁的粒度:SAP的锁机制是基于行级别的,也就是说,当一个事务对一些表进行处理时,它只会锁定该表中的其中一行,而不是整个表。
2.锁的隔离级别:SAP的锁机制可以设置不同的隔离级别,用于控制锁的范围。
隔离级别分为读未提交、读提交、可重复读和串行化四个级别。
3.锁的处理方式:当一个事务对一些行进行锁定时,如果其他事务也对该行进行了锁定,那么后来的事务会进入等待状态,直到前一个事务释放锁为止。
SAP 最新锁定 独立锁定
SAP 最新锁定独立锁定路径SPRO:Materials Management->General Settings for Materials managemnet->Set material block for goods movements此设置有两个选择,一个是“独立锁定”,一个是“最新锁定”;前者是在做货物移动时,输入物料号就开始锁定;后者是在存盘的瞬间,才锁定物料。
此处的锁定是指,在锁定后,其他人不能再对此物料进行货物移动等操作。
其优缺点如下(帮助文档摘录):在货物移动过程中排他冻结DefinitionWhen material master data is read for the first time during a goods movement, this indicator specifies that tables MARC (plant data) and MBEW (accounting data) are locked exclusively until the goods movement has been fully posted.Another user cannot maintain the material during this time. This ensures that the goods movement is valuated correctly and that the stock quantities and values are updated correctly. The disadvantage is the long period of time for which the lock is set (from the time the material master data is first read when the goods movement is entered through to completion of the update posting).货物移动的最近冻结DefinitionSpecifies that a material:is not always blocked exclusively, but only if data is actually to be saved.is blocked exclusively as late as possible to keep the lock time to a minimum.The advantage is that several users can enter goods movements at the same time because only one shared lock is set for the material when the movement is entered.The disadvantage is that the material master record is read several times and, in the case of an outward stock解决方法:T-code :SM12 可查看。
SAP锁机制整理
一、SAP锁的概念SAP 的锁是一种逻辑锁,SAP为了同步同时多个用户操作同一数据,防止数据出现不一致性而采用了锁机制。
一般SAP会在操作数据前设置锁,防止第二个用户进行修改操作,当操作结束后系统再释放锁。
二、SAP为什么要设置锁1.保持数据的一致性如果几个用户要访问同样的资源,需要找到一种同步访问的方法去保持数据的一致性。
比如说,在航班预订系统中,需要检查还有没有空座位,当检查的时候,你不想别人修改重要的数据(空座位的数量)。
2.仅仅用Database锁是不够的数据库管理系统物理锁定了要修改的行记录,其他用户要等到数据库锁释放才能访问这个记录。
SAP Lock是一种逻辑锁,相对于DB Lock,是一种轻量级的锁,DB Lock一旦发现不能加锁会进行延迟等待,使用SAP Lock 一定程度上可以减少对DB Lock的占用,避免死锁,同时合理使用SAP Lock可以保证数据的一致性在SAP系统中,当一个新屏幕显示的时候会释放掉Database锁,因为屏幕的改变会触发一个隐式的DB COMMIT。
如果数据是从好几个屏幕收集来的话,而且在这段时间内这些数据会分别被锁定,仅仅用Database锁就不够了。
SAP系统在应用服务器层面有一个全局的LOCK TABLE,可以用来设置逻辑锁来锁定相关的表条目,并有ENQUEUE工作进程来管理这些锁。
SAP锁是一种逻辑意义上的锁,有可能你锁定的表条目在DATABASE上根本就不存在。
注:select for update 是在DB层次上加的锁三、锁对象和其对应的FM在SE11里创建锁对象,自定义的锁对象都必须以EZ或者EY开头来命名。
一个锁对象里只包含一个PRIMARY TABLE,可以包含若干个SECONDARY TABLE,锁的模式有三种:E(Exclusive lock),S(Shared lock),X(Exclusive but not cumulative lock)。
ABAP锁、数据库锁
ABAP锁、数据库锁ABAP数据锁定数据库锁定:与DB LUW机制类似,数据库本⾝⼀般也提供数据锁定机制。
数据库将当前正在执⾏修改操作的所有数据进⾏锁定,该锁定将随着数据库的LUW的结束⽽被重置,因⽽每数据库提交或者回滚之后该锁定就被释放。
因为SAP的LUW概念独⽴于数据库LUW和对话步骤,出于同样的原因,SAP还需要定义⾃⼰的数据锁定机制。
SAP锁定:SAP LUW要求数据库对象的锁定在SAP LUW结束释放,并且该数据库锁要求对所有SAP程序都可见。
SAP提供了⼀个逻辑数据锁定机制,该机制基于系统特定的锁定服务应⽤服务器中的中⼼锁定表(即将加锁的信息记⼊数据库表)。
⼀个ABAP程序在访问数据之前,将希望锁定的数据表关键字发送给该表,因⽽所有的程序在访问⼀个数据库表之前必须⾸先判断该表是否已经被锁定了。
SAP锁定与数据库物理锁定是不同的,它是⼀种业务逻辑上的锁定。
它不会在物理表上进⾏加锁,⽽是将关键字传递加锁函数,加锁函数会在特定表中进加锁信息登记。
SAP LUW在结束时(提交或回滚),SAP锁定将会隐式解除。
在SE11⾥创建锁对象,⾃定义的锁对象都必须以EZ或者EY开头来命名。
⼀个锁对象⾥只包含⼀个PRIMARY TABLE,可以包含若⼲个SECONDARY TABLE。
在设定⼀个SAP锁定,必须在数据字典中创建⼀个锁定对象。
⼀或多个数据库表或关键字段可以被指定为锁定对象中的⼀或多⾏。
激活该对象后,系统⾃动⽣成两个功能函数,名称为ENQUEUE_<LOCK OBJECT>和DENQUEUE_<LOCK OBJECT>,其中<LOCK OBJECT>是锁对象的名称。
l Shared lock(Read Lock)S锁Several users can read the same data at the same time, but as soon as a user edits the data, a second user can no longer access this data. Requests for further shared locks are accepted, even if they are issued by different users, but exclusive locks are rejected.同⼀时间内允许多个⽤户读取同⼀数据,但是⼀旦某个⽤户修改数据后,其它⽤户将不能再访问该数据。
SAP月结帐号锁定操作指引
SAP月结帐号锁定操作指引一,批量定时锁定帐号1,直接登陆需要锁定帐号的Client。
(这里以Client 600为例)2,输入T-Code(SM30)并回车确定。
3,在弹出的“维护表视图”窗口中,如下图输入“ZUSER_NEW“(开发人员自定义的帐号锁定维护表)”并点击“维护”选项。
4,在弹出的“锁定和解锁的帐号维护”窗口中,删除此前的所有记录并保存,然后点击“新条目”并输入要锁定的帐号名细后并点击“保存”,如图:5,输入T-CODE(SE38)创建变式。
为ABAP程式“zlockuser_new”和“zunlockuser_new”创建Z_3020变式(根据赣州公司代码3020锁定帐号)创建Z_3030变式(根据深圳,东莞,坪山公司代码3030锁定帐号)PS:因为东莞,坪山和深圳的帐号均为D1*所以根据3030锁定帐号,三个公司下的帐号均会锁定。
为ABAP程式“zunlockuser_new”创建变式:创建Z_3020变式(根据赣州公司代码3020解锁帐号)创建Z_3030变式(根据深圳,东莞,坪山公司代码3030解锁帐号)PS:因为东莞,坪山和深圳的帐号均为D1*所以根据3030解锁帐号,三个公司下的帐号均会解锁。
6,ABAP程式的变式已经维护好了之后,输入T-Code(SM36),设置时间执行计划。
如下图:7,在弹出的“定义后台作业”窗口中,输入自行定义的后台作业名称如“2016年7月月结帐号锁定”并点击“步骤”选项,进行执行时间,运行程序等各方面的设置。
说明:(根据变式Z_3020锁定帐号)进行“开始条件”设置设置根据变式(Z_3030)锁定深圳帐号8,在弹出的“创建步骤”中输入开发人员自行开发的ABAP程序“ZLOCKUSER_NEW”用户锁定程序,用户解锁程式是“ZUNLOCKUSER_NEW”选择相应的变式,然后点击“保存”。
保存成功后,返回上一页面9,在返回的“定义后台作业”窗口中,点击“开始条件”设置时间参数!10,检查后台作业的结果是否设置成功。
ABAP锁对象与加锁机制
ABAP锁对象与加锁机制ABAP是一种面向对象语言,被广泛用于SAP系统中的开发。
在SAP 系统中,为了保证并发事务的一致性和数据的完整性,引入了锁对象和加锁机制。
锁对象是指在SAP系统中使用的一种特殊的数据结构,它用于管理对一些数据的并发访问。
锁对象是由一个或多个字段组成的,并且可以根据需要创建新的锁对象。
每个锁对象都有一个唯一的名称,并且可以在程序中进行引用。
加锁机制是指在程序中使用特定的代码逻辑来锁定和释放锁对象。
通过加锁机制,可以实现对一些数据的独占性访问,从而避免并发事务导致的数据不一致的问题。
在ABAP中,可以使用以下几种方式来实现加锁机制:1.EXCLUSIVE锁:EXCLUSIVE锁是一种独占锁,它可以防止其他事务对被锁定的数据进行任何修改。
当一个事务对一些数据加上EXCLUSIVE锁时,其他事务必须等待该锁释放才能进行操作。
EXCLUSIVE锁可以通过命令ENQUEUE来获取,通过DEQUEUE来释放。
2.SHARE锁:SHARE锁是一种共享锁,它允许多个事务同时对被锁定的数据进行读取操作,但禁止进行写操作。
SHARE锁可以通过命令ENQUEUE_READ来获取,通过DEQUEUE读取来释放。
3.更新锁:更新锁是一种介于EXCLUSIVE锁和SHARE锁之间的锁。
它允许多个事务同时对被锁定的数据进行读取操作,但只允许一个事务进行修改操作。
更新锁可以通过命令ENQUEUE_READ更新来获取,通过DEQUEUE_READ释放。
通过使用这些锁对象和加锁机制,可以在SAP系统中实现并发事务的一致性。
例如,在一个订单处理系统中,当一个用户对一些订单进行修改时,可以通过加上EXCLUSIVE锁来防止其他用户同时进行修改操作,从而保证数据的完整性。
然而,在使用锁对象和加锁机制时需要注意以下几点:1.锁的级别:在加锁机制中,锁可以在不同的级别上进行管理。
级别高的锁可以阻止级别低的锁对相同的数据进行访问。
sap旧锁分析和总结
Sap系统旧锁处理
有时候sap运维监控的时候会出现很多用户旧锁,在sml2里面可以看到
Lock Ctrtfy Litt
劫Faimh 口CMeate (J ■ Cl. UserIlieB>le TableLc>dc aie^ent
aO ZFVBP2L1T!25I3) IKCPS2]Offtfntf>tliTUS
Selectod lock enirlw;1如果旧锁时间超过一天,time列会显示为日期
如果旧锁时间超过一天就需要通知业务是否可以删除,业务确认后,选中旧锁,点上面的删除按钮就行了
的I<J B eee QNM 0 0Gg PIFI为■
lock entry LM Oi]**T«* Q MA FL
Cl. UeerTSae Bode Table Loe* 1x91aent
Z10 阶・”Z1: 1I:Z5:ZO E BKT5 aMfHfVWHUTliS
£«1H )ock antr^a*:1如果同一个用户的旧锁很多,且都是超过一天的旧锁,可以通过以下方式快速删除旧锁Sml2,填写该用户名,点击list
FH点击LOCK ENTRY下的DELETE ALL即可
q Lock entry Edit 00co Extras System Heb
e▼《uie@gi9(M36电©2拈西因⑪哩
Lock Entry List
Refresh QJoetats 3 r
CL UserTine node Table Lock argunent
No lock entries found。
SAP Lock Object简单实例
Lock Object(锁控制)简单实例1.建立Lock Object使用TCODE: SE11,選擇最後一項[加鎖物件],輸入物件名稱(注意一定要以字母‘E’開頭,這是SAP內部規定的,如EZTEST01)2. 輸入名稱後,按新增,進入界面後輸入要加鎖的Table名,及加鎖類型(E:專用,累計;S:共享;X:專用,不累計)。
保存後,系統會自動產生兩個函數:ENQUEUE_EZTESTING(加鎖)和DEQUEUE_EZTESTING(解鎖)。
有两种锁类型:共享锁——只读锁,一个用户正在读数据时,阻止其他用户更改该数据。
独占锁——可写锁,一个用户正在修改数据时,阻止其他用户更改该数据。
3.然後在更改記錄前調用加鎖函數對記錄進行鎖定,在修改完成或退出修改後一定要對記錄進行解鎖。
范例程序如下:*&---------------------------------------------------------------------**& Report YLOCK_TEST01*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT YLOCK_TEST01.TABLES:ZPICKLISTH.SELECTION-SCREEN BEGIN OF BLOCK VENWITH FRAME TITLE TEXT-110.PARAMETERS:P_WERKS LIKE ZPICKLISTH-WERKS OBLIGATORY DEFAULT'2210',P_ZPKNO LIKE ZPICKLISTH-ZPICKLNO OBLIGATORY DEFAULT'TST1203000002'. SELECTION-SCREEN END OF BLOCK VEN.START-OF-SELECTION.PERFORM LOCK_RECORD USING P_WERKS P_ZPKNO.PERFORM UNLOCK_RECORD USING P_WERKS P_ZPKNO.*&---------------------------------------------------------------------**& Form lock_record*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** -->P_KEY text*----------------------------------------------------------------------*FORM LOCK_RECORD USING P_KEY1 P_KEY2.DATA: IT_SEQG3 TYPE SEQG3 OCCURS01WITH HEADER LINE.DATA: GNAME LIKE SEQG3-GNAME, GARG LIKE SEQG3-GARG.DATA: BEGIN OF %ZPICKLISTH,MANDT TYPE ZPICKLISTH-MANDT,WERKS TYPE ZPICKLISTH-WERKS,ZPICKLNO TYPE ZPICKLISTH-ZPICKLNO,END OF %ZPICKLISTH.CALL'C_ENQ_WILDCARD'ID'HEX0'FIELD %ZPICKLISTH.MOVE SY-MANDT TO: %ZPICKLISTH-MANDT.MOVE P_KEY1 TO: %ZPICKLISTH-WERKS.MOVE P_KEY2 TO: %ZPICKLISTH-ZPICKLNO.GNAME = 'ZPICKLISTH'.GARG = %ZPICKLISTH.CALL FUNCTION'ENQUEUE_READ'EXPORTINGGCLIENT = SY-MANDTGNAME = GNAMEGARG = GARGTABLESENQ = IT_SEQG3.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 S Y-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.IF IT_SEQG3 IS NOT INITIAL.DATA:CMESSAGE(100) TYPE C.CONCATENATE P_KEY1 P_KEY2 '正由' IT_SEQG3-GUNAME '處理!'INTO CMESSAGE.CONDENSE CMESSAGE.MESSAGE CMESSAGE TYPE'E'.ELSE.CALL FUNCTION'ENQUEUE_EZTEST01'EXPORTINGMODE_ZPICKLISTH = 'E'MANDT = SY-MANDTWERKS = P_KEY1ZPICKLNO = P_KEY2_SCOPE = '2'EXCEPTIONSFOREIGN_LOCK = 1SYSTEM_FAILURE = 2OTHERS = 3.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.ENDIF.WRITE: 'Locked.'.ENDFORM. "lock_record*&---------------------------------------------------------------------**& Form unlock_record*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** -->P_KEY text*----------------------------------------------------------------------*FORM UNLOCK_RECORD USING P_KEY1 P_KEY2.CALL FUNCTION'DEQUEUE_EZTEST01'EXPORTINGMODE_ZPICKLISTH = 'E'MANDT = SY-MANDTWERKS = P_KEY1ZPICKLNO = P_KEY2_SCOPE = '3'.WRITE: 'Unlocked.'.ENDFORM. "unlock_record。
SAP系统用户锁定、解锁和密码重设操作流程
济南分公司SAP系统用户锁定、解锁和密码重设操作流程1.概述1.1目的规范SAP系统用户锁定、解锁和密码重设的操作流程,加强SAP系统用户的管理,保证SAP系统的安全、稳定运行。
1.2读者SAP系统的最终用户和SAP系统的用户、权限管理员。
2.用户ID的锁定用户ID锁定是防止用户非法进入系统的简便方式,也是终止临时用户进入系统的理想方式。
通常,当用户进行不正确的登录并且超过某一特定次数时,则此用户ID会被系统自动锁定,这时需要进行用户ID的解锁工作才能恢复此用户ID的登录。
3.用户ID的解锁用户ID一旦被锁定,如需解锁,需要填写“济南分公司ERP 最终用户ID解锁申请表”(请参见附表五),并由所在单位核实后交信息中心SAP用户管理员在SAP系统中进行解锁工作,以防出现欺骗行为。
4.用户ID的管理SAP用户管理员必须对用户ID使用状态进行定期检查,比如:检查用户ID错误登陆的次数。
一旦发现可疑的用户ID或非正常的权限和操作,应立即锁定或终止相关用户ID,以防止非法用户入侵SAP系统。
5.用户密码的重设通常,当用户忘记密码时需要重新设置用户密码,为了防止出现欺骗行为,用户必须填写“中国石化济南分公司ERP最终用户密码重设申请表”(请参见附表六),并由所在单位核实后交信息中心SAP用户管理员在SAP系统中进行密码重设,当系统受到安全威胁时,SAP用户管理员可以强行重设用户密码。
附表五济南分公司ERP最终用户ID解锁申请表说明:此表由用户填写。
单位(部门)核实(签章):年月日附表六济南分公司ERP最终用户密码重设申请表说明:此表由用户填写。
单位(部门)核实(签章):年月日。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、SAP锁的概念SAP 的锁是一种逻辑锁,SAP为了同步同时多个用户操作同一数据,防止数据出现不一致性而采用了锁机制。
一般SAP会在操作数据前设置锁,防止第二个用户进行修改操作,当操作结束后系统再释放锁。
二、SAP为什么要设置锁1.保持数据的一致性如果几个用户要访问同样的资源,需要找到一种同步访问的方法去保持数据的一致性。
比如说,在航班预订系统中,需要检查还有没有空座位,当检查的时候,你不想别人修改重要的数据(空座位的数量)。
2.仅仅用Database锁是不够的数据库管理系统物理锁定了要修改的行记录,其他用户要等到数据库锁释放才能访问这个记录。
SAP Lock是一种逻辑锁,相对于DB Lock,是一种轻量级的锁,DB Lock一旦发现不能加锁会进行延迟等待,使用SAP Lock 一定程度上可以减少对DB Lock的占用,避免死锁,同时合理使用SAP Lock可以保证数据的一致性在SAP系统中,当一个新屏幕显示的时候会释放掉Database锁,因为屏幕的改变会触发一个隐式的DB COMMIT。
如果数据是从好几个屏幕收集来的话,而且在这段时间内这些数据会分别被锁定,仅仅用Database锁就不够了。
SAP系统在应用服务器层面有一个全局的LOCK TABLE,可以用来设置逻辑锁来锁定相关的表条目,并有ENQUEUE工作进程来管理这些锁。
SAP锁是一种逻辑意义上的锁,有可能你锁定的表条目在DATABASE上根本就不存在。
注:select for update 是在DB层次上加的锁三、锁对象和其对应的FM在SE11里创建锁对象,自定义的锁对象都必须以EZ或者EY开头来命名。
一个锁对象里只包含一个PRIMARY TABLE,可以包含若干个SECONDARY TABLE,锁的模式有三种:E(Exclusive lock),S(Shared lock),X(Exclusive but not cumulative lock)。
LOCK PARAMETERS 里填写你要根据哪些字段来锁定表条目。
模式E(写锁):当更改数据的时候设置为此模式。
Exclusive lock :The locked data can be read or processed by one user only. A request for another exclusive lock or for a shared lock is rejected.模式S(读锁):本身不需要更改数据,但是希望显示的数据不被别人更改。
Shared lock :Several users can read the same data at the same time, but as soon as a user edits the data, a second user can no longer access this data. Requests for further shared locks are accepted, even if they are issued by different users, but exclusive locks are rejected.模式X(独占锁):和E类似,但是不允许累加,完全独占。
Exclusive but not cumulative lock :Exclusive locks can be requested by the same transaction more than once and handled successively, but an exclusive but not cumulative lock can only be requested once by a given transaction. All other lock requests are rejected.如果你在一个程序里成功对一个锁对象加锁之后,如果模式为E,其他用户不能再对这个锁对象加E、X、S模式的任意一种锁;如果你在一个程序里成功对一个锁对象加锁之后,如果模式为X,其他用户不能再对这个锁对象加E、X、S模式的任意一种锁;如果你在一个程序里成功对一个锁对象加锁之后,如果模式为S,其他用户不能再对这个锁对象加E、X模式的锁,但是可以加S模式的锁;如果你在一个程序里成功对一个锁对象加锁之后,如果模式为E,在这个程序,你还可以再对这个锁对象加E、S模式的锁,X模式的不可以。
如果你在一个程序里成功对一个锁对象加锁之后,如果模式为X,在这个程序,你不可以再对这个锁对象加E、X、S模式的锁。
如果你在一个程序里成功对一个锁对象加锁之后,如果模式为S,在这个程序,你还可以再对这个锁对象加S模式的锁,如果没有别的用户对其加S模式的锁,那么你还可以对其加E 模式的锁。
X模式的不可以。
当激活锁对象的时候,系统会自动创建两个FM,ENQUEUE_<锁对象名>和DEQUEUE_<锁对象名>,分别用来锁定和解锁。
四、锁定和解锁当用逻辑锁来锁定表条目的时候,系统会自动向LOCK TABLE中写入记录。
当调用设置锁的FM时,LOCK PARAMETERS如果没有指明,系统会锁定整个表。
当然,LOCK PARAMETER:CLIENT有点特殊,如果不指定,默认是SY-MANDT;如果指定相应的CLIENT,会锁定对应CLIENT上的相应的表记录;如果设置为SPACE,则锁定涉及所有的CLIENT。
当逻辑锁设置失败后,一般会有两种例外。
一个是EXCEPTION:FOREIGN_LOCK,意思是已经被锁定了;另一个是EXCEPTION:SYSTEM_FAILURE。
有些情况下,程序中设置成功的逻辑锁会隐式的自己解锁。
比如说程序结束发生的时候(MESSAGE TYPE为A或者X的时候),使用语句LEAVE PROGRAM,LEAVE TO TRANSACTION,或者在命令行输入/n回车以后。
在程序的结束可以用DEQUEUE FUNCTION MODULE来解锁(当然如果你不写这个,程序结束的时候也会自动的解锁),这个时候,系统会自动从LOCK TABLE把相应的记录删除。
使用DEQUEUE FUNCTION MODULE来解锁的时候,不会产生EXCEPTION。
要解开你在程序中创建的所有的逻辑锁,可以用FM:DEQUEUE_ALL.五、上锁的一般步骤先上锁,上锁成功之后,从数据库取数据,然后更改数据,接着更新到数据库,最后解锁。
按照这个步骤,才能保证更改完全运行在锁的保护机制下。
六、SAP锁的相关知识1.相关TCODE:SE112.相关表DD25L:组合标题(方式,MC目标,锁定目标)(纪录了锁主表)DD25T: 视图和锁定对象的短文本DD26S:视图的基本表和外来码关系(纪录了所有和锁相关的表)DD27S:合计(视图,MC对象,锁定对象)字段3.相关函数RS_DD_ENQU_EDITRS_DD_ENQU_ADD4.获取表相关锁的列表程序REPORT ZRFI0090 LINE-COUNT 70LINE-SIZE 255NO STANDARD PAGE HEADING.type-pools: slis.tables: DD02L,dd26s.data: begin of g_tab occurs 10,TABNAME like dd26s-TABNAME,VIEWNAME type dd26s-VIEWNAME,ename like EMFIN-FBEMFIN,dname like EMFIN-FBEMFIN,end of g_tab.data g_fcat type slis_t_fieldcat_alv.data: g_fieldcat type slis_fieldcat_alv.select-options s_table for dd02l-TABNAME default 'VBAK'. end-of-selection.select dd26s~TABNAME dd25l~VIEWNAMEINTO CORRESPONDING FIELDS OF TABLE g_tabfrom dd26sinner join dd25lon dd26s~VIEWNAME = dd25l~VIEWNAMEand dd25l~AGGTYPE = 'E'where TABNAME in s_table.loop at g_tab.concatenate 'ENQUEUE_' g_tab-VIEWNAME into g_tab-ename. concatenate 'DEQUEUE_' g_tab-VIEWNAME into g_tab-dname. modify g_tab.endloop.call function 'REUSE_ALV_FIELDCATALOG_MERGE'EXPORTINGi_program_name = 'ZTEST4'I_INTERNAL_TABNAME = 'G_TAB'i_inclname = 'ZTEST4'CHANGINGct_fieldcat = g_fcat.g_fieldcat-fieldname = 'ENAME'.g_fieldcat-seltext_s = '加锁函数名'.append g_fieldcat to g_fcat.g_fieldcat-fieldname = 'DNAME'.g_fieldcat-seltext_s = '解锁函数名'.append g_fieldcat to g_fcat.call function 'REUSE_ALV_GRID_DISPLAY'exporting* i_callback_program = repname* i_callback_user_command = g_user_command* i_structure_name = 'INV'* is_layout = layoutit_fieldcat = g_fcat* is_variant = g_variant* it_events = events[]* i_callback_pf_status_set = 'F01_ALV_EVENT_PF_STATUS_SET'tablest_outtab = g_tab.5.通过断点找程序所用到的锁用se38打开程序LSENAF01,并定位到send_enqueue子过程,在该过程中的任一语句设置断点。