programing

테이블 생성/삭제 후 복원 지점 생성에도 불구하고 "테이블 정의가 변경됨"

oldcodes 2023. 8. 7. 23:03
반응형

테이블 생성/삭제 후 복원 지점 생성에도 불구하고 "테이블 정의가 변경됨"

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

반응형