테이블 생성/삭제 후 복원 지점 생성에도 불구하고 "테이블 정의가 변경됨"
FLASHBACK TABLE
테이블 변경 직후 복원 지점이 생성되면 복원 지점에 대한 작업이 실패합니다.아래 코드는 특정 단계 사이에 절전 모드가 있는 경우에만 작동합니다.
SQL> DROP TABLE TEST_TABLE;
Table dropped.
SQL> CREATE TABLE TEST_TABLE AS SELECT 1 A FROM DUAL;
Table created.
SQL> ALTER TABLE TEST_TABLE ENABLE ROW MOVEMENT;
Table altered.
SQL> --Sleep required here to prevent error on flashback.
SQL> DROP RESTORE POINT TEST_RESTORE_POINT;
Restore point dropped.
SQL> CREATE RESTORE POINT TEST_RESTORE_POINT;
Restore point created.
SQL> FLASHBACK TABLE TEST_TABLE TO RESTORE POINT TEST_RESTORE_POINT;
FLASHBACK TABLE TEST_TABLE TO RESTORE POINT TEST_RESTORE_POINT
*
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed
지연이 필요한 이유는 무엇이며 이를 제거할 수 있는 방법이 있습니까?
이 이상한 현상은 다음으로 인해 발생할 수 있습니다.SMON
플래시백 쿼리가 의존하는 SCN과 타임스탬프 간의 추적을 담당하는 프로세스입니다.매핑 테이블이 있습니다.SYS.SMON_SCN_TIME
매 5분마다 새 레코드가 삽입되는 곳SMON
.
기간 중 내부적으로FLASHBACK TABLE
명령을 실행합니다.INSERT /*+ APPEND */ into SYS_TEMP_FBT SELECT /*+ FBTSCAN FULL(S) PARALLEL(S, DEFAULT) */ :1, :2, :3, rowid, SYS_FBT_INSDEL FROM "<schema>."TEST_TABLE" as of SCN :4 S
(테이블에 앉기)SYS_TEMP_FBT
이 매핑을 사용하는 동일한 스키마에서 생성됨).
Oracle 10.2까지는 새 개체/변경된 개체에 대한 FLASHBACK 쿼리가 성공하려면 최대 5분까지 기다려야 했습니다.11.1에서TIM_SCN_MAP
매핑을 보다 세분화하기 위해 열이 도입되었습니다.최대 100개의 매핑이 하나의 값에 저장되므로 타임스탬프와 SCN 매핑이 약 3초 정도 정확합니다.
여러 가지 시도를 해봤지만 사용자의 제어 없이 백그라운드 프로세스로 비동기식으로 처리되기 때문에 오류가 발생하지 않도록 3초 정도 기다리는 수밖에 없다고 생각합니다.
언급URL : https://stackoverflow.com/questions/34047160/table-definition-changed-despite-restore-point-creation-after-table-create-alt
'programing' 카테고리의 다른 글
안드로이드 레이아웃 XML에서 앱:srcCompat과 안드로이드:src의 차이점 (0) | 2023.08.07 |
---|---|
키 저장소 정보를 build.gradle에 넣지 않고 APK 서명 (0) | 2023.08.07 |
Spring Junit 응용 프로그램 컨텍스트를 테스트 클래스에서 더럽힌 후 재설정하는 방법은 무엇입니까? (0) | 2023.08.07 |
"모듈은 호환되지 않는 버전의 Kotlin으로 컴파일되었습니다.메타데이터의 이진 버전은 1.5.1이며 예상 버전은 1.1.16입니다. (0) | 2023.08.07 |
이중 포인터를 사용하여 2차원 배열을 표현할 수 없는 이유는 무엇입니까? (0) | 2023.08.07 |