• [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
  • 相关阅读:
    重定向丶管道丶参数传递
    zabbix监控redis
    zabbix监控mysql
    playbook
    zabbix通过jvm监控tomcat
    zabbix监控tcp状态
    部署centos6
    自动选择profile
    java jvm学习笔记十二(访问控制器的栈校验机制)
    java jvm学习笔记十一(访问控制器)
  • 原文地址:https://www.cnblogs.com/kingxiaozi/p/4832542.html
Copyright © 2020-2023  润新知