ORA-01591 锁定已被有问题的分配事务处理--解决方法(转)
转载自love wife & love life —Roger 的Oracle技术博客
本文链接地址: ORA-01591: lock held by in-doubt distributed transaction
昨天某客户遇到一个问题是关于两阶段分布式事务的,大概是内容是
一个定时job执行失败,然后报如下错误:
Sun Oct 9 02:38:12 2011 |
这里我们首先需要关注是 ORA-01591 错误,
Error: ORA 1591 |
如上是mos关于该错误的一个描述,当然,引起该错误的原因可能有很多很多。
关于分布式事务,其实可以这样理解,就是一个完整的事务,其中包含的多个操作分布在
两个以上的数据库中,只有这些操作都全部完成了,该事务才算完成,不然该事务都将失败。 换句话说,如果该事务失败了,其中涉及到操作表A,那么当其他session访问到表A时将出现
ORA-01591错误。 至于具体说为什么分布式事务会失败,那么就要具体分析了,可能是程序本身的问题或者网络
问题等等。 我们回到我客户的问题上来,既然是分布事务,那么我们就查询dba_2pc_pending视图:
查询结果如下;
LOCAL_TRAN_ID STATE FAIL_TIME OS_USER DB_USER |
从上可以看到,目前该库有3个失败的分布事务,其中 19.3.5343485 是我们需要处理的。 关于字段LOCAL_TRAN_ID的解释,大家可以去查看dba_2pc_pending的说明,这里只简单的
描述一下; LOCAL_TRAN_ID 格式为:xidusn + xidslot + xidsqn 下面继续查询当前系统回滚段中是否还有如上几个失败的分布式事务信息:
SQL> SELECT KTUXEUSN, |
我们可以发现,仍然存在,这处理就简单了,处理之前我还需要说明一下的是: 根据分布事务的状态(state)不同,我们需要采取不同的方法进行处理,稍后进行一个
简单的总结,这里我继续描述如何处理该问题。 通过如下两个小步骤进行处理: rollback force '19.3.5343485';
execute dbms_transaction.purge_lost_db_entry('19.3.5343485'); 然后再次执行该job,正常。 当然这仅仅是一个处理的办法,我们最终的目的是想知道为什么该分布事务会执行失败呢? 先来查询该job的基本信息:
SQL> SELECT job,SCHEMA_USER,LAST_DATE,NEXT_DATE,BROKEN,FAILURES,INSTANCE |
该job (job number为84) 已经执行失败12次了,INTERVAL是该job的执行间隔。对于dba_jobs中的 FAILURES字段,
该字段最大值为16,每次执行失败后该值递增,但是一旦执行成功后将被清0. 从报错信息来看,该job执行失败问题出在PKG_SODB_MAINTAIN的1064行,通过dbms_metadata获取定义后,发现
如下信息: 该过程执行到如下步骤时失败:
1 |
PROCEDURE refine_msg (p_date IN DATE) |
其中: Proc_Expired_Msg_Log 和 Proc_Expired_Msg_Tbm 为存储过程;
Get_Expired_Msg_Days 和 Get_Expired_Tbm_Days 为过程PKG_SODB中的2个函数; 这样来看似乎问题就出在这里,我怀疑可能是业务逻辑什么的可能有问题,比如
该 Proc_Expired_Msg_Log(p_date - PKG_SODB.Get_Expired_Msg_Days) 有可能计算出来
是负数吗?或者说执行到该步时,后面的rolllback操作时,其他前面的事务是否还存在关联? 不是开发出身,分析起来有些麻烦,主要是这几个包里面包含了太多的存储过程和函数,
看起来就头晕,最好建议客户找开发商看看这几个包。 补充:关于分布式事务处理的简单总结
++++++ 常规处理步骤 ++++++ |
ORA-01591 锁定已被有问题的分配事务处理--解决方法(转)的更多相关文章
- AppStore下载失败使用已购页面再试一次解决方法
AppStore载失败 使用已购页面再试一次解决方法 工具/原料 Mac OS 方法/步骤 1.大家可以先试试更改系统 DNS 的方法,由于苹果的 App Store 应用商店在国外,所以 DNS 如 ...
- mac os 错误提示:下载失败 使用已购页面再试一次 解决方法
最近由于买了macbook,开始用mac os系统,发现一个奇怪的现象,在app store里下载应用,老是提示:下载失败 使用已购页面再试一次 原来一直不知道怎么解决这个问题,今天研究了下,发现解决 ...
- SAP无输入历史记录(已在本地数据开启历史记录)解决方法
SAP客户端已开启本地数据的历史记录,但是仍然没有录入记录,重装SAP无法解决问题,没有最近输入记录操作极为不方便,经研究表现出的问题特征如下:1.同一用户在另一台电脑使用SAP就有历史记录,到了本电 ...
- VS提示无法连接到已配置的开发web服务器的解决方法
VS2013每次启动项目调试好好的,今天出现了提示“提示无法连接到已配置的开发web服务器“,使用环境是本地IISExpress,操作系统为windows10,之前也出现过就是重启电脑又好了,这次是刚 ...
- ubuntu中出现:程序 'java' 已包含在下列软件包中的解决方法
已经安装sun java 在终端中输入java,出现以下提示: 程序 'java' 已包含在下列软件包中: * default-jre * gcj-4.8-jre-headless * gcj-4.9 ...
- 显示器驱动程序 NVIDIA Windows Kernel Mode Driver Version 已停止响应 并且己成功恢复 解决方法
原文:http://news.160.com/?p=1890 在玩游戏中 经常 出现显示器驱动程序 NVIDIA Windows Kernel Mode Driver Version 已停止响应 并且 ...
- SqlServer2008 无法修改表,超时时间已到 在操作完成之前超时解决方法
在 SQL Server Management Studio 里, 通过菜单“工具-选项”打开选项对话框. 在左侧寻找“设计器-表设计器和数据库设计器”, 然后在右侧勾选“为表设计器更新重写连接字符串 ...
- 本地连接出现"已启用检测该状态的服务"解决方法、方案
1.运行 输出dcomcnfg 2.组件服务-计算机-我的电脑-DCOM配置-netprofm 3.右键属性-安全-启动和激活权限-自定义 4.编辑-添加-输入对象名称来选择-输入“LOCAL SER ...
- 【转】"超时时间已到。在操作完成之前超时时间已过或服务器未响应"的解决方法
方法有以下三种: 1.原因应该在数据访问有问题,可以把连接时间设置长些,在数据库连接字符串,加上Connect Timeout=18000,单位毫秒 2,在web.config中加上以下语句: < ...
随机推荐
- VS之解决方案文件夹
Visual Studio提供了一种特殊的文件夹,它可以帮助组织大型解决方案.它们的名称也恰如其分,叫做“解决方案文件夹”. 注意 解决方案文件夹是解决方案资源管理器中的一种组织工具,创建这样的文 ...
- Linux 静态库与动态库
静态库(.a) 一个deal.c usedeal.c 重点 1. gcc -c deal.c 生成 deal.o 2. ar -rsv libdeal.a deal.o 生成 libdeal.a ...
- iOS中UITableView和UICollectionView的默认空态页
项目中想实现空态页风格统一控制的效果,就封装了一个默认空态页,使用的技术点有:1 方法替换 ,2 给分类(Category)添加属性. 我们知道,扩展(extension)可以给类添加私有变量和方法. ...
- HDU 2049 不容易系列之(4)——考新郎 (错排+组合)
题目链接. Problem Description 国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体 ...
- Dream_Spark定制第二课
Spark版本定制第2天:通过案例对SparkStreaming透彻理解之二 本期内容: 1 解密Spark Streaming运行机制 2 解密Spark Streaming架构 一切不能进行实时流 ...
- 【ARTS】01_06_左耳听风-20181217~1223
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- shell函数中eof报错(warning: here-document at line 9 delimited by end-of-file (wanted `EOF'))
在shell编写函数时,函数中有eof和EOF,如果是在sublime编写按照格式tab缩进会有以下报错 解决办法: 取消函数中的tab缩进,在运行即可
- python tqdm函数
tqdm是个显示进度条的库.很是方便,还有个tqdm_gui貌似可以显示GUI图像.以后有空再研究. 贴张别人的图,看一下就清楚了.
- Nuxt学习笔记
参考地址:https://zh.nuxtjs.org/guide/installation 官网 http://jspang.com/2018/02/26/nuxt/ 1.目录结构 2.Nuxt常用 ...
- Java IO流杂谈
创建文件和删除文件(File类) import java.io.File; import java.io.IOException; public class T2 { public static vo ...