2015-12-02 11 views
13

FLASHBACK TABLE in un punto di ripristino non riuscito quando il punto di ripristino è stato creato immediatamente dopo una modifica della tabella. Il codice seguente funziona solo se c'è un sonno tra alcuni passaggi."definizione della tabella modificata" nonostante la creazione del punto di ripristino dopo la creazione/modifica della tabella

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 

Perché è necessario un ritardo ed esiste un modo per eliminarlo?

+0

Non hai nessun 'PARALLEL = VERO' in nessun luogo, vero? –

+0

@MikeNakis Questo problema è riproducibile quando viene eseguito un passaggio alla volta. Ha fallito per me sull'ultima versione, 12.1.0.2. –

risposta

7

Questa stranezza potrebbe essere causata dal processo SMON che è responsabile di tenere traccia tra SCN e data/ora su cui si basa la query flashback. C'è una tabella di mappatura SYS.SMON_SCN_TIME dove ogni 5 minuti viene inserito un nuovo record SMON.

Internamente durante il FLASHBACK TABLE esegue un comando 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 (nota una tabella SYS_TEMP_FBT viene creata nello stesso schema) che utilizza questa mappatura.

Fino a Oracle 10.2 era necessario attendere fino a 5 minuti interi per riuscire con la query FLASHBACK su un oggetto nuovo/modificato. In 11.1 è stata introdotta la colonna TIM_SCN_MAP per rendere la mappatura più fine. Il massimo di 100 mappature è memorizzato in un valore che rende approssimativamente 3 secondi di precisione nel timestamp alla mappatura SCN.

Ho provato molte cose ma non penso che si possa fare nulla a riguardo, ma attendere circa 3 secondi per evitare l'errore perché questo viene gestito in modo asincrono dal processo in background senza alcun controllo da parte dell'utente.

+0

Questo ha senso. Ho trovato in modo indipendente che il tempo di attesa richiesto era di circa 3 secondi. –

Problemi correlati