ORA-01466: unable to read data - table definition has changed (데이터를 읽을 수 없음 - 테이블 정의 변경됨)
Oracle의미
과거 시점의 데이터를 읽는 쿼리(Flashback Query, AS OF 또는 consistent read)가 조회한 과거 시점과 현재 사이에 테이블 정의(DDL)가 변경되어 실패했다. Oracle은 현재 정의로 그 시점의 데이터를 안전하게 읽을 수 없다.
원인
Flashback/AS OF 쿼리가 대상으로 하는 타임스탬프 이후에 테이블에 DDL(컬럼 추가/삭제, 타입 변경)이 적용되었다. 또한 클라이언트와 서버 간 시계 차이나 아주 최근(몇 초 전) 과거에 대한 쿼리도 SCN/시간 해상도 때문에 이 오류를 발생시킬 수 있다.
해결 방법
테이블의 DDL 변경 이전 시간/SCN을 대상으로 flashback 쿼리를 실행한다. 가능하면 타임스탬프 대신 정확한 SCN을 사용한다(AS OF SCN). 아주 최근 과거를 조회할 때는 몇 초 더 이전으로 간다. 영구적인 이력 접근이 필요하면 DDL 대신 버전 관리 또는 아카이브 테이블 설계를 고려한다.
같은 데이터베이스의 다른 항목
- ORA-00494enqueue held for too long by 'inst N, osid M' (enqueue가 너무 오래 보유됨)
- ORA-04021timeout occurred while waiting to lock object (객체 락 대기 중 타임아웃 발생)
- ORA-04061existing state of package/procedure has been invalidated (패키지/프로시저의 기존 상태가 무효화됨)
- ORA-08176consistent read failure; rollback data not available (consistent read 실패. rollback 데이터 없음)
- ORA-00020maximum number of processes (N) exceeded (최대 프로세스 수(N) 초과)
- ORA-01113file N needs media recovery
- ORA-02393exceeded call limit on CPU usage