안녕하세요.
아래의 오류는
1. 한 사용자가 select중에 다른 사용자가 update하고자 할 때,
2. 한 사용자가 update중에 다른 사용자가 select하고자 할 때,
3. 한 사용자가 update중에 다른 사용자가 update하고자 할 때
발생합니다.
각각 테이블의 locking 모드가 page level일 경우 더욱 빈번하게
나타날 수 있습니다. 이것은 정상적인 것으로
해당 레코드의 lock을 얻지 못해서 발생하는 오류입니다.
이를 해결하는 방법은
1. 테이블의 locking 모드를 row level로 바꾼다.
2. set lock mode to wait; 또는
set lock mode to wait 60;
3. set isolation to dirty;
과 같습니다.
1번의 경우는 page level보다 lock이 cross되는 정도를
줄여 줍니다. 완전한 해결방법은 아니라고 할 수 있습니다.
2번의 경우는 lock을 hold하고 있는 사용자가 작업을 완료할
때까지 기다린 후 작업이 진행되도록 하거나 설정된 시간(초)
만큼 기다리다 해당 시간 이내에 lock을 얻을 수 있으면 작업을
진행하고 해당시간이내에 lock를 얻을 수 없으면 -243 또는 -244
오류를 반환합니다.
3번의 경우 select시 영향을 미치게 되는 데, 해당 레코드에
lock이 걸려있어도 읽어내도록 하는 것입니다.
즉 다른 사용자가 update를 하고 있는 중이고 아직 commit를 하지
않았어도 해당 레코드의 변경된 내용이 읽혀집니다.
읽혀지는 내용이 크리티컬하지 않다면 3번의 경우가 가장 부담이 적을
것 같습니다. update가 빈번하게 일어난다면 일단 1번을 적용하고
읽혀지는 레코드가 꼭 commit된 것이어야 한다면 2번을 사용하시기 바랍니다.
2번과 3번은 SQL문장을 전송하는 것이고 1번의 경우는 테이블을 생성시
create table test (
) lock mode row;
와 같이 주거나
alter table test lock mode row;
와 같이하여 locking mode를 바꿀 수 있습니다.
문법이 정확한 지는 잘 모르겠군요...
자세한 사항은 메뉴얼을 참조하시는 것을 잊지마시고요... ^_^
그럼 수고하세요.
>>김기성 님께서 쓰시길<<
:: 안녕하십니까?
::
:: informix의 lock error 인 -243에 대하여 아래와 같이 질문을 드립니다.
::
:: 초보자이다 보니 고수님들의 지도편달 부탁드립니다.
::
:: 저희는 db server가 unix에
::
:: informix 7.2, power builder 5.0을 사용하고 있는 user 입니다.
::
:: 특정 table에서 아니면 여러 table에서 lock 오류가 납니다.
::
:: 같은 프로그램을 같은 table간의 join을 oracle에서는 나지 않습니다.
::
:: 어디를 check하여 보아야 하는지, 어떻게 하면 lock의 원인을 파악하여 수정할 수 있
::
:: 는지 아시는 분께 답변을 부탁드립니다.
::
:: 요즘 이 lock 때문에 미치겠습니다.
::
:: 꼭좀 부탁드립니다.
|