zoukankan      html  css  js  c++  java
  • [Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效(转)

    原帖由 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
  • 相关阅读:
    dedecms 标签的基本用法
    修改config.php配置
    截取字符
    preg_replace 方法
    php过滤HTML标签、属性等正则表达式汇总
    各种正则验证
    解决问题 “You don't have permission to access /index.html on this server.”
    zend frameword 基本语法
    创建zend framework 项目要注意的
    PHP中级篇 Apache配置httpd-vhosts虚拟主机总结及注意事项[OK]
  • 原文地址:https://www.cnblogs.com/kingxiaozi/p/4832542.html
Copyright © 2011-2022 走看看