4.锁——避免重复启动同一程序

/*************************************************
四、主题: 锁——避免重复启动同一程序

锁 捕捉唯一性

*************************************************/

=============================================================================
 CREATE TABLE TEST5
 (
  ID    NUMBER(5),
  NAME  VARCHAR(10),
  UIID   NUMBER(5)
 );
 
 INSERT INTO TEST5 VALUES(1,‘A‘,NULL);
 INSERT INTO TEST5 VALUES(2,‘B‘,NULL);
 INSERT INTO TEST5 VALUES(3,‘C‘,NULL);
 INSERT INTO TEST5 VALUES(4,‘Aa‘,1);
 INSERT INTO TEST5 VALUES(5,‘Ab‘,1);   
 
=============================================================================

4.1.判断是否是否加上了锁
 --SESSION_1
 UPDATE TEST5
    SET NAME = NAME;
   
 不提交,然后新打开一个窗口,执行下面语句:
 --SESSION_2
 SELECT * FROM TEST5; --能正常获取数据
 SELECT * FROM TEST5 FOR UPDATE NOWAIT; --资源站正忙,无法获取数据,说明SESSION_1 已经加上了锁。
 
 --若SESSION_1 提交了,则 SESSION_2 就能得到数据
 
4.2.在得知被锁后,退出不执行后续语句
  SESSION_1 不提交修改。
  --SESSION_2
  -----------------------------------------------
    DECLARE
     E_FAILED_TO_LOCK EXCEPTION;
     V_ID NUMBER;
     PRAGMA EXCEPTION_INIT (E_FAILED_TO_LOCK,-54);
    BEGIN
     SELECT ID INTO V_ID FROM TEST5 WHERE ID=1 FOR UPDATE NOWAIT;
    EXCEPTION
    WHEN E_FAILED_TO_LOCK THEN
         RAISE_APPLICATION_ERROR(-20004,‘IT‘S LOCKED!‘);
    null; 
    END;
    /

-----------------------------------------------
    --提示:IT‘S LOCKED!
    若想执行正确,可以先提交SESSION_1.
   
4.3. 与上面一样,利用主键,防止重复记录。
     若是INSERT INTO 时,主键冲突,则EXCEPTION 执行NULL,忽略异常继续前进。
     --此处,一般用MERGE INTO 来解决最好。
  
4.4.获取机器IP\终端号\SID等
    SELECT USERENV(‘SESSIONID‘) FROM DUAL;
    SELECT USERENV(‘TERMINAL‘)  FROM DUAL;
    SELECT SYS_CONTEXT(‘USERENV‘,‘IP_ADDRESS‘) FROM DUAL;
    SELECT SYS_CONTEXT(‘USERENV‘,‘CURRENT_USER‘) FROM DUAL;
    SELECT SID FROM V$MYSTAT WHERE ROWNUM=1;
   
4.5.构造检查机制,防止失败执行报错,给出提示。

4.锁——避免重复启动同一程序

时间: 2024-12-27 00:35:08

4.锁——避免重复启动同一程序的相关文章

Winfrom 程序不能重复启动

using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Threading.Tasks; using System.Windows.Forms; namespace Demo { static class Program { /// <summary> /// 用于判

C# 避免程序重复启动

using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.Threading; namespace WindowsFormsApplication1 { static class Program { /// <summary> /// The main entry point for the application. /// </s

共享一个防止脚本重复启动的shell脚本

项目的一个需求:为防止脚本重复调度,导致同时运行时相互冲突,需要在脚本运行开始前创建一个文件,结束时删除. 脚本启动时判断一下文件是否存在,如果存在则退出. 最开始这样做没发现问题,但跑一段时间后,发现如果进程中间退出没删除文件就会出现问题. 而且有时希望等待一段时间后不管有没有已启动同名脚本,都往下走. 基于以上考虑,最近将这个防止重复启动的逻辑抽离出来成为独立脚本,并增加了一些控制逻辑,这样以后需要类似功能直接调用这个脚本就好. 流程图: 代码: #! /bin/sh # singleton

C# 禁止同一个客户端重复启动,但允许不同客户端的同一进程启动

安装一个客户端时,多次启动禁止,但安装该客户端两个以上时,允许同时运行,且每个只允许运行一次. 首先判断进程运行次数,进程无运行时,运行打开,进程运行个数大于1时,读取每个进程路径,判断路径是否重复,有重复则不允许启动,无重复,则运行启动. #region 判断系统是否已启动 string str = ""; str = System.Diagnostics.Process.GetCurrentProcess().ProcessName; System.Diagnostics.Proc

杂谈——Android从启动到程序运行发生的事情

转载请注明出处 博客地址:http://blog.csdn.net/JonsTank2013/article/details/51118563 作者:李中权 前言 好久没有写博客了,瞬间感觉好多学了的东西不进行一个自我的总结与消化总归变不成自己的.通过博客可能还可以找到一些当初在学习的时候没有想到的问题.想了半天,从大二上学期自学Android以来还没有对Android从启动到程序运行期间进行一个完整的归纳,刚好最近又学到了一些新东西,那就以这篇博客为媒介,总结一下从Android启动到程序运行

安装apache服务出错,无法启动此程序,因为计算机中丢失VCRUNTIME140.dll 尝试重新安装此程序以解决此问题

错误信息:无法启动此程序,因为计算机中丢失VCRUNTIME140.dll 尝试重新安装此程序以解决此问题 错误场景:在使用["D:\Program Files\httpd-2.4.20-x64-vc14-r2\Apache24\bin\httpd.exe" -k install -n apache]命令,在DOS命令行窗口下安装 apache服务时报错. 错误分析: 解决办法:下载vc++2015 并安装 链接如下:https://www.microsoft.com/zh-cn/do

解决Pyqt打包后运行报错:应用程序无法启动 因为程序的并行配置不正确

做了一个生成二维码的小程序:http://www.cnblogs.com/dcb3688/p/4241048.html 直接运行脚本没问题,用pyinstaller打包后再运行就直接报错了: 应用程序无法启动 因为程序的并行配置不正确.有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.exe 工具. 网上找的解决方法: 1.   安装Microsoft Visual C++ 2008 Redistributable 2.  开始 - 运行(输入services.msc)- 确

Ubuntu图形界面环境下启动应该程序:

1.先说下Ubuntu14.04系统开机紫框的问题: Grub theme:黑色屏幕出现紫色边框 There's a minor typo on the grub theme which produces a black screen with purple border before the grub menu is drawn and on Plymouth start. AIUI, there's a `!` (negation) missing before the background

xvfb启动PyQt4程序报Unable to load library icui18n错误

xvfb启动PyQt4程序报如下错误: Unable to load library icui18n "Cannot load library icui18n: (libicui18n.so.48: cannot open shared object file: No such file or directory)" 解决方法: sudo apt-get install libicu48 参考:https://forums.virtualbox.org/viewtopic.php?f=