一、SAP为什么要设置锁:
 
  1,保持数据的一致性     假设几个用户要訪问相同的资源,须要找到一种同步訪问的方法去保持数据的一致性。比方说,在航班预订系统中,须要检查还有没有空座位,当检查的时候,你不想别人改动重要的数据(空座位的数量)。 2,只用Database锁是不够的     数据库管理系统物理锁定了要改动的行记录,其它用户要等到数据库锁释放才干訪问这个记录。     在SAP系统中,当一个新屏幕显示的时候会释放掉Database锁,由于屏幕的改变会触发一个隐式的DB COMMIT。假设数据是从好几个屏幕收集来的话,并且在这段时间内这些数据会分别被锁定,只用Database锁就不够了。 SAP系统在应用server层面有一个全局的LOCK TABLE,能够用来设置逻辑锁来锁定相关的表条目。并有ENQUEUE工作进程来管理这些锁。SAP锁是一种逻辑意义上的锁。有可能你锁定的表条目在DATABASE上根本就不存在。 二、锁对象和其相应的FM    在SE11里创建锁对象,自己定义的锁对象都必须以EZ或者EY开头来命名。一个锁对象里仅仅包括一个PRIMARY TABLE,能够包括若干个SECONDARY TABLE,锁的模式有三种:E,S,X。LOCK PARAMETERS里填写你要依据哪些字段来锁定表条目。 模式E:当更改数据的时候设置为此模式。 模式S:本身不须要更改数据,可是希望显示的数据不被别人更改。 模式X:和E类似。可是不同意累加,全然独占。    假设你在一个程序里成功对一个锁对象加锁之后,假设模式为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锁未及时解除。导致兴许无法正常操作。这时可用Tcode:SM12来手工删除相关的锁定

SAP 锁对象 基本概念与基本操作 SE11的更多相关文章

  1. SAP 锁机制

    SAP锁机制一.SAP为什么要设置锁:   1,保持数据的一致性     如果几个用户要访问同样的资源,需要找到一种同步访问的方法去保持数据的一致性.比如说,在航班预订系 统中,需要检查还有没有空座位 ...

  2. java 并发多线程 锁的分类概念介绍 多线程下篇(二)

    接下来对锁的概念再次进行深入的介绍 之前反复的提到锁,通常的理解就是,锁---互斥---同步---阻塞 其实这是常用的独占锁(排它锁)的概念,也是一种简单粗暴的解决方案 抗战电影中,经常出现为了阻止日 ...

  3. java锁与监视器概念 为什么wait、notify、notifyAll定义在Object中 多线程中篇(九)

    在Java中,与线程通信相关的几个方法,是定义在Object中的,大家都知道Object是Java中所有类的超类 在Java中,所有的类都是Object,借助于一个统一的形式Object,显然在有些处 ...

  4. 锁Lock的概念

    并发访问同一资源的功能,需要引入锁Lock的概念,也就是说,某个时刻,当有一个访问类访问这个数据对象时,这个数据对象必须上锁Locked,用完后就立即解锁unLocked,再供其它访问类访问.

  5. Redis专题(3):锁的基本概念到Redis分布式锁实现

    拓展阅读:Redis闲谈(1):构建知识图谱 Redis专题(2):Redis数据结构底层探秘 近来,分布式的问题被广泛提及,比如分布式事务.分布式框架.ZooKeeper.SpringCloud等等 ...

  6. 【翻译十八】java-并发之锁对象

    Lock Objects Synchronized code relies on a simple kind of reentrant lock. This kind of lock is easy ...

  7. OC中对象拷贝概念

    OC中的对象拷贝概念,这个对于面向对象语言中都会有这种的问题,只是不同的语言有不同的解决方式:C++中有拷贝构造函数,Java中需要实现Cloneable接口,在clone方法中进行操作.但是不过OC ...

  8. 锁对象Lock

    Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题: public class LockTest { publicstaticv ...

  9. java类(Class)的概念;对象的概念,声明类的属性 和方法,局部变量和成员变量,面向对象编程思维,抽象的概念

    类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网 ...

随机推荐

  1. python之动态参数 *args,**kwargs(聚合,打散)

    一.函数的动态参数 *args,**kwargs, 形参的顺序1.你的函数,为了拓展,对于传入的实参数量应该是不固定,所以就需要用到万能参数,动态参数,*args, **kwargs 1,*args  ...

  2. Login登录页面的制作流程(摘要)

    *****我的QQ号:1539832180.欢迎一起讨论学习.*****   第一步:拿到设计图,先别急着切,先分析. 因为切图不只是切图,设计不只是设计.你得考虑四方面的因素: 1. 合理的切图,语 ...

  3. 数据库质疑或只有MDF文件资料

    --允许进行系统表的操作 use master declare @databasename varchar(255) set @databasename='Blwy BarCode' --1.如果用户 ...

  4. NYOJ 118 修路方案

    修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修 ...

  5. Percona XtraBackup 2.4新特性之恢复单个表数据

    参考文档:https://www.percona.com/doc/percona-xtrabackup/2.4/xtrabackup_bin/restoring_individual_tables.h ...

  6. USACO Party Lamps

    题目大意:一排灯有n个,有4种开关,每种开关能改变一些灯现在的状态(亮的变暗,暗的变亮)现在已知一些灯的亮暗情况,问所以可能的情况是哪些 思路:同一种开关开两次显然是没效果的,那么枚举每个开关是否开就 ...

  7. 高通android7.0刷机工具使用介绍

    刷机工具安装 1. 安装QPST.WIN.2.7 Installer-00448.3 2. 安装python2.7,并配置其环境变量 刷机方法 1.将编译后的刷机文件拷贝到如下目录:SC20_CE_p ...

  8. 洛谷 [P3480] KAM-Pebbles

    博弈论转化 本题的限制条件很多,我们尝试转化, 我们发现,定义 c[i] 为第 i 堆可以取得数量,如果第 i 堆取出了 x ,那么 c[i] - x , c[i + 1] + x 我们发现这是一个反 ...

  9. 巴蜀2904 MMT数

    Description FF博士最近在研究MMT数. 如果对于一个数n,存在gcd(n,x)<>1并且n mod x<>0 那么x叫做n的MMT数,显然这样的数可以有无限个. ...

  10. 记住密码后,密码框Password会自动带出数据

    一般登陆之后浏览器会询问是否记住密码,如果把密码记住在浏览器上,下次登陆的时候浏览器会把用户名和密码自动填充到登录页面.前段时间服务站平台的员工账号模块提测后,测试提出360浏览器记住密码后会自用把登 ...