原帖由 qingyun 于 2010-6-21 15:44 发表 
在写pl/sql的时候,有个很重要的注意点;
比如:
begin
  update  某个sqlserver的表@dblink名字 .....;
  update 某个oracle的表...;
end;

这段pl/sql执行会报错:
错误信息是:
-----------------------------------------------------------------
执行失败:ORA-02054: 事务处理 2.12.27634 有问题
ORA-28500: 连接 ORACLE 到非 Oracle 系统时返回此信息: 
[Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效。
ORA-02063: 紧接着 2 lines (起自 dblink名字)
-----------------------------------------------------------------

然后你执行:
  select * from    某个sqlserver的表@dblink名字 
这个没问题;

再执行:
select * from  某个oracle的表

完了!结果提示:
执行失败:ORA-01591: 锁被有问题的分布式事务处理 2.12.27634 持有

这时候,你查询:
SELECT * FROM DBA_2PC_PENDING 
会发现,被锁的信息;

然后,你用
commit/rollback force '2.12.27634' ;  解锁;

当然这里的2.12.27634 是随机的。每次被锁,都是不同的值;

这个问题如何解决呢? 
begin
  update  某个sqlserver的表@dblink名字 .....; 
  commit; --非常重要;
  update 某个oracle的表...;
end;
这样就OK了,原因我觉得是这样的:oracle内部其实是两块事务,一个是针对sqlserver,一个针对自己的oracle;
所以必须把两端的事务独立下来;

下面这个写法也是OK的:

begin
  update  某个sqlserver的表@dblink名字 .....; 
update  某个sqlserver的表@dblink名字 .....; 
  commit; --非常重要;
  update 某个oracle的表...;
update 某个oracle的表...;
end;

终于把事务问题解决了,这个问题,如鲠在喉;困扰我半年了,如今客户的系统马上要正式使用;

我被迫又摸索了一把,终于搞定了:

解决方法:

1. 修改 initdg4msql.ora文件;

最后两行:
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
修改成

HS_FDS_RECOVERY_ACCOUNT=dbo
HS_FDS_RECOVERY_PWD=sa的密码;

这个是最简单的方法,当然也可以在mssql 建立recover用户,我觉得还是越简单越好;

2. 在sqlserver 数据库上运行:
DROP TABLE HS_TRANSACTION_LOG
go

CREATE TABLE HS_TRANSACTION_LOG(
  GLOBAL_TRAN_ID char (64) NOT NULL,
  TRAN_COMMENT char (255) NULL
)
go

grant all on HS_TRANSACTION_LOG to public
go

这样一切都搞定了;再也不用担心两个数据库间事务切换的问题了;

 
http://www.daizhicun.com

[Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效(转)的更多相关文章

  1. PowerDesigner反向数据库时遇到[Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句。SQLSTATE = 37错误解决方法

    逆向工程中,有时会出现如下错误 ... [Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句 SQLSTATE = 37000 解决方案: 1. ...

  2. Delphi东京版FireDAC连接MSSQL2000提示对象名 'SYS.DATABASES' 无效

    在Delphi 10.2.1 东京 版中,FireDAC默认不兼容MSSQL2000,会提示“[FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driv ...

  3. 对象名 'dbo.__MigrationHistory' 无效 错误解决

    // 在数据库上下文的构造方法里 public GewPeAppContext() : base(ConnectionStrings.GewPeAppConnectionString) { // 添加 ...

  4. SQL数据库对象名无效的解决方法

    对象名 'dbo.xxxx' 无效. 最后找到如下方法解决:原因是必须把所有以前的所有者改为DBO就不会出问题了. 执行下面语句,更改所有表的所有者为DBO exec sp_msforeachtabl ...

  5. 数据库 alert.log 日志中出现 "[Oracle][ODBC SQL Server Wire Protocol driver][SQL Server] 'RECOVER'"报错信息

    现象描述: (1).数据库通过调用透明网络实现分布式事务,但透明网关停用后,失败的分布式事务并未清理. (2).数据库 alert 日志 Thu Sep 06 06:53:00 2018 Errors ...

  6. 连接SQLServer2005失败--[Microsoft][ODBC SQL Server Driver][DBNETLIB]一般性网络错误。请检查网络文档

    连接SQLServer2005失败,错误信息: 错误类型:Microsoft OLE DB Provider for ODBC Drivers (0x80004005)[Microsoft][ODBC ...

  7. [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝

    一般连接sql数据库,IP_connstr="driver={SQL Server}; server=127.0.0.1;database=数据库名字;uid=sa;pwd=密码" ...

  8. firedac odbc sql server driver连接占线导致另一个hstmt

    firedac odbc sql server driver连接占线导致另一个hstmt 原因:FDQuery.FetchOptions.Mode=fmOnDemand.好像是为了性能问题,不设置则默 ...

  9. 使用Oracle Sql Developer将SQL SERVER 2008数据库移植到Oracle 11g

    ORACLE官方提供的Sql Developer自带的Oracle Migration Workbench. 什么是Oracle SQL Developer?在官方页面上,是这样介绍它的: Oracl ...

随机推荐

  1. struts2的标签中得到JSP脚本的变量值

    转自:http://www.cnblogs.com/modou/articles/1299024.html 大家先来看一段代码: <% int i=1; %> <s:property ...

  2. Row_Number() OVER 的用法

    Row_Number() OVER 的用法: 为每一条分组记录返回一个数字. 参考博友 , 博友二

  3. C++的那些事:你真的了解引用吗

    一.引用的本质是什么 说到引用,一般C++的教材中都是这么定义的: 1,引用就是一个对象的别名. 2,引用不是值不占内存空间. 3,引用必须在定义时赋值,将变量与引用绑定. 那你有没有想过,上面的定义 ...

  4. org.apache.log4j与org.apache.commons.logging这两个包有什么区别

    apache common logging是一种log的框架接口,它本身并不实现log记录的功能,而是在运行时动态查找目前存在的日志库,调用相关的日志函数,从而隐藏具体的日志实现log4j是具体的日志 ...

  5. 属性动画PropertyAnimation

    xml实现 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="h ...

  6. 解决eclipse中git插件中的cannot open git-upload-pack问题

    有时候在eclipse上使用插件egit向github或者osc上同步代码时,有时候会发现出现cannot open git-upload-pack这个问题. 一般引起这个问题的原因有两个:一.网络问 ...

  7. jQuery检查某个元素在网页上是否存在

    jQuery选择器有比较完善的处理机制,用jQuery获取网页中不存在的元素也不会报错,值得注意的是,利用$('#tt')获取的永远是对象,即使网页上没有此元素.当使用jQuery检查某个元素在网页上 ...

  8. API分析——Jquery UI Dialog

    1.阅读API文档的一般方法? 通常地, API由三部分构成:属性.方法.事件. 属性表示参数配置,作为一个组件的微调,或者功能的开启与关闭: 方法表示组件能够发生的动作,或者组件的状态监测: 事件表 ...

  9. bzoj1016 [JSOI2008]最小生成树计数

    1016: [JSOI2008]最小生成树计数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3517  Solved: 1396[Submit][St ...

  10. bug 修改心得

    我在做一个项目的时候,分页无法显示,于是我就开始进行各种修改. 最后我发现竟然是因为配置文件写错了,结果页面跳到别的页面, 跳转到了单项详细页面.