oracle 使用DBeaver创建数据库锁

4jb9z9bj  于 2023-03-22  发布在  Oracle
关注(0)|答案(3)|浏览(361)

我正在寻找一种方法来创建一个锁在我的Oracle数据库与DBeaver,我需要测试我的应用程序。
一个SELECT * FROM TBL WHERE ID=123 FOR UPDATE就可以了,但是锁当然只在它执行的时间内。我可以通过在我想要的或预先给定的时间到期之前不提交来延长锁的时间到几十秒吗?

5tmbdcev

5tmbdcev1#

使用PL/SQL块并休眠:

DECLARE
  v_row TBL%ROWTYPE;
BEGIN
  DBMS_OUTPUT.ENABLE();
  DBMS_OUTPUT.PUT_LINE(SYSTIMESTAMP);

  SELECT *
  INTO   v_row
  FROM   TBL
  WHERE ID=123
  FOR UPDATE;

  DBMS_OUTPUT.PUT_LINE(SYSTIMESTAMP);
  DBMS_SESSION.SLEEP(12);
  DBMS_OUTPUT.PUT_LINE(SYSTIMESTAMP);

  -- COMMIT or ROLLBACK etc.
END;
/

fiddle(注意:毫不奇怪,小提琴有12秒的延迟,当你运行它)。

ndh0cuux

ndh0cuux2#

对于测试锁定,我只需要创建一个新会话(sqlplus或您最喜欢的DB客户端软件),然后在不提交的情况下进行更新。

UPDATE tbl
   SET id = id
 WHERE id = 123;

-- do nothing else until you are done testing, then manually:

ROLLBACK;

当此会话持有行锁时,您可以使用您的应用建立自己的连接并呈现您要查找的行为。
如果您愿意,也可以锁定整个表:

LOCK TABLE tbl;

然后提交或回滚以发布。

1tu0hz3e

1tu0hz3e3#

通过DBeaver的工具栏切换到手动提交被证明是解决我的问题的最方便的解决方案。

相关问题