2009-11-26 5 views
1

Oracle 데이터베이스가있는 J2EE 웹 응용 프로그램을 구축하고 있습니다. 앱 서버는 Oracle 데이터베이스 A (예 : 최대 20 개의 연결)에 대해 JDBC 연결 풀링을 사용하고 수행 된 쿼리 중 일부는 데이터베이스 링크를 통해 원격 Oracle 데이터베이스 B의 테이블을 사용합니다.데이터베이스 링크가있는 Oracle JDBC 연결 풀링

응용 프로그램 서버가 데이터베이스 A에 20 개의 연결을 만들고 모든 쿼리가 데이터베이스 B에서 데이터를 조회하는 경우 데이터베이스 A는 데이터베이스 B에 20 개의 연결을 생성합니까? 또는 모든 쿼리가 동일한 연결 터널을 통과합니까?

답변

2

로컬 및 원격 데이터베이스 세션 간에는 일대일 관계가 있습니다. 다음과 같은 상황이 있습니다. 로컬 DB의 세션 A1이 INSERT INTO 테이블을 실행합니다. @ B VALUES ('A1'); 삽입은 세션 A1의 트랜잭션의 일부입니다.

세션 A2는 SELECT * FROM 테이블 @B와 함께옵니다. 세션 A1이 아직 커밋되지 않았기 때문에 세션 A2에 행이 표시되지 않아야합니다. 따라서 A1에 속한 세션과는 다른 원격 세션이 필요합니다.

은 마찬가지로 당신은 동시에 데이터베이스 B.

원격 연결을 분리하는 DBMS_SESSION.CLOSE_DATABASE_LINK 절차가 있습니다에 데이터베이스 A가 실행되는 쿼리에 20 개 세션을 가질 수 있습니다. 커밋 직후에도 '미결 거래'라고 주장하는 것을 막기를 거부했을 때 문제가있었습니다 (9i 데이터베이스). 캐시 된 PL/SQL 커서와 관련이있는 것처럼 보였습니다. 더 이상 문제가되지 않을 수도 있습니다.