暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【技术文章】UL锁

云贝教育 2022-10-19
120
——1.申请自定义锁
    DECLARE
    var_handle1 VARCHAR2(128);
    var_output INTEGER;
    BEGIN
    dbms_lock.allocate_unique('USER_LOCK_TEST', var_handle1);--分配锁
    var_output := dbms_lock.request(var_handle1, 6, 32767, FALSE);--请求独占锁
    dbms_output.put_line(var_handle1);--返回锁句柄
    dbms_output.put_line(var_output);--返回状态,0表示成功申请
    END;


    ——2.新开一个窗口,继续执行

      DECLARE
      var_handle1 VARCHAR2(128);
      var_output INTEGER;
      BEGIN
      dbms_lock.allocate_unique('USER_LOCK_TEST', var_handle1);--分配锁
      var_output := dbms_lock.request(var_handle1, 6, 32767, FALSE);--请求独占锁
      dbms_output.put_line(var_handle1);--返回锁句柄
      dbms_output.put_line(var_output);--返回状态,0表示成功申请
      END;

      结果会一直等待,无法获取锁


      ——3.新开一个窗口,释放锁,但是无法释放,因为UL锁特性是,谁申请,谁释放

      将release代码在第一个窗口执行,成功执行

        DECLARE
        l_lock_handle INTEGER;
        BEGIN
        l_lock_handle := dbms_lock.release('123456789');--123456789锁句柄 通过dbms_lock.allocate_unique('USER_LOCK_TEST', var_handle1)的var_handle1获取
        dbms_output.put_line(l_lock_handle);
        END;


        ——4.有关UL锁查询

          select lockid ,dl.name from SYS.dbms_lock_allocated dl where dl.name = 'USER_LOCK_TEST';




          SELECT d.session_id,d.lock_id1--对应dbms_lock_allocated.lockid
          FROM sys.dba_lock d
          WHERE d.lock_type = 'PL/SQL User Lock'
          AND d.blocking_others = 'Blocking';


          文章转载自云贝教育,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论