2009-12-08 4 views
0

커서를 열어 본 후 커밋을 사용해야하는지 여부는 누구나 제안 할 수 있습니까?오라클에 커서를 놓은 후에 커밋하십시오.

+0

어떤 상황에서? 너 뭐하려고? –

+0

만약 루프를위한 커서가 있고 내부에서 커밋을 사용한다면 cons/prons가 될 수 있습니다. –

답변

10

대부분의 경우 관련이 없습니다.

커서는 데이터를 검색하기위한 구성입니다. 일단 레코드가 읽혀지면 커서가 닫혀있을 때 커서가 닫히는 것이 중요하지 않습니다.

COMMIT는 트랜잭션이 완료되었을 때 완료되기 전에 발행되어야합니다.

두 가지 동작의 순서가 중요한 경우는 CURSOR FOR 루프를 실행할 때입니다. 커서를 열거 나 닫을 때 COMMIT가이 루프 외부에서 발생하는 것이 매우 중요합니다. 그렇지 않으면 읽기 일관성에 문제가 발생할 수 있습니다. 몇 가지 복잡한 이유로 루프 내부에서 커밋해야한다고 주장 할 사람들이 있지만, 거의 항상 오해가 있습니다.

이 마지막 사례의 중요성을 과대 평가해서는 안됩니다. 대부분의 트랜잭션은 PL/SQL 커서 내에서 DML보다는 SQL을 사용해야하므로 거의 적용되지 않습니다.

+0

+1 커밋을 사용할 적절한 시간과 "두려워한"증분 커밋을 피하는 데 대한 설명이 필요합니다. –

+0

"일관성 문제 읽기"가 "스냅 샷이 너무 오래됨"문제 또는 다른 것입니까? – jva

1

글쎄, 그것은 당신이 성취하고자하는 것에 달려 있습니다. 때로는 그렇게하고 싶을 때가 있습니다. 때때로 그렇지 않습니다. 성취하고자하는 것을 구체적으로 기술 할 수 있습니까?

3

커서가 FOR UPDATE를 사용하여 레코드를 잠그면 모든 잠금이 커밋에 의해 해제됩니다. 사실, 모든 잠금은 커밋에 의해 해제됩니다.

또한 "ORA-01555 스냅 샷이 너무 오래되었습니다."오류는 "전체 커밋을 통해 가져 오기"- this AskTom thread을 참조하십시오.

관련 문제