如何识别其他用户在正在进行的记录打开中获得的锁 [英] How to identify the lock acquired by another user on a record in progress openedge

查看:96
本文介绍了如何识别其他用户在正在进行的记录打开中获得的锁的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

用户A已从客户表中读取了第一条记录.用户B希望知道A保留在记录上的锁. B将如何以编程方式识别用户A持有的锁.

User A has read first record from a customer table. User B wishes to know the lock which is held by A on the record. How will B identify the lock held by User A programmatically.

推荐答案

您可以使用内置的_Lock虚拟系统表.

You can use the built in _Lock Virtual System Table.

这是一个基本示例:

DEFINE TEMP-TABLE ttLock
  FIELD LockId LIKE _Lock._Lock-Id
  FIELD LockUsr LIKE _Lock._Lock-Usr
  FIELD LockName LIKE _Lock._Lock-Name
  FIELD LockTable LIKE _Lock._Lock-Table
  FIELD LockFlags LIKE _Lock._Lock-flags
  INDEX LockIdx IS PRIMARY UNIQUE LockId.

FOR EACH _Lock NO-LOCK:
  IF _Lock._Lock-Usr = ? THEN NEXT .
  CREATE ttLock.
  ASSIGN
      LockId    = _Lock._Lock-Id
      LockUsr   = _Lock._Lock-Usr
      LockName  = _Lock._Lock-Name
      LockTable = _Lock._Lock-Table
      lockFlags = _Lock._Lock-flags.
END.

FOR EACH ttlock:
  FIND _Trans NO-LOCK WHERE  _Trans._Trans-Usrnum = ttLock.LockUsr NO-ERROR.
  FIND _File NO-LOCK WHERE _File-Number = ttLock.LockTable.

  MESSAGE
   "Transaction Id:~t" (IF AVAILABLE _Trans THEN _Trans._Trans-Id ELSE ?) "~n"
   "User Number:~t" ttLock.LockUsr "~n"
   "User Name~t" ttLock.LockName "~n"
   "Table Number:~t" ttLock.LockTable "~n"
   "Table Name:~t" _File-Name "~n"
   "Flags:~t" ttLock.LockFlags
   VIEW-AS ALERT-BOX INFO BUTTONS OK.
END.

(直接来自此知识库中的条目.)

数据库管理指南中,您可以看到(第848),您可以看到_Lock.LockFlags中的标志代表什么.

In the Database Administration guide you can see (page 848) you can see what the flags in _Lock.LockFlags stand for.

锁标记-标志指定共享 锁(S),排他锁(X),已升级的锁 从共享到独占(U),处于边缘状态(L), 排队的锁(Q),锁跨过 事务结束边界(K),锁是其中的一部分 一个JTAtransaction(J),锁处于创建模式 JTA(C)或锁定等待超时已过期 在此排队锁(E)上

Flags for the lock—the flags specify a share lock (S), exclusive lock (X), a lock upgraded from share to exclusive(U), a lock in limbo (L), a queued lock(Q), a lock kept across transaction end boundary (K), a lock is part of a JTAtransaction (J), a lock is in create mode for JTA (C), or a lockwait timeout has expired on this queued lock (E)

查询_Lock表可能只是您要在测试环境中执行的操作.根据您的系统大小,那里可能有很多数据.另外,使用VST进行只读操作!

这篇关于如何识别其他用户在正在进行的记录打开中获得的锁的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