DB링크하여 인설트중 오류가 발생하였습니다. 0 11 10,707

by 김영기 pathetique [2008.11.28 16:42:07]


실디비에서 데이터 인설트중에 오류가 발생했습니다.

--ORA-02049: 시간초과: 분산 트랜잭션이 잠금으로 대기중 입니다.

 데이터는 12만건 정도이구요.

지식인에도 오라클클럽에도 보이질 않네요. ㅠ

by 호야 [2008.11.28 16:50:13]
알아본 봐로는

ORA-02049 timeout: distributed transaction waiting for lock

Cause: Exceeded INIT.ORA DISTRIBUTED_LOCK_TIMEOUT seconds waiting for lock.

Action: Treat as a deadlock.

ㅡㅡ; 이렇게 나오는데... 데드락이시라던데..
-_- 분산 환경을 안해봐서.. 도움이 되실지는.ㅠ,.ㅠ

by 김영기 [2008.11.28 16:52:23]
그런가요 ㅠ 조회만 되고 인설트가 안되는데 이유를 모르겠네요.

by 호야 [2008.11.28 16:54:47]
말 그대로 어떠한 DML 을 수행을 했을 경우 현 사용자가 Table Lock을 걸고
있을 경우가 있는데 이때 insert를 시도를 하면... 테이블에 접을 하지 못하게
됩니다. session 한번 확인 해 보시구요 dead lock 부분이 있는지 체크 하시고
아니면 다른 개발자가 그 테이블에 어떠한 작업을 하고 있는지에 대해서
한번 알아 보시는게 좋을듯 싶어요^^;

by 호야 [2008.11.28 16:57:22]
Transaction Timeouts
A DML statement that requires locks on a remote database can be blocked if another transaction own locks on the requested data. If these locks continue to block the requesting SQL statement, then the following sequence of events occurs:

A timeout occurs.
Oracle rolls back the statement.
Oracle returns this error message to the user:
ORA-02049: time-out: distributed transaction waiting for lock


Because the transaction did not modify data, no actions are necessary as a result of the timeout. Applications should proceed as if a deadlock has been encountered. The user who executed the statement can try to reexecute the statement later. If the lock persists, then the user should contact an administrator to report the problem.

-_- 요놈도 참고

by 김영기 [2008.11.28 17:01:12]
DML이라 그런가보네요..
어제랑 오늘 날짜 데어터 인설트라서.. 실디비는 계속 업데이트중이고.. 그래서 그런지도? ㅠㅁ 여튼 고맙습니다 호야님 ^^

by 김영기 [2008.11.28 17:07:25]
해결되었습니다.

실디비 트랜잭션 문제인듯-;; //호야님 밑에 영문은 오라클에 있는건가요?

by 호야 [2008.11.28 17:48:55]
오라클 강좌란 다 읽고 쭈욱 밑에 보시면 요런 링크들이 있죠.ㅋㅋ

http://download-west.oracle.com/docs/cd/B10501_01/index.htm

여기서 자주 찾아요.

by 김영기 [2008.11.28 18:12:22]
링크 고맙습니다.

by 장태길 [2008.11.28 22:30:42]
분산 트랙잭션의 경우 양쪽 디비에서 발생하는 트랜잭션을 하나의
디비에서 발생하는 트랜잭션처럼 처리 해야 하기 때문에
양쪽의 트랙잭션이 모두 commit 혹은 rollback 되어야 하기 때문에
local/remote 에서 발생하는 트랜잭션에 대해서 timetout 설정을 가집니다.
메시지 자체만 가지고 이야기를 드리면 일처를 양을 줄여서 하라는 것뿐입니다.
디비 파라미터 변경도 가능하지만... 그건 비추입니다.

by 장태길 [2008.11.28 22:31:19]
이를 테면 이 이상 시간이 소요되면 자동으로 rollback 한다는 의미로 이해하시면됩니다.

by 김영기 [2008.12.01 13:20:54]
장태길님.// 속이 다 후련하네요. 답변 감사합니다!
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입