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中加上以下语句: < ...
随机推荐
- 封装JSON数据转自定义HTML方法parseHTML
开发过程中经常使用字符串拼接,这样做工作效率低,可维护性和易读性也比较差,且对于后台程序员对html不熟悉,经常出错. 如下面例子json转字符串: var json = [{ href:'http: ...
- 20155318 2016-2017-2 《Java程序设计》第六周学习总结
20155318 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 学习目标 理解流与IO 理解InputStream/OutPutStream的继承架构 理解 ...
- 洛谷 P1478 陶陶摘苹果(升级版)
本萌新第一次发布题解,若有不严谨处请谅解. 我看了前面几位大佬的手笔,表示自己还是比较钟爱桶排序的.它非常简易直接,还省时间,尤其对于这类题目占用的的空间也很小. 我们看到题目下面的说明:xi< ...
- Spark笔记之DataFrameNaFunctions
DataFrameNaFunctions用来对DataFrame中值为null或NaN的列做处理,处理分为三种类型: drop:根据条件丢弃含有null或NaN的行 fill:根据条件使用指定值填充值 ...
- State Estimation for Robotics (Tim Barfoot) exercises Answers
Here are some exercises answers for State Estimation for Robotics, which I did in June, 2017. The bo ...
- (maven项目)使用java -jar命令遇到的小问题|xx.jar中没有主清单或Error:Invalid or corrupt jarfile xx.jar
xx.jar中没有主清单或Error:Invalid or corrupt jarfile xx.jar 遇到这个问题,是因为你的jar包没有设置主类的入口. 即在META-INF文件夹的MANIFE ...
- linux系统下安装nginx
1.第一步:获取nginx的安装包 wget http://nginx.org/download/nginx-1.7.8.tar.gz 2.解压安装包tar -xvf nginx-1.7.8.tar. ...
- jexus docker
一.准备工作 1.init.sh 文件 #!/bin/bash # Stop your services function stop_svc { /usr/jexus/jws stop >/de ...
- python小记
最近有匹骚猪用微信骚扰我,我很是气愤, 自学一波脚本: 学习目的:用脚本回击回去,通过py写一个脚本,一次性给别人发n条消息: mac上自学python: brew install python3(自 ...
- h5手势密码开发(使用jq)
直接上代码: 目录结构: 本次开用到的技术jq,以及引入的jq插件jquery.gesture.password.min.js index.html <!DOCTYPE html> < ...