pb之CommitOnDisconnect

简介:        今天看到一段代码对transaction object的DBParm赋值CommitOnDisconnect='No',本身这段代码没问题,pb transaction object 执行disconnect 命令断开与数据库连接时,如果不进行上面的赋值,pb会默认提交掉当前未提交的transaction。

       今天看到一段代码对transaction object的DBParm赋值CommitOnDisconnect='No',本身这段代码没问题,pb transaction object 执行disconnect 命令断开与数据库连接时,如果不进行上面的赋值,pb会默认提交掉当前未提交的transaction。

        但是看了这段代码的注释,立马傻眼了,注释是这样写的:

//==============================================================================
// 当一个较长的事务执行了前面几步尚未Commit时发生数据库连接断开(非法操作、断线、死机等)
// 此时会发生已执行的SQL不能回滚,从而导致数据错误(如库存已加但入库单却未打上入库标志)
// 为防止此类错误发生应设置为:数据库连接断开后不自动提交,即CommitOnDisconnect='No'
// Added By XXX 2002.09.10
//==============================================================================

       从这段注释可以看出,作者的意思是,事务里面的sql语句集执行了一部分,出现非法操作、断线、死机等情况时,如果不设置CommitOnDisconnect='No',会出现执行了的sql语句commit,未执行的sql语句rollback的情况。实时真是如此吗?

        我们在pb帮助文档中,可以找到这么一句话:

         Automatic COMMIT when disconnected  When a transaction is disconnected, PowerBuilder issues a COMMIT statement by default.

        翻译过来是说,当transaction disconnected的时候,pb默认执行了commit命令。此处的disconnected 并不是我们广义上说的断开连接,他不包含网络断开,系统崩溃等特殊情况。这里说的disconnected 是执行disconnected命令。

       自己多想想也能明白的,网络都断开了,数据库服务端怎么可能收到pb客户端发送的commit命令,有的人说了,这个是作为连接参数传给数据库的,数据库会知道这个参数,当网络断开时,数据库端自动提交,我只能说这些人想得太天真了,pb几乎可以连接所有关系型数据库,pb有什么能力要求所有关系型数据库厂商按照他们传过来的参数要求,当网络断开时,执行commit或者rollback。

       有的人又要反驳了,说pl/sql执行一句sql命令,不手动commit,退出pl/sql会自动commit,这难道不是数据库服务端判断的?这个还真不是数据库服务端判断的,pl/sql工具菜单->首选项->oracle->连接->注销(有打开的事务),从这里可以看到,这里默认设置了commit。

       所以说当disconnected时,到底要不要commit是客户端决定的,如果需要commit,客户端就需要默认发送一个commit命令。这里说的disconnected是正常的系统断开,并不包含网络断开,系统崩溃的异常情况。

目录
相关文章
|
存储 网络安全
vscode连接远程阿里云服务器
vscode连接远程阿里云服务器
|
3月前
|
监控 Cloud Native Java
Quarkus 云原生Java框架技术详解与实践指南
本文档全面介绍 Quarkus 框架的核心概念、架构特性和实践应用。作为新一代的云原生 Java 框架,Quarkus 旨在为 OpenJDK HotSpot 和 GraalVM 量身定制,显著提升 Java 在容器化环境中的运行效率。本文将深入探讨其响应式编程模型、原生编译能力、扩展机制以及与微服务架构的深度集成,帮助开发者构建高效、轻量的云原生应用。
424 44
|
5月前
|
存储 资源调度 并行计算
# Qwen3-8B 与 Qwen3-14B 的 TTFT 性能对比与底层原理详解
通义千问Qwen3系列是通义实验室2025年推出的最新大模型,包含多种参数版本,其中Qwen3-8B与Qwen3-14B均支持32K token上下文。Qwen3-8B参数量较小,响应更快,适合低延迟交互;Qwen3-14B参数更多,推理更强,适用于复杂任务。两者在TTFT、架构优化、量化技术及部署方案上各有侧重,满足多样应用场景需求。
3065 10
|
3月前
|
数据采集 数据库 索引
新闻网站的数据采集与更新思路
该方案设计了一个跨站点的增量更新引擎,用于高效采集央视新闻、中国新闻网和环球网等多源新闻数据。通过代理IP和内容哈希签名技术,实现新闻的新增与更新检测,大幅降低冗余抓取和带宽消耗。实验表明,该方法在多源新闻采集中具备高效性和实用性,可拓展为行业级舆情雷达系统,支持事件追踪与趋势分析。
195 2
新闻网站的数据采集与更新思路
|
运维 API 对象存储
阿里云OSS上传图片不能打开的解决办法
  最近项目需要把附件部署到阿里云oss,集成过程中发现上传的图片不能直接打开预览,只能下载到本地保存。   解决办法:设置ContentType   var endpoint="阿里云OSS EndPoint";   // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
4261 0
|
7月前
|
JSON 监控 小程序
微信百度字节小程序包过大解决方案(实战经验总结)-优雅草卓伊凡|果果|小无
微信百度字节小程序包过大解决方案(实战经验总结)-优雅草卓伊凡|果果|小无
716 14
微信百度字节小程序包过大解决方案(实战经验总结)-优雅草卓伊凡|果果|小无
|
10月前
|
NoSQL MongoDB 数据库
使用 docker 快速搭建开发环境的 mongodb 服务
本指南介绍如何使用 Docker 和 Docker Compose 部署 MongoDB 和 Mongo Express。首先,通过 Docker 命令分别启动 MongoDB(镜像 `mongo:7.0.14`)和 Mongo Express(镜像 `mongo-express:1.0.2-20-alpine3.19`),并配置环境变量确保两者能正确连接。接着,提供了一个 `docker-compose.yaml` 文件示例,包含 MongoDB 数据卷、健康检查及服务依赖配置,简化多容器管理。
1664 2
|
存储 分布式计算 固态存储
阿里云2核16G、4核32G、8核64G配置云服务器租用收费标准与活动价格参考
2核16G、8核64G、4核32G配置的云服务器处理器与内存比为1:8,这种配比的云服务器一般适用于数据分析与挖掘,Hadoop、Spark集群和数据库,缓存等内存密集型场景,因此,多为企业级用户选择。目前2核16G配置按量收费最低收费标准为0.54元/小时,按月租用标准收费标准为260.44元/1个月。4核32G配置的阿里云服务器按量收费标准最低为1.08元/小时,按月租用标准收费标准为520.88元/1个月。8核64G配置的阿里云服务器按量收费标准最低为2.17元/小时,按月租用标准收费标准为1041.77元/1个月。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。
|
安全 中间件 关系型数据库
如何选择国产化CMS来建设政务网站?
信创国产化网站建站保障信息安全,推动信息技术产业发展。PageAdminCMS支持信创,功能全面,满足新建或升级网站需求,助力单位信创国产化转型。
271 5
|
编解码 Python Windows
python有没有包 可以检测 这个视频是否可以播放
python有没有包 可以检测 这个视频是否可以播放