Frage

AFAIK ROWID in Oracle stellt physischen Standort eines Datensatzes in entsprechenden Daten-Datei. In welchen Fällen ROWID eines Datensatzes kann sich ändern?

Die einzige mir bekannte ist UPDATE auf partitionierten Tabelle, dass „bewegt“ die Aufzeichnung auf eine andere Partition.

Gibt es weitere Fälle? Die meisten unserer DBs sind Oracle 10.

War es hilfreich?

Lösung

Wie Sie gesagt haben, kommt es zu jeder Zeit die Zeile physisch auf der Platte bewegt wird, wie zum Beispiel:

  • Export / Import der Tabelle
  • ALTER TABLE XXXX MOVE
  • ALTER TABLE XXXX SHRINK SPACE
  • RÜCKBLICK TABELLE XXXX
  • Die Aufteilung einer Partition
  • Wert wird aktualisiert, so dass er sich bewegt, um eine neue Partition
  • Die Kombination von zwei Partitionen

Wenn in einem Index organisiert Tabelle ist, dann ein Update auf den Primärschlüssel würde Ihnen eine andere ROWID als auch.

Andere Tipps

1 @WW

Als Nebenwirkung:

ROWID für Index organisiert Tabellen unterschiedlich sind (sie sind UROWID genannt, glaube ich), weil die physische Position der Zeile während Aktualisierungen der Tabelle ändern kann (wenn Baumknoten aufgeteilt oder miteinander verbunden sind).

Um die Indizierung noch möglich zu machen, die UROWID umfasst die „logische id“ (der Primärschlüssel) und den „wahrscheinlich physischen id“ (eine regelmäßige ROWID), von denen die letztere abgelaufen sein kann.

Ein weiterer +1 bis WW, sondern nur hinzufügen, ein wenig mehr ...

Wenn die treibende Frage ist, ob Sie ROWIDs für die spätere Verwendung speichern kann, würde ich sagen „tun es nicht“.

Sie sind in Ordnung ROWIDs innerhalb einer Transaktion verwenden - zum Beispiel eine Reihe von ROWIDs, auf dem Sammeln eines nachfolgenden Operationen durchzuführen - aber Sie sollten nie speichern die ROWIDs in einer Tabelle und annehmen, dass sie‘ bezüglich das gehen zu einem späteren Zeitpunkt zu verwenden, um in Ordnung sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top