zoukankan      html  css  js  c++  java
  • 关于数据库更新的总结(LUW的小结…


    总结
    LUW有两种实现方式:DB LUW;SAP LUW。
    DB LUW:上一个COMMIT WORK或者ROLLBACK处或者是程序开头处都有可能是当前DB LUW的开始,凡是能使进程发生中断的语句都能触发DB LUW的结束。
    SAP LUW:将多个DB LUW捆绑在一起,在遇到COMMIT WORK(AND WAIT)或者是ROLLBACK WORK时执行DML语句。若无此标识,则SAP LUW不会随着程序的结束或者进程的中断而隐式的提交或者回滚
    LUW其实现机制为将数据存储在更新表里,若发生提交操作,则会按照更新表里的INDEX值对数据依次进行操作。
    显示的提交或者回滚操作优先级高于隐式的提交或者回滚操作。

    最后还有个问题:
    如果调用bapi后又有更新自荐表操作;
    bapi里默认是in update task模式更新的
    会令起一个更新进程
    虽然调用bapi后可以根据return判断成功与否
    但是存在一种极端风险
    就是return虽然返回成功,但是更新进程真正执行的时候出错了
    这个时候就会导致数据错误

    如果想预防这种极端情况,两种方案:
    1>更新自荐表的时候也用in update task :
    (比如也用Function更新,建议用Function模式更新,不建议用form更新,然后加 on conmmit )
    2>在调用bapi前,加一句 set update task local 
     然后更新完成自建表更新后,commit work,如果失败回滚
    set update task local :具体可以看F1
    作用是把当前的处理放在一个进程内
    即bapi内的in update task 不再新起进程

    在一个很小的范围内加这句话,commit后就失效了

    http://blog.sina.com.cn/sapliumeng
  • 相关阅读:
    UDP案例_在线咨询
    MFC对话框水平和垂直滚动条功能
    对话框中滚动条
    ON_COMMAND_RANGE 多个按钮响应一个函数
    char**赋值
    MFC如何使dialog对话框置顶
    如何让CListBox控件滚动条自动向下滚动?
    不带,以及带参数,带返回值的Lambda表达式
    JAVA学习_多线程技术
    最烦有些技术帖上来就放代码
  • 原文地址:https://www.cnblogs.com/senlinmu110/p/3802100.html
Copyright © 2011-2022 走看看