2009-11-06 3 views
2

대략적인 아이디어 ORA-1555 : 스냅 샷이 너무 오래됨 : 롤백 세그먼트 번호 이 오류가 발생하고 아무 것도 잘못된 것 같습니다. 발생할 수있는 조건과 피할 수있는 방법을 명시하십시오.ORA-1555 : 스냅 샷이 너무 오래됨 : 롤백 세그먼트 번호

+0

알려 주시기 바랍니다 - 누가 나를 doewnvoted 그리고 왜 당신이 할 수 물론 –

+2

-1 오류에 대한 다른 많은 세부 정보가 있어야합니다 (아래 언급 된 유일한 정보는 아님). 너 뭐하려고? – Vijay

+0

을 할 트링된다 WHT에 대해 추가하지 않는 – Guru

답변

2

난 당신이 톰의 답변을 읽어 제안한다. 사람들은 일반적으로 공간을 절약하려고 할 때 http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1441804355350

는 "ORA-1555이 발생을 그들이 필요한 경우 성장할 수 (및 사용 감소 할 작은 롤백 세그먼트를해야합니다 OPTIMAL) 이 롤백 세그먼트는 10MB 정도의 1MB 롤백 세그먼트로 시작합니다.이 롤백 세그먼트는 이 100MB로 증가하지만 (이 예에서) 허용하지 않으면 절대 커지지 않습니다. 큰 거래를 얻지 않으면
"

+0

예 큰 거래가 있습니다 –

+0

이 링크는 매우 유용하지만 좀 더 자세한 정보가 필요합니다. –

+0

"여기서해야 할 일은 크기 롤백이므로 덜 자주 감싸는 것입니다. 귀하의 장기 실행 쿼리) " 더 많은 정보가 필요하지만 수행하려고하는 것에서 더 많은 정보가 필요하며 언제 발생합니까? – guigui42

2

일반적으로 이것은 코드가 커서 내부에서 커밋 될 때 발생합니다.

예 :

for x in (select ... from ...) 
loop 
    do something 
    commit; 
end loop; 

다른 예는 AskTom 링크 양식 guigui42를 참조하십시오.

+0

어떻게 피하십시오 –

+0

끝에서만 커밋하십시오. 커밋은 자물쇠가 매우 가볍고 독자와 작성자가 서로를 차단하지 않기 때문에 다른 시스템과 마찬가지로 오라클의 리소스를 해제하지 않습니다. 오라클과 작업 할 때 공통된 설계 오류가 필요한 것보다 자주 빈다. –

+0

더 나은 여전히, 물론 커서를 사용하지 마십시오. –

5

빈번한 커밋이 ORA-1555의 원인 일 수 있습니다. 모든 것이 읽기 일관성에 관한 것입니다. 오라클 쿼리를 시작하면 이전 이미지가 기록됩니다. 따라서 귀하의 질의 결과는 평균 거래 시간 (귀하의 큰 거래)에서 발생하는 DML에 의해 변경되지 않습니다. 이전 이미지는 롤백 세그먼트를 사용하여 이전 이미지를 가져온 후에 변경된 데이터 값을 가져옵니다. 큰 트랜잭션에서 커밋하면 oracle에게 트랜잭션의 롤백 데이터를 덮어 쓸 수 있음을 알립니다. 쿼리에 덮어 쓰기 된 롤백 세그먼트의 데이터가 필요한 경우이 오류가 발생합니다. 필요한 롤백 데이터를 덮어 쓰게 될 확률이 적어집니다.

ORA-1555의 일반적인 원인 중 하나는 테이블 자체의 커서, 레코드 루프 및 동일한 테이블을 업데이트/삭제하고 모든 x 레코드를 커밋하는 절차입니다. 엄청나게으로

는 말했다 : 롤백 세그먼트는 전체 트랜잭션을 포함하도록 확장 할 수

관련 문제