SAP 锁对象

防止用户操作数据库的并发问题,可以使用锁对象技术。

se11的最后一个功能是建立锁对象,例如对创建的数据库表加锁,命名可以是"E"+表名。

名字起好后点创建,输入锁对象短文本(描述),在tables选项中选择要加锁的表名,之后在下面的lock parameter中一般选择"E"(专用,累积),设置好后,一个锁对象就建好了,在lock parameter选项中,系统默认表的所有主键都是锁参数。根据个人需要可以删除不需要的参数。

之后在程序中,调用CALL FUNCTION ‘ENQUEUE_EZPSEINFNR‘和CALL FUNCTION ‘DEQUEUE_EZPSEINFNR‘两函数在程序中加锁和解锁,第一个函数用于在程序操作数据库之前上锁,后一个是程序操作数据库后将锁释放。代码如下:

CALL FUNCTION ‘ENQUEUE_EZPSEINFNR‘

EXPORTING

mode_zpseinfnr       = ‘E‘

mandt                = sy-mandt

proname              = p_maktg

*   IDNRK                =

werks                = p_werks

*   X_PRONAME            = ‘ ‘

*   X_IDNRK              = ‘ ‘

*   X_WERKS              = ‘ ‘

_scope               = ‘2‘

*   _WAIT                = ‘ ‘

*   _COLLECT             = ‘ ‘

EXCEPTIONS

foreign_lock         = 1

system_failure       = 2

OTHERS               = 3

.

IF sy-subrc <> 0.

uname = sy-msgv1.

MESSAGE s001 WITH ‘用户‘ uname ‘正在修改此工厂的项目:‘ p_maktg.

STOP.

ENDIF.

select zpesinfnr....

...

CALL FUNCTION ‘DEQUEUE_EZPSEINFNR‘

EXPORTING

mode_zpseinfnr       = ‘E‘

mandt                = sy-mandt

时间: 2024-09-30 06:56:49

SAP 锁对象的相关文章

SAP 锁对象 基本概念与基本操作 SE11

  一.SAP为什么要设置锁:     1,保持数据的一致性     如果几个用户要访问同样的资源,需要找到一种同步访问的方法去保持数据的一致性.比如说,在航班预订系统中,需要检查还有没有空座位,当检查的时候,你不想别人修改重要的数据(空座位的数量).   2,仅仅用Database锁是不够的     数据库管理系统物理锁定了要修改的行记录,其他用户要等到数据库锁释放才能访问这个记录.     在SAP系统中,当一个新屏幕显示的时候会释放掉Database锁,因为屏幕的改变会触发一个隐式的DB

锁对象

SAP中锁模式有三种  模式E:当更改数据的时候设置为此模式. 模式S:本身不需要更改数据,但是希望显示的数据不被别人更改. 模式X:和E类似,但是不允许累加,完全独占. 如果你在一个程序里成功对一个锁对象加锁之后,如果模式为E,其他用户不能再对这个锁对象加E.X.S模式的任意一种锁: 如果你在一个程序里成功对一个锁对象加锁之后,如果模式为X,其他用户不能再对这个锁对象加E.X.S模式的任意一种锁: 如果你在一个程序里成功对一个锁对象加锁之后,如果模式为S,其他用户不能再对这个锁对象加E.X模式

锁对象的维护

1.创建自定义的所对象 锁对象也是SAP数据字典的一部分,其操作的实质还是物理表相关联.锁对象的名称和一般自定义的对象不同,它要求以E作为首字母,后面接着表名称一般, 1)锁模式有三种,具体属如下: E:专用.积累,被锁定的数据只能被一个用户来读取,不允许其他用户来进行锁操作.一般主数据的锁定都会使用该类型. S:共享.本身不需要修改该数据,但是在读取数据时候不允许该数据被其他用户以E或者X的模式来进行修改,允许被锁定数据被多个用户以S来读取,也就是不能被其他用户修改可以被其他用户读取. X:专

并发编程(5):锁对象、同步代码块

1.同步代码块 使用synchronized声明的方法在某些情况下是有弊端的,比如A线程调用同步的方法执行一个很长时间的任务,那么B线程就必须等待比较长的时间才能执行,这样的情况下可以使用synchronized代码块去优化代码执行时间,也就是通常所说的减小锁的粒度. 代码 public class Demo7 { public void doLongTimeTask(){ try { System.out.println("当前线程开始:" + Thread.currentThrea

锁对象Lock

Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题: public class LockTest { publicstaticvoid main(String[] args) { final Outputter1 output = new Outputter1(); new Thread() { publicvoid run() { output.output("zhangsan"); }; }.start();

zbb20170728 oracle 查看被锁对象

查询Oracle正在执行和执行过的SQL语句 --查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, paddr, sql_text 正在执行的SQL, b.machine 计算机名 FROM v$process a, v$session b, v$sqlarea c WHERE a.addr = b.paddr AND b.sql_hash_valu

java锁对象

在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在java.util.concurrent.locks 包下面,里面有三个重要的接口Condition.Lock.ReadWriteLock. Condition: Condition 将 Object 监视器方法(wait.notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set (wait-se

java多线程(二)锁对象

转载请注明出处:http://blog.csdn.net/xingjiarong/article/details/47679007 在上一篇博客中,我们讨论了Race Condition现象以及它产生的原因,现在我们知道它是不好的一种现象了,那么我们有什么方法避免它呢.最直接有效的方式就是放弃多线程,直接改为使用单线程但操作数据,但是这是不优雅的,因为我们知道有时候,多线程有它自己的优势.在这里我们讨论两种其他的方法--锁对象和条件对象. 锁对象 java SE5.0之后为实现多线程的互斥引入了

每个锁对象都有两个队列,一个是就绪队列,一个是阻塞队列

每个锁对象都有两个队列,一个是就绪队列,一个是阻塞队列,就绪队列存储了将要获得锁的线程,阻塞队列存储了被阻塞的线程,当一个被线程被唤醒 (notify)后,才会进入到就绪队列,等待获得锁. 当一开始线程a第一次执行account.add方法时,jvm会检查锁对象account 的就绪队列是否已经有线程在等待,如果有则表明account的锁已经被占用了,由于是第一次运行,account的就绪队列为空,所以线程a获得了锁, 执行account.add方法.如果恰好在这个时候,线程b要执行accoun