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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top