Cosa può causare una modifica di Oracle ROWID?
Domanda
AFAIK ROWID in Oracle rappresenta la posizione fisica di un record nel file di dati appropriato. In quali casi ROWID di un record può cambiare?
Quello che mi è noto è AGGIORNAMENTO sulla tabella partizionata che "sposta". il record in un'altra partizione.
Ci sono altri casi? La maggior parte dei nostri DB sono Oracle 10.
Soluzione
Come hai detto, si verifica ogni volta che la riga viene spostata fisicamente sul disco, ad esempio:
- Esportazione / importazione della tabella
- ALTER TABLE XXXX MOVE
- ALTER TABLE XXXX SHRINK SPACE
- TABELLA FLASHBACK XXXX
- Divisione di una partizione
- Aggiornamento di un valore in modo che passi a una nuova partizione
- Combinazione di due partizioni
Se si trova in una tabella organizzata dall'indice, un aggiornamento alla chiave primaria ti darebbe anche un ROWID diverso.
Altri suggerimenti
+1 @WW
A parte:
ROWID per le tabelle organizzate per indice sono diverse (sono chiamate UROWID, credo), perché la posizione fisica della riga può cambiare durante gli aggiornamenti della tabella (quando i nodi dell'albero si dividono o si uniscono).
Per rendere ancora possibile l'indicizzazione, UROWID include l'ID logico "quot" (la chiave primaria) e il "probabile ID fisico" (un normale ROWID), l'ultimo dei quali potrebbe essere scaduto.
Un altro +1 a WW, ma solo per aggiungere un piccolo extra ...
Se la domanda chiave è se è possibile memorizzare i ROWID per un uso successivo, direi " non farlo " ;.
Puoi usare i ROWID all'interno di una transazione, ad esempio raccogliendo un set di ROWID su cui effettuare le operazioni successive, ma non dovresti mai archiviare i ROWID in una tabella e supporre che ' andrà bene usarlo in un secondo momento.