ORA-28500: 连接 ORACLE 到非 Oracle 系统时返回此信息(对象名 ‘RECOVER.HS_TRANSACTION_LOG‘ 无效,ERROR ORA-02054: 未决事务处理)

今天在存储过程中通过dblink的方式从oracle中往sql server中的表插入数据时,报如下的错误:

ERROR ORA-02054: 未决事务处理 15.29.1031
ORA-28500: 连接 ORACLE 到非 Oracle 系统时返回此信息: 
[Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效。 {42S02,NativeErr = 208}
ORA-02063: 紧接着 2 lines (起自 SY30SMOKERHIN)   ORA-02054: 未决事务处理 15.29.1031

查阅网上资料:

(1) 有人说在"begin   end"块中,有两段事务,一段是oracle的,一段是sql server ,update或者insert完oracle或者sql server,都要先commit后再进行下一轮的insert 或者update(试过了,问题依旧)

(2) 也有人说修改dblink的监听文件initdg4msql.ora,我没有这个权限,就没有试

(3)在sql server中新增表:

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

看着有点靠谱,与错误提示相符,但经过我的测试发现,这样直接执行是不行的,问题依旧

但通过这个方案加上前面的错误提示,我猜表HS_TRANSACTION_LOG应该是保存事务临时数据的,新增这样表的必须的,但为什么我新增了表依旧不行呢?原因是没在对应的架构下新增表(即RECOVER架构),所以得出下面的解决方案

解决方案如下:

1  在sql server端切换到对应的数据库
 

use   你的数据库名称
go

2  在你要操作的数据库下的架构那里新增架构并设置如下,如下图:

 

 

3  新增表HS_TRANSACTION_LOG

CREATE TABLE [RECOVER].[HS_TRANSACTION_LOG](
  GLOBAL_TRAN_ID char (64) NOT NULL,
  TRAN_COMMENT char (255) NULL
)
go

4 为表HS_TRANSACTION_LOG授权,设置如下:

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxy2847225301

测试使用

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值