SAP 锁机制及创建与使用介绍

news2024/12/25 1:56:37

一、SAP为什么要设置锁:

   1,保持数据的一致性

     如果几个用户要访问同样的资源,需要找到一种同步访问的方法去保持数据的一致性。比如说,在航班预订系统中,需要检查还有没有空座位,当检查的时候,你不想别人修改重要的数据(空座位的数量)。

   2,仅仅用Database锁是不够的

     数据库管理系统物理锁定了要修改的行记录,其他用户要等到数据库锁释放才能访问这个记录。

     在SAP系统中,当一个新屏幕显示的时候会释放掉Database锁,因为屏幕的改变会触发一个隐式的DB COMMIT。如果数据是从好几个屏幕收集来的话,而且在这段时间内这些数据会分别被锁定,仅仅用Database锁就不够了。

     SAP系统在应用服务器层面有一个全局的LOCK TABLE,可以用来设置逻辑锁来锁定相关的表条目,并有ENQUEUE工作进程来管理这些锁。SAP锁是一种逻辑意义上的锁,有可能你锁定的表条目在DATABASE上根本就不存在。

二、锁对象和其对应的FM

    在SE11里创建锁对象,自定义的锁对象都必须以EZ或者EY开头来命名。一个锁对象里只包含一个PRIMARY TABLE,可以包含若干个SECONDARY TABLE,锁的模式有三种:E,S,X。LOCK PARAMETERS里填写你要根据哪些字段来锁定表条目。

    模式E:当更改数据的时候设置为此模式。

    模式S:本身不需要更改数据,但是希望显示的数据不被别人更改。

    模式X:和E类似,但是不允许累加,完全独占。

    如果你在一个程序里成功对一个锁对象加锁之后,如果模式为E,其他用户不能再对这个锁对象加E、X、S模式的任意一种锁;

    如果你在一个程序里成功对一个锁对象加锁之后,如果模式为X,其他用户不能再对这个锁对象加E、X、S模式的任意一种锁;

    如果你在一个程序里成功对一个锁对象加锁之后,如果模式为S,其他用户不能再对这个锁对象加E、X模式的锁,但是可以加S模式的锁;

    如果你在一个程序里成功对一个锁对象加锁之后,如果模式为E,在这个程序,你还可以再对这个锁对象加E、S模式的锁,X模式的不可以。

    如果你在一个程序里成功对一个锁对象加锁之后,如果模式为X,在这个程序,你不可以再对这个锁对象加E、X、S模式的锁。

    如果你在一个程序里成功对一个锁对象加锁之后,如果模式为S,在这个程序,你还可以再对这个锁对象加S模式的锁,如果没有别的用户对其加S模式的锁,那么你还可以对其加E模式的锁。X模式的不可以。

    当激活锁对象的时候,系统会自动创建两个FM,ENQUEUE_和DEQUEUE_,分别用来锁定和解锁。

三、锁定和解锁

    当用逻辑锁来锁定表条目的时候,系统会自动向LOCK TABLE中写入记录。

    当调用设置锁的FM时,LOCK PARAMETERS如果没有指明,系统会锁定整个表。当然,LOCK PARAMETER:CLIENT有点特殊,如果不指定,默认是SY-MANDT;如果指定相应的CLIENT,会锁定对应CLIENT上的相应的表记录;如果设置为SPACE,则锁定涉及所有的CLIENT。

    当逻辑锁设置失败后,一般会有两种例外。一个是EXCEPTION:FOREIGN_LOCK,意思是已经被锁定了;另一个是EXCEPTION:SYSTEM_FAILURE。

    有些情况下,程序中设置成功的逻辑锁会隐式的自己解锁。比如说程序结束发生的时候(MESSAGE TYPE为A或者X的时候),使用语句LEAVE PROGRAM,LEAVE TO TRANSACTION,或者在命令行输入/n回车以后。

    在程序的结束可以用DEQUEUE FUNCTION MODULE来解锁(当然如果你不写这个,程序结束的时候也会自动的解锁),这个时候,系统会自动从LOCK TABLE把相应的记录删除。使用DEQUEUE FUNCTION MODULE来解锁的时候,不会产生EXCEPTION。要解开你在程序中创建的所有的逻辑锁,可以用FM:DEQUEUE_ALL.

