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

  • 相关阅读:
    003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程
    002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介
    001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学
    001 Android Studio 首次编译执行项目过程中遇到的几个常见问题
    Dora.Interception,为.NET Core度身打造的AOP框架 [2]:以约定的方式定义拦截器
    Dora.Interception,为.NET Core度身打造的AOP框架 [1]:更加简练的编程体验
    监视EntityFramework中的sql流转你需要知道的三种方式Log,SqlServerProfile, EFProfile
    轻量级ORM框架——第二篇:Dapper中的一些复杂操作和inner join应该注意的坑
    轻量级ORM框架——第一篇:Dapper快速学习
    CF888G Xor-MST(异或生成树模板)
  • 原文地址:https://www.cnblogs.com/karmapeng/p/4422403.html
Copyright © 2011-2022 走看看