programing

커서에서 '업데이트 대기'를 언제 사용해야 합니까?

cafebook 2023. 7. 7. 21:08
반응형

커서에서 '업데이트 대기'를 언제 사용해야 합니까?

어떤 경우에 우리는 사용해야 합니까?for update nowait커서로

사용.for update nowait행을 사용 중으로 만들고 커밋 또는 롤백이 실행될 때까지 잠금을 가져옵니다.잠금을 획득하려는 다른 세션에는 다음과 같은 오류 메시지가 표시됩니다.ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired잠금이 해제될 때까지 기다리는 대신.

세션 1:

CURSOR abc_cur 
IS 
select * from dept where deptno =10 for update nowait;

여기서 행은 커서가 닫히거나 커밋/롤백이 실행될 때까지 잠깁니다.한편 세션 2의 다른 사용자가 동일한 레코드에 액세스하려고 하면 아래와 같은 오류가 발생합니다.

세션 2:

select * from dept where deptno =10 for update nowait;

이 사용자는 첫 번째 세션에서 잠긴 동일한 레코드를 업데이트하거나 삭제할 수도 없습니다.

ERROR at line 1:
`ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired`

사용: 이제 특정 레코드 집합에 대해 일부 조작을 수행하고 다른 세션의 다른 사용자가 사용자의 데이터를 재정의하지 않으려면 먼저 레코드를 잠가야 합니다(사용)for update nowait그런 다음 조작을 수행합니다.조작을 마치면 커서를 닫고 커밋합니다.

EDIT 임시에 10개의 행이 있고 세션 1에서 다음 스크립트를 실행한다고 가정합니다.

declare
  cursor abc is select * from temp for update nowait;
  temp abc%rowtype;
begin
  open abc;
  -- do slow stuff here
  close abc;
  commit; 
end;

세션 2에서 세션 1의 스크립트가 계속 실행되는 동안 다음을 실행합니다.

select * from temp;

10 rows found 

세션 1의 스크립트가 실행 중인 동안 세션 2에서 동일한 스크립트를 실행하는 경우

declare
  cursor abc is select * from temp for update nowait;
  temp abc%rowtype;
begin
  open abc;
  -- do slow stuff here
  close abc;
  commit; 
end;

그러면 나는.ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired instead of waiting the lock to release.

사용.for update 제외하고nowait다음 작업을 수행합니다.

  • 해당 레코드(또는 해당 레코드)가 잠겨 있는지 확인합니다.
  • 잠겼으면 더 이상 잠기지 않을 때까지 기다립니다.
  • 새 잠금으로 레코드를 잠그면 다음 시간까지 레코드가 잠깁니다.commit또는rollback실행됩니다.

사용.for update 함께nowait다음 작업을 수행합니다.

  • 해당 레코드(또는 해당 레코드)가 잠겨 있는지 확인합니다.
  • 잠겨 있으면 기다리지 않고 오류 메시지와 함께 종료합니다.
  • 레코드가 잠기지 않으면 새 잠금으로 레코드를 잠급니다. 이 잠금 장치는 다음 시간까지 레코드를 잠급니다.commit또는rollback실행됩니다.

이전 답변의 예제는 세션 1이 잠기는 경우에도 작동합니다.for update 제외하고nowait세션 2는 다음을 사용하는 동안 절입니다.nowait

도움이 되길 바랍니다.

언급URL : https://stackoverflow.com/questions/13248239/when-should-i-use-for-update-nowait-in-cursors

반응형