database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 5760 게시물 읽기
No. 5760
Uncommittable transaction 관련 문의입니다.
작성자
오은혜(goodohne)
작성일
2010-09-13 16:36ⓒ
2010-09-13 16:39ⓜ
조회수
7,453

DB 및 프로시져는 업체에서 제공해 준 걸 사용하고 있고,

java 로 짜여진 프로그램에서 해당 프로시져를 호출하고 있습니다.

프로시져는 대략 1250라인으로 구성되어 있고,

내부에는 select , insert 외에 다른 프로시져들을 호출하는 구문이 많이 눈에 띄네요..

java 에서는 8개의 inputparam을 전달하여 insert 용도로 해당 프로시져를 호출하는데요,

전체적으로는 별 문제가 없습니다만,

특정 데이터를 param으로 전달했을 경우 에러가 발생하였습니다.

업체 측에서는 프로시져 내부에서 select  하는 로직에서 추출해야 하는 데이터가 null 일 경우 발생하는 Exception 처리가 누락되어서 그런 문제가 발생했었다고 하고, 

해당 부분을 수정하여 추출할 데이터가 null이어도 타겟테이블에 insert 가 되어있으면 정상리턴 하도록 수정하였다고 합니다.

 

그러나 그렇게 수정된 뒤로는 java 프로그램 내에서 다른 SQLException 을 리턴합니다.

!![3998]com.microsoft.sqlserver.jdbc.SQLServerException: Uncommittable transaction is detected at the end of the batch. The transaction is rolled back.

물론 위에서 언급한 특정 데이터일 경우에만 발생합니다..

업체측에 해당 데이터로 프로시져 재확인 요청을 하였으나, 테스트 결과 아무문제 없다.. 라는 답변만 들었습니다.

 

SQL에 관해선 지식이 얕은지라, 해당 에러를 검색해보니

TRY 블록에서 생성된 오류로 인해 현재 트랜잭션의 상태가 무효화 되는 경우 커밋할 수 없는 트랜잭션으로 분류되어 롤백되었다고,

그래서 읽기 작업 또는 ROLLBACK TRANSACTION 만 수행할수 있다고 나오더라구요..

(참고 : http://msdn.microsoft.com/ko/library/ms175976.aspx )

 

업체측에서는 ManagementStudio에서 쿼리분석기 상으로

BEGIN TRAN

select * from 테이블 where data = 문제의데이터
exec 프로시져명 데이터1, 데이터2, ....
select * from 테이블 where data = 문제의데이터

ROLLBACK TRAN

이런식으로 테스트를 진행하였고, 결과는 정상이었다고 합니다.

 

어느 부분이 잘못되어서 insert가 되지 않는 걸까요..?

 

(참고. 소스상에선 해당 커넥션의 AutoCommit속성을 false로 설정해 두고있고,

프로시져 호출 전  set transaction isolation level read committed 로 설정한 후 프로시져를 호출하였을 때 문제가 발생하였었고,

프로시져 내부에서 SET  NOCOUNT ON , SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED , SET  XACT_ABORT ON 로 설정이 되어있길래

소스 상의 isolation level설정을 주석처리한 후 테스트 해보았으나 결과는 마찬가지였습니다.)

[Top]
No.
제목
작성자
작성일
조회
5763MS-SQL 초보인지라 질문을 올립니다. [1]
이성호
2010-09-14
6330
5762try ~ catch 문의 에러 처리에 대해서 [1]
용세중
2010-09-14
6106
5761아래 문장이 무슨 내용인지 도통 이해가 안가네요
이성호
2010-09-14
6371
5760Uncommittable transaction 관련 문의입니다.
오은혜
2010-09-13
7453
5759아래의 문장을 해석좀 부탁드립니다. [3]
이성호
2010-09-13
6308
5758Linked Server 에 테이블이나 데이터베이스 존재 유무 확인하는 방법은?
용세중
2010-09-10
6632
5757테이블 조회 할 경우 1개 또는 전체 가져오는 쿼리.. [6]
zaken
2010-09-09
6886
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다