오라클 - DB link 의 세션 관리, 접속과 접속 해지 문제에 대해서

2017. 2. 20. 03:40Meteor

출처 : http://stackoverflow.com/questions/1801592/oracle-jdbc-connection-pooling-with-database-link

Oracle JDBC connection pooling with database link


DB link 의 세션 관리, 접속과 접속 해지 문제에 대해서

DBMS_SESSION.CLOSE_DATABASE_LINK 를 적극 사용하자.
* commit 해야 되는 것이 있으면 그냥 닫을 수 없다.

DBMS_SESSION.CLOSE_DATABASE_LINK로 닫아도 
닫혀진 DB Link를 다시 읽으면 즉시 연결이 되어진다. (DB Link : open_links 을 관리하고 있는 것으로 생각된다.)

--------------------------------------------------------------------------------------------

There's a one-to-one relationship between the local and remote database sessions.
There has to be for the following situations: 
Session A1 on the local DB runs "INSERT INTO table@B VALUES ('A1');" 
That insert is part of Session A1's transaction.
로컬 및 원격 데이터베이스 세션간에 일대일 관계가 있습니다.
다음과 같은 상황이 있어야합니다.
로컬 DB의 세션 A1은 "INSERT INTO table @ B VALUES ( 'A1');"
해당 삽입은 세션 A1의 트랜잭션의 일부입니다.

Session A2 comes along and does a "SELECT * FROM table@B". 
Because Session A1 hasn't committed yet, session A2 shouldn't see the row.
Therefore it needs a remote session that is distinct from that belonging to A1.
세션 A2가 나타나고 "SELECT * FROM table @ B"을 수행합니다.
세션 A1은 아직 커밋되지 않았으므로 세션 A2는 행을 보지 않아야합니다.
따라서 A1에 속한 세션과는 다른 원격 세션이 필요합니다.

Equally you could have all 20 sessions on database A running queries concurrently on database B.
마찬가지로 데이터베이스 A에서 20 개의 세션을 모두 수행하여 데이터베이스 B에서 동시에 쿼리를 실행할 수 있습니다.

There is a DBMS_SESSION.CLOSE_DATABASE_LINK procedure which will disconnect the remote connection. 
I had some problems with that (9i database) when it refused to close them claiming 'outstanding transactions' even immediately after a commit. 
원격 연결을 끊는 DBMS_SESSION.CLOSE_DATABASE_LINK 프로 시저가 있습니다.
커밋 직후에도 '미결 거래'를 청구하는 것을 거부했을 때 문제가 발생했습니다 (9i 데이터베이스).

It seemed to relate to cached PL/SQL cursors. 
It may no longer be an issue.
캐시 된 PL / SQL 커서와 관련이있는 것처럼 보였습니다.
더 이상 문제가되지 않을 수도 있습니다.