Post

snapshot too old 스냅샷 찾을 수 없다(ORA-01555 / ORA-08180)

#naver-import

원문: https://blog.naver.com/qoxmfaktmxj/222849478792

업데이트 전 과거 테이블을 조회 하기 위해선 AS OF TIMESTAMP 등을 쓴다 테이블에 붙여서

예로

select * from EMP_MAS AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL ‘12’ day);

select * from EMP_MAS AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL ‘12’ minute);

그런데 아마도 위 interval day로 설정한 부분은 제목과 같은 오류가 뜰 가능성이 높다.

ORA-01555: 너무 이전 스냅샷:롤백 세그먼트 8 수에 “_SYSSMU8_1235944070$” 이름으로 된 것이 너무 작습니다

또는 ORA-08180: 지정된 시간에 준하여 스냅샷을 찾을 수 없음

이런 경우엔 오라클에서 지원하는 FlashBack 기능을 사용할 수 있다

참고(https://mikyung.net/608)

오라클 버전에 따라 DBMS_FLASHBACK 프로시저 기능을 사용해야 할지 (Oracle Database Release1)

위와 같이 간단한게 AS OF ~ 로 확인할 지 달라진다 (Oracle Database Release2)

하지만, Flashback 기능도 한계가 있다. 일주일 이상은 힘들다고 보면되고,

변경이 잦은 테이블일 경우 더 적다고 보면 된다.

따라서 불상사를 막기 위해 필요하면 데이터 백업을 하거나, 하루마다 스케쥴러를 통하여 ex.Batch 데이터를 다른 DB에 옮겨 저장해 놓는다던가

이력테이블 관리가 필요하다 ex) emp_mas --> emp_mas_his

위 Ora Error에 대해 자세히 정리해 놓은 곳을 참고해보자

출처

http://wiki.gurubee.net/display/DBSTUDY/Snapshot+too+old

[Snapshot too old - [종료]대용량 데이터베이스 스터디 - 개발자, DBA가 함께 만들어가는 구루비 지식창고! 데이터를 읽어 내려가다가 쿼리 SCN이후에 변경된 블록을 만나( 이미 앞서 읽었던 블록을 다시 방문하는 경우 일 수도 있음) 과거 시점으로 롤백한 ‘Read Consistent’ 이미지를 얻으려고 하는데, UNDO 블록이 다른 트랜잭션에 의해 이미 재사돼 필요한 Undo 정보를 얻을 수 없는 경우 커밋된 트랜잭션 테이블 슬롯이 다른 트랜잭션에 의해 재사용돼 커밋 정보를 확인 할 수 없는 경우 일반 적인 사례들…. 일반적으로 알려진 Snapshot Too Old 에러의 원인은 다음과 같다. 아마 이 글을 읽는 분들 대부분이 아래…

wiki.gurubee.net](http://wiki.gurubee.net/display/DBSTUDY/Snapshot+too+old)

댓글