现场有一个同步误差,内容如下面:

   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.

ORA-24777 reported when using a database link from within an XA coordinated transaction
(文档 ID 1506756.1)
转究竟部

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

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

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

  1. tnsnames.ora配置注意(连接新的数据库)

    文件地址D:\app\think\product\11.2.0\instantclient_11_2\network\admin\tnsnames.ora# tnsnames.ora Network ...

  2. 不用配置tnsnames.ora,直接通过PL/SQL访问远程数据库

  3. Oracle Ora 错误解决方案合集

    注:本文来源于 < Oracle学习笔记 --- Oracle ORA错误解决方案 > ORA-00001: 违反唯一约束条件 (.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发 ...

  4. Oracle 错误总结及问题解决 ORA

    参考地址 ORA-00001: 违反唯一约束条件 (.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常.ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数O ...

  5. Oracle ORA

    ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常. ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 OR ...

  6. ORA 各种oraclesql错误

    ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出 ...

  7. oracle的sqlnet.ora,tnsnames.ora,listener.ora三个配置文件

    总结: 1 .三个配置文件都是放在$ORACLE_HOME\network\admin目录下. 2 .sqlnet.ora确定解析方式 3 .listener.ora上设SID_NAME,通常用于JD ...

  8. mysql数据库移植

    在mysql数据库移植的时候,把自己电脑上mysql中data目录的一些重要文件复制到其他电脑上,先备份一下其他电脑上的mysql的data目录,然后替换! 例如我的mysql默认的数据库文件位置:  ...

  9. (五)u-boot2013.01.01 for TQ210:《移植前的准备及u-boot初编译》

    移植前的准备 移植前,要做的事情是搭建开发环境以及对U-boot源码的获取.首先说一下开发环境: 1.此次U-boot移植的硬件平台是天嵌的TQ210开发板: CPU:板载核心是S5PV210(Cor ...

随机推荐

  1. 递归算法的数据结构和算法 C++和PHP达到

    递归算法:它是一种间接的方法调用本身,直接或. 实施过程:按功能或子程序完成.在函数编写代码或子程序直接或间接拥有被称为.你可以完成递归. (相同类型的问题,子问题到最小问题有已知条件,然后来求解,然 ...

  2. Androidclient和server第一种方法端数据交换

    网上有一个非常不同的情况来证明Android客户端和server如何结束的数据,但这些实施例大多相互作用更复杂,对于那些谁刚开始学习它是有害的,现在介绍一些简单的代码.逻辑清晰的互动样本,首先介绍本博 ...

  3. Cocostudio学习笔记(4) LoadingBar+ TextField

    这同时录制两个控件的使用方法:LoadingBar和 TextField. -------------------------------------------------------------- ...

  4. 重新想象 Windows 8 Store Apps (26) - 选取器: 自定义文件选取窗口, 自定义文件保存窗口

    原文:重新想象 Windows 8 Store Apps (26) - 选取器: 自定义文件选取窗口, 自定义文件保存窗口 [源码下载] 重新想象 Windows 8 Store Apps (26) ...

  5. 【原创】《算法导论》链表一章带星习题试解——附C语言实现

    原题: 双向链表中,需要三个基本数据,一个携带具体数据,一个携带指向上一环节的prev指针,一个携带指向下一环节的next指针.请改写双向链表,仅用一个指针np实现双向链表的功能.定义np为next ...

  6. 国内PaaS概述和EEPlat定位

    2014国内云计算产业进入快速发展阶段.热火多年来,所以云计算的云计算产业迅速进入栈桥的应用.IaaS.PaaS.SaaS各大厂商具有较强的市场布局,所以,云计算应用在这三个层次的访问,以实际使用阶段 ...

  7. nodejs显现events.js:72抛出错误

    随着人们开始学习,我用nodejs过程中遇到如下列错误执行: events.js:72 throw er; // Unhandled 'error' event ^ Error: listen EAD ...

  8. 【cocos2dx-3.0beta-制作flappybird】尾随时代潮流,关于引擎升级

    cocos2dx3.1版本号会被释放出,本来,我自己想要这个升级到官方的3.0版本号.只是无奈3.0坑的正式版不会做,偶数帧动画是正确及时的问题,果断放弃,随着广大淫民的支持.我已经升级到最新的代码c ...

  9. 在SQL Server引用dll的流程

    原文:在SQL Server引用dll的流程 在SQL Server中引用dll分为两个步骤 1.创建一个dll文件 2.把dll文件放进SQL Server的程序集中.然后定义一个Function, ...

  10. Android 建立View 圆角

    虽然很easy,不过还是录制. 混合参观 在drawable文件下 创建一个布局文件corners_bg.xml <?xml version="1.0" encoding=& ...