zoukankan      html  css  js  c++  java
  • Oracle dbms_lock.sleep()存储过程使用技巧-场景-分析-实例

    Oracle dbms_lock.sleep()存储过程使用技巧》-场景-分析-实例

    摘要:今天是2014年3月10日,北京,雾霾,下午组织相关部门开会。会议的结尾一名开发工程师找到了我,向我请教了一下“如何延迟SQL语句的执行时间”为了是测试项目的一个功能输出。在我的建议下使用了dbms_lock.sleep()存储过程来完成了这个实现。我在会议之后体会到Oracle的package的应用场景非常重要。往往新入职场的DBA技术不错,会的东西也不少,就是不太了解什么技术应用在什么场景下,使之发挥最大的作用来帮助我们。今天借此机会来给大家分享一下dbms_lock.sleep()存储过程使用技巧。

    场景:

    1:存储过程中想实现延迟10分钟再继续执行

    2:应用中判断条件如果在“同步”就需要等待5分钟,如果“完成”就可以无需等待

    3:测试功能反馈是否正常,我们需要延迟3分钟得到SQL语句的结果和不延迟得到的SQL语句结果是否一致

    dbms_lock包:

    1.这个package是Oracle提供的一个锁管理服务包,它具有创建一个锁,请求锁的状态,释放一个锁资源等功能。一般使用dbca创建的数据库默认就有这个包,如果是手工建库的话需要执行$ORACLE_HOME/rdbms/admin/dbmslock.sql这个脚本来创建这个package。创建之后数据库中才能有这个包对象。

    注意:只有授予执行权限才能使用

    使用SYS用户授予权限

    grant execute on dbms_lock to USERNAME;

    2.查看dbms_lock包内容

    SQL> desc dbms_lock

    Element         Type      

    --------------- ---------

    NL_MODE         CONSTANT  

    SS_MODE         CONSTANT  

    SX_MODE         CONSTANT  

    S_MODE          CONSTANT  

    SSX_MODE        CONSTANT  

    X_MODE          CONSTANT  

    MAXWAIT         CONSTANT  

    ALLOCATE_UNIQUE PROCEDURE     给锁分配一个唯一的标识符

    REQUEST         FUNCTION      请求一个锁的模式(获取锁的状态值)

    CONVERT         FUNCTION      将锁从一个状态转换成另一个状态

    RELEASE         FUNCTION      释放锁

    SLEEP           PROCEDURE     这是实现延迟时间的存储过程,可以指定睡眠时间间隔

    本文章主要讲解SLEEPPROCEDURE

    DBMS_LOCK.SLEEP()存储过程:

    作用:使用这个存储过程可以中止会话一段时间

    语法:DBMS_LOCK.SLEEP(seconds IN NUMBER);单位为“秒”,最小的增量可以百分之一秒

    例如:DBMS_LOCK.SLEEP(1.95);是一个合法的值

    Example

    (1)由于是一个存储过程可以直接使用

    SQL> executedbms_lock.sleep(60);

    PL/SQL procedure successfullycompleted

    SQL> select * frompb_tradeinfo where rownum<=3;

    IID       TRADEID       NAME          CERTTYPE

    ------------------------------------------ ----------------------------------

    382       548          一次性还款          0

    415       563          测试一次性贷款      2

    423       569          测试                1

    (2)PL/SQL块实现延迟60

    SQL> begin

     2 dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));

     3 dbms_lock.sleep(60);

     4 dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));

     5  end;

     6  /

    2014-03-1020:41:56

    2014-03-1020:42:56

    PL/SQL procedure successfullycompleted

    (3)打印间隔5秒时间列表

    创建测试表

    SQL> create tableleonarding (iid number,appendtime date);

    Table created

    开始测试

    SQL> begin

     2      for i in 1..10

     3      loop

     4          insert into leonarding values(i,sysdate);

     5          commit;

     6          dbms_lock.sleep(5);

     7       end loop;

     8  end;

     9  /

    PL/SQL procedure successfullycompleted

    打印列表

    SQL> select * fromleonarding;

          IID APPENDTIME

    ------------------------------------------------------------

            1 2014-3-10 20:51:20

            2 2014-3-10 20:51:25

            3 2014-3-10 20:51:30

            4 2014-3-10 20:51:35

            5 2014-3-10 20:51:40

            6 2014-3-10 20:51:45

            7 2014-3-10 20:51:50

            8 2014-3-10 20:51:55

            9 2014-3-10 20:52:00

           10 2014-3-10 20:52:05

    10 rows selected

    小结:dbms_lock.sleep()过程我们在使用的时候请注意第一是权限要授予,第二是使用的场景,第三注意单位。

    dbms  sleep   延迟   package   leonarding

  • 相关阅读:
    js正则表达式 验证手机号,email地址和邮政编码
    XP系统中IIS访问无法显示网页,目前访问网站的用户过多。终极解决办法
    读《现代前端技术解析》有感
    开源一套基于vue全家桶的webapp
    canvas图像处理汇总
    chrome调试工具高级不完整使用指南(实战二)
    chrome调试工具高级不完整使用指南(实战一)
    chrome调试工具高级不完整使用指南(优化篇)
    chrome调试工具高级不完整使用指南(基础篇)
    前端项目怎样合理使用模块化和闭包?
  • 原文地址:https://www.cnblogs.com/karmapeng/p/4422403.html
Copyright © 2011-2022 走看看