JDBC 애플리케이션 커서 홀드 기능 지원
커서 홀드 기능은 관계형 데이터베이스로 JDBC 상호작용의 오버헤드를 줄일 수 있으므로 애플리케이션 성능을 늘리는 데 도움이 됩니다.
커서 홀드 기능을 활성화하여, 다중 JDBC 호출로 사용하도록 트랜잭션 경계에서 결과 세트를 사용 가능하게 합니다. 홀드 기능 설정은 데이터베이스 커서를 트리거하여 새 값이나 결과 세트를 생성한 트랜잭션의 커미트 이상의 새로 업데이트된 행을 활성화합니다. 그러므로 커서는 후속 트랜잭션에서 명령문에서 사용하도록 결과 세트를 사용 가능하게 만듭니다.
커서 홀드 기능 설정
다음 기술 중 하나를 사용하여 커서 홀드 기능을 설정합니다. 세부사항은
http://www.oracle.com/technetwork/java/index.html에 있는
JDBC 3.0 스펙을 참조하십시오.
- createStatement, prepareStatement 또는 prepareCall 메소드를 사용하는 명령문 작성 또는 준비 시 ResultSet.HOLD_CURSORS_OVER_COMMIT 매개변수를 지정합니다.
- Connection 오브젝트에서 setHoldability 메소드를 호출합니다. 이 메소드로 설정한 커서 홀드 기능 값이
기본값이 됩니다. Statement 오브젝트에서 커서 홀드 기능을 지정하면,
해당 값은 연결에서 지정한 값을 대체합니다.
연결이 두 번째 핸들에서 참조된 후 공유 가능한 연결에서 커서 홀드 기능을 지정할 수 없습니다. 이때 홀드 기능 메소드를 호출하면 예외를 생성합니다. 공유 가능한 연결에서 커서 홀드 기능을 설정하려면, 연결이 설정되기 전에 메소드를 호출하십시오. 그렇지 않으면 공유 가능한 연결은 이전 참여에 적용된 동일한 홀드 기능 값을 보유합니다.
- 제품이 데이터 소스 특성으로 커서 홀드 기능을 지원하는지 보려면 사용자 데이터베이스 문서를 확인하십시오. 예를 들어, DB2®는 데이터 소스 사용자 정의 특성으로 설정하면 홀드 기능 트리거에 응답합니다. 자세한 정보는 사용자 정의 특성 설정 주제를 참조하십시오.
커서 홀드 기능에서 연결 및 트랜잭션 동작의 영향
WebSphere®
Application Server에서 커서 홀드 기능을 설정하면 다른 트랜잭션 이벤트에 대해 다음 동작이 발생합니다.
- 연결이 닫히면 커서 홀드 기능을 설정하더라도 모든 명령문과 결과 세트가 종료됩니다.
- 트랜잭션이 롤백되면 커서 홀드 기능을 설정하더라도 모든 결과 세트가 닫힙니다.
- 로컬 트랜잭션이 커미트되면 공유 가능 및 공유 불가능 연결 모두는 트랜잭션 경계에 열린 결과 세트가 있을 수 있습니다.
- 글로벌 트랜잭션이 커미트되면 공유 불가능 연결은 트랜잭션 경계에 열린 결과 세트가 있을 수 있습니다. 공유 가능 연결의 경우, 커서 홀드 기능을 설정하더라도 명령문과 결과 세트가 닫힙니다. 홀드 기능 값은 글로벌 트랜잭션에 참여하는 공유 가능 연결에 영향을 주지 않습니다.
- 로컬 트랜잭션 범위가 종료되면, 메소드 레벨이나 활동 세션 레벨에서 공유 가능 연결에 대한 모든 명령문과 결과 세트가 닫힙니다. 닫기 메소드가 연결 시 호출되면 공유 불가능 연결에 대한 명령문과 결과 세트는 열린 채로 남습니다.
참고: 공유 불가능 연결의 글로벌 트랜잭션의 경우,
백엔드 데이터베이스는 커서 홀드 기능 지원을 담당합니다.