Beim Hinzufügen einer Spalte zu einer Tabelle mit einem Standardwert und einer Einschränkung ungleich Null. Ist es besser, eine einzelne Anweisung auszuführen oder diese in Schritte aufzuteilen während die Datenbank geladen ist.
ALTER TABLE user ADD country VARCHAR2(4) DEFAULT 'GB' NOT NULL
VERSUS
ALTER TABLE user ADD country VARCHAR2(2)
UPDATE user SET country = 'GB'
COMMIT
ALTER TABLE user MODIFY country DEFAULT 'GB' NOT NULL
Die Leistung hängt von der von Ihnen verwendeten Oracle-Version ab. Sperren werden trotzdem generiert.
Wenn Version <= Oracle 11.1, verhält sich # 1 wie # 2. Es ist sowieso langsam. Beginnend mit Oracle 11.2 hat Oracle eine großartige Optimierung für die erste Anweisung eingeführt (ein Befehl erledigt alles). Sie müssen den Befehl nicht ändern - Oracle verhält sich einfach anders. Der Standardwert wird nur im Datenwörterbuch gespeichert, anstatt jede physische Zeile zu aktualisieren.
Aber ich muss auch sagen, dass ich in der Vergangenheit einige Fehler im Zusammenhang mit dieser Funktion entdeckt habe (in Oracle 11.2.0.1).
Ich denke, diese Probleme wurden in der aktuellen Version 11.2.0.3 behoben, daher kann ich die Verwendung dieser Funktion empfehlen.
Vor einiger Zeit haben wir mögliche Lösungen für das gleiche Problem evaluiert. In unserem Projekt mussten wir alle Indizes in der Tabelle entfernen, Änderungen vornehmen und die Indizes wiederherstellen.
Wenn Ihr System die Tabelle verwenden muss, ist DBMS_Redefinition wirklich Ihre einzige Wahl.