음~~ 님의 프로그램 자체는 별다른 문제점이 없는듯 싶네여....
원인이 무엇인지는 정확히 알 수 없구요.... 쩝
혹, cpre(precompile)할때 옵션을 확인하구 해보세요...
cpre -m -r (autocommit하고 isolation level이요)
그래서 한번 테스트 해보시구요....
그래두 안되면 begin tran하구 commit tran을 빼구도 해보세요....
아래 프로그램 같은 경우에는 꼭 트랜잭션으로 묶을 필요는 없는 것 같거든요...(여러 쿼리두 아니고, 단지 한개의 쿼리니까 에러가 발생하면 당연히 실행이 안 될 테니까요....)
그리고 혹 트랜잭션(begin과 commit 혹은 rollback의 쌍이 안 맞는게 있는지도 확인해보시구요... 물론 확인하셨을 것 같긴 한데....)
제가 드릴수 있는 도움은 이 정도밖에 안되네요....
그래두 안 된다면 사이베이스에 직접 연락해보세요...
암튼 수고하세요....
-- 임세환 님이 쓰신 글:
>> 자세한 질문입니다.
>> 테이블은 다음과 같습니다.
>>
>> create table TB_CONTS_SEQ
>> (
>> TRANS_DT CHAR(8) NOT NULL,
>> GUBUN CHAR(8) NOT NULL,
>> CONTS_NUM NUMERIC(13) NOT NULL,
>> constraint TB_CONTS_SEQ_PK primary key clustered (TRANS_DT, GUBUN)
>> )
>> go
>> rowlock
>>
>>
>> 프로그램상에서는 이테이블의 일자와 구분자가 같은것에 CONTS_NUM
>> 을 Update하고자 합니다.
>>
>> EXEC SQL BEGIN TRAN;
>>
>> EXEC SQL
>> UPDATE TB_CONTS_SEQ set CONTS_NUM = CONTS_NUM +1
>> where TRANS_DT = :H_CurrDate
>> AND GUBUN = 'AAAA1234';
>> EXEC SQL COMMIT TRAN;
>>
>> 이런식입니다.
>> 그런데 종료를 하고나면 모두 Rollback 되어 있습니다.
>> 그런데 한가지 이상한점은
>> Socket을 이용해서 fork()시켜가면서 DB작업이 끝나고 바로 죽는
>> 프로세스들은 정상적으로 Commit를 때립니다.
>>
>> 위의 프로그램의 경우는 무한루프를 돌고 있습니다. 무언가를
>> 모니터링하느라..
>> 물론 signal처리를 하여 정상종료하게 해놓았지만 구래도
>> rollback됩니다.
>>
>> 이게 질문의 요지입니다. 혹시 이런경우를 겪어보신분은
>> 해결책을 제시해주시기 바랍니다.
>> 수고하세엽~
|