• 比ORA-24777: 我不使用不可移植数据库链接更郁闷的事情达成一致


       现场有一个同步误差,内容如下面:
       java.sql.BatchUpdateException: ORA-24777: 不同意使用不可移植的数据库链路
       at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10317)
       at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:216)
       at weblogic.jdbc.wrapper.PreparedStatement.executeBatch(PreparedStatement.java:210)

       1.了解了一下功能,大致例如以下:
          有A、B两个数据库,在A数据库上建了一个dblink。在XA的JDBC驱动下,通过dblink就会出现这样的错误。

       2.此错误有些生僻,直接查metalink见附录。

    两种解决方式供选择:

        a. Configure the database to allow the use of shared servers

             ALTER SYSTEM SET DISPATCHERS="(PROTOCOL=TCP)" scope=both;

             ALTER SYSTEM SET SHARED_SERVERS = 10 scope=both;

        b. Define the database link being utilised as a shared database link
         CREATE SHARED DATABASE LINK dblink_name
        [CONNECT TO username IDENTIFIED BY password]|[CONNECT TO CURRENT_USER]
        AUTHENTICATED BY schema_name IDENTIFIED BY password
         [USING 'service_name'];

       3.现场调整
          先用a方案在B数据库上调整了,用b方案在A数据库上做了调整。測试不行。再用a方案在A数据库上调整了。測试还是不行。

       4.到现场发现问题
          发现同义词不正确,就是没实用到这个shared的dblink。艹,这太让人郁闷了,调了半天,没实用到。

      
       我觉得的结论是:仅仅要把A库中的dblink改为shared的方式就能够了。

         

    Using Database Links in Oracle XA Applications

    Oracle XA applications can access other Oracle Database instances through database links with these restrictions:

    • They must use the shared server configuration.

      The transaction processing monitors (TPMs) use shared servers to open the connection to an Oracle Database A. Then the operating system network connection required for the database link is opened by the dispatcher instead of a dedicated server process. This allows different services or threads to operate on the transaction.

      If this restriction is not satisfied, then when you use database links within an XA transaction, it creates an operating system network connection between the dedicated server process and the other Oracle Database B. Because this network connection cannot be moved from one dedicated server process to another, you cannot detach from this dedicated server process of database A. Then when you access the database B through a database link, you receive an ORA-24777 error.

    • The other database being accessed must be another Oracle Database.

    If these restrictions are satisfied, Oracle Database allows such links and propagates the transaction protocol (prepare, rollback, and commit) to the other Oracle Database instances.

    If using the shared server configuration is not possible, then access the remote database through the Pro*C/C++ application by using EXECSQL AT syntax.

    The init.ora parameter OPEN_LINKS_PER_INSTANCE specifies the number of open database link connections that can be migrated. Thesedblink connections are used by XA transactions so that the connections are cached after a transaction is committed. Another transaction can use the database link connection if the user who created the connection also created the transaction. This parameter is different from the init.ora parameter OPEN_LINKS, which specifies the maximum number of concurrent open connections (including database links) to remote databases in one session. The OPEN_LINKS parameter does not apply to XA applications.


    转究竟部转究竟部

    In this Document

    Symptoms
      Cause
      Solution

    This document is being delivered to you via Oracle Support's Rapid Visibility (RaV) process and therefore has not been subject to an independent technical review.

    APPLIES TO:

    Oracle Server - Enterprise Edition - Version 10.2.0.5 to 11.2.0.3 [Release 10.2 to 11.2]
    Information in this document applies to any platform.

    SYMPTOMS

    ORA-24777 reported by a JDBC/XA application when utilising a database link between two Oracle databases.

    CAUSE

    An ORA-24777 is a warning that you are trying to utilise a database link within an XA coordinated transaction and the connection to the source database which is trying to use the database link has been made through a dedicated server connection.

    This is not allowed and this is documented in following entry

    As per http://docs.oracle.com/cd/E11882_01/appdev.112/e25518/adfns_xa.htm#ADFNS809

    in the following section 'Using Database Links in Oracle XA Applications'
    .
     

    SOLUTION

    Two options

    1. Configure the database to allow the use of shared servers and then let the application use these as per the following documentation

    http://docs.oracle.com/cd/E11882_01/server.112/e25494/manproc003.htm#ADMIN00502

    or establish whether the Java application needs to start an XA transaction.

    OR

    2. Define the database link being utilised as a shared database link, i.e,

    CREATE SHARED DATABASE LINK ..

    as per

    http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_5005.htm#SQLRF01205


    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    Serverless 的初心、现状和未来
    父亲的茶杯
    子慕谈设计模式系列(三)
    子慕谈设计模式系列(二)——设计模式六大原则
    子慕谈设计模式系列(一)
    初入angular4——实际项目搭建总结
    欲练JS,必先攻CSS——前端修行之路
    运用google-protobuf的IM消息应用开发(前端篇)
    “倔驴”一个h5小游戏的实现和思考(码易直播)——总结与整理
    【猿分享第10期】微信小程序Meetup扫盲专场回顾(转载)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4809832.html
Copyright © 2020-2023  润新知