SAP ABAP openSQL数据库操作(一)
SAP ABAP openSQL数据库操作(二)
SAP ABAP openSQL数据库操作(三)

文章目录

  • 5.数据的一致性
    • 1.SAP LUW | DB LUW
    • 2.SAP数据锁定

5.数据的一致性

数据库的一致性和安全性的控制过程比较复杂.
多和客户服务器层次结构相关,abap中需了解LUM和锁定概念,从而对一致性和安全性有所了解.

1.SAP LUW | DB LUW

比如我们常见的用户订单 商品库存 等是必须保持数据的一致性和安全性的,要不然很容易造成数据错误,造成严重的后果.
1.LUW概念
SAP系统采用luw概念及相关处理机制来保持应用数据在多个相关联数据表中数据的一致性.
两个数据一致状态中的时间间隔被称为luw.
每一个luw都需要以一个提交(commit)或者返回(rollback)作为标志,如果以提交做结束则进行所有的更新操作,而返回测试取消所有的数据操作.
要么全成功要么全失败.
2.数据库LUW
数据库luw是底层数据库自身所提供的把持数据一致性机制,与SAP系统无关.
在一个数据库luw之间,数据全部更新或者取消都是有数据库系统自动控制的.
对于abap程序来说,主要的问题在与如何确定数据库luw的触发时机,即何时数据库本身对所有数据进行提交或者返回操作.
尽管abap中有相关语句显示操作,然而SAP basis系统的应用程序运行过程中含有很多隐式的触发,如错误消息等.

一个工作 过程总是在下述情况下结束一个数据库luw并隐式地定性数据库提交:

 1. 当一个对话步骤结束,即显示一个新屏幕给用户时;2. 在另一个工作过程继续程序的执行,这种情况一般出现在rfc的调用或者是返回过程中

数据库隐含地进行返回操作:

 1. 当abap程序出现运行时错误2. 一个abap程序应为类型a或x的消息导致终止


3.SAP LUW
SAP系统中,数据库luw是不能确保数据的一致性的,因为每一个对话框步骤都会是一个数据库luw结束.
因为每一个用户行为都会触达一个pai事件而开始新的对话框和新的数据库luw,但在应用程序中,很可能出现的情况是用户通过多个行为才结束对所有数据库表的更新操作,直到用户点击保存按钮.
SAP luw 和数据库luw类似,SAPluw是abap应用程序的luw.
一个SAP luw 可以包含多个对话步骤,即多个数据库luw; 但一个openSQL语句不能分割几个对话步骤.也就是说,SAP luw 将多个数据库luw进行捆绑,并保持初始状态,不进行数据的修改,当SAP luw最后一个数据库luw结束时,再进行整体修改,或者取消.从而来保持数据的一致性.
总有一种感觉在数据一致性处理过程的方式有点类似于MQ
SAP luw 提供两种具体数据仓库luw捆绑机制,分别通过功能模块和子程序进行.
可以将功能模块在function bulider中定义为update module,对于这种更新模块,可以:

*函数调用实现
CALL FUNCTION ... IN UPDATE TASK.
*子程序实现
PERFORM ..ON COMMIT.

使用这个模块时,他会把所有的更新操作放置在一个应用服务器中的一个特殊的更新工作过程中,因此可以把不同的更新模块捆绑在一起,当SAP luw结束时 确保同时成功或失败.
SAP luw可以显示通过commit语句提交:

COMMIT WORK.


SAP luw 回滚

ROLLBACK WORK.

2.SAP数据锁定

因为SAP是多任务系统,在保持数据一致性机制中,除了luw外还需要数据锁定控制.
1.SAP 锁定
SAP luw 要求数据库对象的锁定在SAP luw结束后就释放,并让多有的SAP程序可见.
为了实现该目的,SAP basis系统提供一个逻辑数据锁定机制,该机制基于系统特定的所服务应用服务器中的中心锁定表.
SAP锁定,需要在se11中进行创建一个锁对象.


REPORT z_enqueue_dequeue.DATA: wa_sflight LIKE  sflight.wa_sflight-carrid = 'CA'.
*1.锁定
CALL FUNCTION 'ENQUEUE_EDEMOFLHT'EXPORTINGmode_sflight   = 'X'
*   MODE_SBOOK     = 'E'
*   MANDT          = SY-MANDTcarrid         = wa_sflight-carridconnid         = wa_sflight-connidfldate         = wa_sflight-fldate
*   BOOKID         =
*   X_CARRID       = ' '
*   X_CONNID       = ' '
*   X_FLDATE       = ' '
*   X_BOOKID       = ' '
*   _SCOPE         = '2'
*   _WAIT          = ' '
*   _COLLECT       = ' 'EXCEPTIONSforeign_lock   = 1system_failure = 2OTHERS         = 3.
IF sy-subrc <> 0.
* Implement suitable error handling hereMESSAGE id sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2.
ENDIF.
*2.数据更新
UPDATE sflight SET carrid = wa_sflight-carrid.
*3.解除锁定
CALL FUNCTION 'ENQUEUE_EDEMOFLHT'.