四、上锁的一般步骤

    先上锁,上锁成功之后,从数据库取数据,然后更改数据,接着更新到数据库,最后解锁。按照这个步骤,才能保证更改完全运行在锁的保护机制下。

五、程序里的加锁与解锁

创建锁:

1、加锁:

      CALL FUNCTION 'ENQUEUE_EZSD_CSTM_015'
        EXPORTING
          mode_zsdt0015  = 'E'
          mandt          = sy-mandt
          zkan           = ls_main_data-zkan
          zxdpc          = ls_main_data-zxdpc
        EXCEPTIONS
          foreign_lock   = 1
          system_failure = 2
          OTHERS         = 3.
      IF sy-subrc = 0.
        lv_lock_flag = 'X'.
      ELSE.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          INTO lv_lock_mesg WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.

2、解锁:

      CALL FUNCTION 'DEQUEUE_EZSD_CSTM_015'
        EXPORTING
          mode_zsdt0015 = 'E'
          mandt         = sy-mandt
          zkan          = ls_main_data-zkan
          zxdpc         = ls_main_data-zxdpc.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1241642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

欧拉操作系统下离线安装字体的操作步骤

背景 某 Web 应用部署到欧拉操作系统后,应用中导出的 PDF 文件中文全部显示乱码,原因是字体缺失,但是目标系统上并没有联网,必须找到字体的离线安装包。 CSDN 上还有40个积分,下载了两个相关的资源后,目标…

千兆光模块和万兆光模块的供应链管理

随着网络通信技术的不断发展,千兆光模块和万兆光模块已逐渐成为现代网络建设中不可缺少的组成部分。它们在云计算、数据中心、大规模机房以及企业内部网络等领域广泛应用,已经成为大家熟知的产品。 千兆光模块和万兆光模块的工作原理基本相同&#xff…

【AI】行业消息精选和分析(11月23日)

今日动态 1、Sam Altman 重掌 CEO,OpenAI 权力斗争正式「落幕」 2、重磅好消息:语音 ChatGPT 现已向全用户开放 3、NVIDIA 与基因泰克合作,利用生成式 AI 加速药物发现 4、 英伟达Q3营收同比增长206%至181亿美元 黄仁勋:生成式AI时…

【第一部分:概述】ARM Realm Management Monitor specification

目录 概述机密计算系统软件组成MonitorRealmRealm Management Monitor (RMM)Virtual Machine (VM)HypervisorSecure Partition Manager (SPM)Trusted OS (TOS)Trusted Application (TA) Realm Management Monitor 参考文献 概述 RMM是一个软件组件,它构成了实现ARM…

一站式解决Mac音视频转换需求——Xilisoft Video Converter Ultimate for Mac

在数字化时代,音视频的应用越来越广泛,不同的设备和平台对音视频格式的要求也不尽相同。因此,如何找到一款功能强大、易于操作的音视频转换软件成为了Mac用户的迫切需求。而Xilisoft Video Converter Ultimate for Mac(曦力音视频…

【本文由AI创作】人工智能七大领域和对我们生活的影响(图文PPT视频,15分钟完成)

深度学习映万象,神经网络隐层藏。 智能机器触手延,辅助生活工作间。 ——本文全部内容由AIGC大模型生成。 一、人工智能的领域 人工智能不只是聊天,画图,数字人。 大模型火了,人们蜂拥的科学上网,去看ChatG…

【JUC】十一、Future接口与其实现类FutureTask的优缺点

文章目录 1、Future接口2、FutureTask结合线程池提升性能3、Future的缺点一:get导致阻塞4、Future的缺点二:轮询耗费CPU5、其余场景 相关文章: 【Callable与FutureTask】 1、Future接口 Future接口,定义了操作异步任务执行的一些…

Ubuntu18 Opencv3.4.12 viz 3D显示安装、编译、使用、移植

Opencv3.*主模块默认包括两个3D库 calib3d用于相机校准和三维重建 ,viz用于三维图像显示,其中viz是cmake选配。 参考: https://docs.opencv.org/3.4.12/index.html 下载linux版本的源码 sources。 查看cmake apt list --installed | grep…

Navicat 技术指引 | GaussDB 数据查看器

Navicat Premium(16.2.8 Windows版或以上) 已支持对GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结构同步、协同合作、数据迁移等),这…

