Question

AFAIK ROWID dans Oracle représente l'emplacement physique d'un enregistrement dans le fichier de données approprié. Dans quels cas le ROWID d’un enregistrement peut changer?

Celui que je connais est UPDATE sur une table partitionnée qui "se déplace". l'enregistrement sur une autre partition.

Y a-t-il un autre cas? La plupart de nos bases de données sont Oracle 10.

Était-ce utile?

La solution

Comme vous l'avez dit, cela se produit chaque fois que la ligne est physiquement déplacée sur le disque, par exemple:

  • Exportation / importation de la table
  • ALTER TABLE XXXX DEPLACER
  • ALTER TABLE XXXX SHRINK SPACE
  • TABLE FLASHBACK XXXX
  • Division d'une partition
  • Mise à jour d'une valeur afin qu'elle passe sur une nouvelle partition
  • Combinaison de deux partitions

Si se trouve dans une table organisée par index, une mise à jour de la clé primaire vous donnera également un autre ROWID.

Autres conseils

+1 @WW

En aparté:

Les tables organisées par index ROWID sont différentes (elles s'appellent UROWID, je crois), car l'emplacement physique de la ligne peut changer lors des mises à jour de la table (lorsque des noeuds d'arborescence sont scindés ou sont joints).

Pour que l'indexation reste possible, UROWID inclut l'identificateur "id logique". (la clé primaire) et "l'identité physique probable" (un ROWID normal), ce dernier pouvant être expiré.

Encore un +1 pour WW, mais juste pour ajouter un petit extra ...

Si la question essentielle est de savoir si vous pouvez stocker des ROWID pour une utilisation ultérieure, je dirais "ne le faites pas".

Vous pouvez utiliser des ROWID dans une transaction - par exemple, collecter un ensemble de ROWID sur lesquels effectuer des opérations ultérieures - mais vous devez ne jamais stocker les ROWID dans une table et les assumer " re va être ok à utiliser à une date ultérieure.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top