该程序中如果没有解除锁定,则知道程序结束,其他程序员才能对该表进行相同的操作.

SAP ABAP openSQL数据库操作(四)相关推荐

  1. 如何通过 SAP ABAP OData $expand 操作在同一个 HTTP 请求中返回多个节点的数据试读版

    正如本教程的开篇介绍文章SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)所提到的,SAP OData 服务开发,从实现技术上来说,可以分为三大类.因此本教程也分为 ...

  2. 17. 如何通过 SAP ABAP OData $expand 操作在同一个 HTTP 请求中返回多个节点的数据

    本教程前一篇文章,我们已经完成了为了支持 OData 协议定义的 $expand 操作,而必须进行的 OData 模型层面的增强: 16. 如何修改 SAP ABAP OData 模型,使其支持 $e ...

  3. SAP ABAP逻辑数据库

    从数据库中取数据有三种方式:OPEN SQL NATIVE SQL和LOGICAL DATABASE,LOGICAL DATABASE相对于前两种方式,有下列优势: l         它是按照pri ...

  4. SAP ABAP里数据库表的Storage Parameters从哪里来的

    如何查看ABAP数据库表的storage parameter? 事务码SE11,utilities->Database Object->Database Utility: 点这个Stora ...

  5. mysql在cmd命令下执行数据库操作

    2019独角兽企业重金招聘Python工程师标准>>> windows+r 运行cmd命令,执行以下操作! 当mysql 数据库文件相对于来说比较大的时候,这个时候你可能在正常环境下 ...

  6. SAP abap内表分类与增删改查操作

    SAP abap内表分类与增删改查操作 1.内表的分类 1.1.标准表 (standard table ) 系统为该表每一行生成一个院级索引.填表是可以将数据附加在现有行之后,也可以插入到指定的位置, ...

  7. python数据库self函数_Python常用功能函数系列总结(四)之数据库操作

    本节目录 常用函数一:redis操作 常用函数二:mongodb操作 常用函数三:数据库连接池操作 常用函数四:pandas连接数据库 常用函数五:异步连接数据库 常用函数一:redis操作 # -* ...

  8. SAP ABAP bcset激活时,关联的数据库表条目是如何插入的

    本文介绍SAP ABAP bcset激活时,关联的数据库表条目是如何插入的. 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  9. 艾伟:基于.NET平台的Windows编程实战(四)—— 数据库操作类的编写

    本系列文章导航 基于.NET平台的Windows编程实战(一)--前言 基于.NET平台的Windows编程实战(二)-- 需求分析与数据库设计 基于.NET平台的Windows编程实战(四)-- 数 ...

最新文章

  1. Git合并和变基简介:它们是什么,以及如何使用它们
  2. scrapy proxy and user_agent
  3. MFC六大核心机制之三:动态创建
  4. Leetcode--342. 4的幂
  5. centos7配置python3_Centos7安装并配置Python3环境
  6. keypairgenerator生成的公钥是不变的么_bitcoin 地址是如何生成的
  7. Cloudera Hadoop 4 实战课程(Hadoop 2.0、集群界面化管理、电商在线查询+日志离线分析)...
  8. 聊聊spring security oauth2的password方式的认证
  9. Microsoft SQL Server 2005安装
  10. C# 开发Chrome内核浏览器(WebKit.net)
  11. 嵌入式C语言入门操作
  12. Python 代码库之Tuple如何append添加元素
  13. 如何优雅的进行W10远程控制
  14. 数据揭秘:中国姓氏排行榜
  15. CodeForces - 1040B Shashlik Cooking(水题)
  16. 360浏览器小号多开使用
  17. C#WinForm实现雷速网站比赛MQTT逆向采集
  18. python爬取微信好友头像_python 使用wxpy实现获取微信好友列表 头像 群成员
  19. cpm、cpc、cps和cpa分别是什么意思
  20. SOUI自定义控件(1)

热门文章

  1. 【微信公众号开发】四、公众号按钮设置及自己的微信按钮编辑器
  2. 英魂之刃后台用Java,《英魂之刃》系统操作说明
  3. Redis在项目中的应用(点评)
  4. series转换成dataframe
  5. excel排序求和:如何统计前几名数据合计 下篇
  6. 重磅 | Hinton、LeCun、Bengio联合署名深度学习综述,《Nature》纪念人工智能60周年专题...
  7. SEO新手入门系列2022(五):挖掘关键词
  8. 从前后端分离到前后端整合的“退步”(一)项目结构
  9. word文件太大怎么压缩到最小-word压缩教程
  10. 清华AI圈 | 李骏:驰骋在智能汽车科技创新的广阔征途中