win10底部任务栏无响应?试试这些方法!

win10的任务栏是一个关键的用户界面元素,允许您轻松访问应用程序和系统功能。然而,有时您可能会遇到win10底部任务栏无响应的问题,这会妨碍您的工作流程。本篇文章将介绍解决win 10底部任务栏无响应的问题的三种方法,每种方法都会…

基于Vue+SpringBoot的校园疫情防控管理系统

项目编号: S 037 ,文末获取源码。 \color{red}{项目编号:S037,文末获取源码。} 项目编号:S037,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生2.2 老师2.3 学校管理部门 三、…

nvm切换版本之后npm用不了

原因是 nvm只给你安了对应的node没给你安装对应的node版本的npm 解决办法如下 1找到你安装的node版本号 然后去官网下载对应的版本包 这个网址就是node官网的版本列表 Index of /download/release/ 2下载后解压 把根目录这俩复制到自己的nvm安装目录下 还有那个node_modul…

LED电子屏幕的5种色度处理技术

LED电子大屏幕行业在从单色到双色再到三基色(全彩)的发展过程中,展现了LED显示屏技术的不断创新和终端用户多元化需求的变化。为了提高LED显示屏的色彩还原能力,LED显示屏厂家不断改进色度处理技术。以下是LED电子大屏幕的五种色度…

debian 设置系统默认以命令行方式启动,关闭x windows

debian 设置系统默认以命令行方式启动,关闭x windows 2021-01-02 tech linux 设置 grub启动设置在/etc/default/grub中,打开 default grub 配置: $ sudo vim /etc/default/grub修改以下配置: 更新grub,设置多用户启动: $ sudo update-grub $ sudo systemctl set-…

C/C++ 开发SCM服务管理组件

SCM(Service Control Manager)服务管理器是 Windows 操作系统中的一个关键组件,负责管理系统服务的启动、停止和配置。服务是一种在后台运行的应用程序,可以在系统启动时自动启动,也可以由用户或其他应用程序手动启动。…

oracle的debjob挂載查詢

背景 有一個需求需要定時去執行一個produce,可以使用oracle的dbjob定時執行,相比較之前的vbs更加絲滑 --傳遞produce 開始的時間 頻率 declarea number;beginDBMS_JOB.SUBMIT(a,xx_warehouse_daliy_record_p;,to_date(202311230800,yyyymmddhh24mi),…

应用高斯高通滤波器提取图像轮廓

任务要求: 图为HALCON中的例图“tooth_rim”,请用高斯高通滤波器提取图像的轮廓。 任务分析: 图像的边缘对应频谱的高频部分,可以通过构造一个高频滤波器,过滤掉图像的低频部分,从而得到图像的边缘。HALC…

VSCode 连接远程服务器问题及解决办法

端口号不一样,需要在配置文件中添加Port Host 27.223.26.46HostName 27.223.*.*User userForwardAgent yesPort 14111输入密码后可以连接 在vscode界面,终端,生成公钥&私钥 ssh-keygen可以看到有id_rsa和id_rsa.pub两个文件生成&#…

2023年亚太数学建模C题数据分享+详细思路

在报名截止的前一天,我尝试进行了报名。到那时,已有11,000个队伍注册参赛。在我的了解中,在数模比赛中除了国赛美赛外,几乎没有其他竞赛的参赛队伍数量能与此相媲美。即便不考虑赛题的难度和认可度,亚太地区的这场竞赛…

Vue3实现粒子动态背景

官网: https://particles.js.org/ npm: https://www.npmjs.com/package/particles.vue3 安装 pnpm add particles.vue3 pnpm add tsparticles-slim 注册 main.js import { createApp } from vue import type { App } from vue import globleApp f…