Oracle - Das Hinzufügen von Spalten zu einer Tabelle dauert ewig

8

Ich muss zwei DATE-Spalten zu einer bereits vorhandenen Tabelle hinzufügen. Aber es dauert sehr lange und ich muss den Prozess beenden. Was seltsam ist, ist, dass ich diese Spalten zu den anderen Tabellen in derselben Datenbank hinzufügen konnte. Die meisten dieser Tabellen sind größer als die, bei denen ich sowohl mit Daten als auch mit Spaltenanzahl Probleme habe. Was muss ich tun, um diese neuen Spalten hinzufügen zu können?

    
Mikayil Abdullayev 12.05.2012, 05:18
quelle

2 Antworten

8

Hier habe ich das Problem gelöst. Vorher habe ich einen Vorgabewert für die Spalten genau zum Zeitpunkt des Hinzufügens angegeben. Aber dann fügte ich zuerst die Spalten ohne Standardwerte hinzu. Nachdem die Spalten hinzugefügt wurden, habe ich den Standardwert angegeben und er wurde sofort ausgeführt, ohne dass mehr gewartet wurde. Vielen Dank @Justin Cave für deinen Tipp über den Standardwert. Das war der entscheidende Punkt.

Ich habe keinen Zweifel, dass es mit der Tatsache zusammenhängt, dass bei der Angabe des Vorschlagswerts zum Zeitpunkt des Hinzufügens der Spalte der Standardwert in alle zuvor eingefügten Datensätze geschrieben wird. Wenn es also 5 Millionen Datensätze in der Tabelle gibt, wird diese Tabelle aktualisiert werden, um den Standardwert für die neu hinzugefügte Spalte für alle Zeilen festzulegen. Das Aktualisieren von 5 Millionen Datensätzen ist teuer, wie man vermuten könnte. Wenn jedoch der Standardwert nach dem Hinzufügen einer Spalte festgelegt wird, ist der Wert dieser neuen Spalte in den zuvor eingefügten Zeilen NULL, sodass keine Aktualisierung stattfindet.

    
Mikayil Abdullayev 12.05.2012, 06:33
quelle
2

Ich war auch mit diesem Problem konfrontiert, als ich eine varchar2 (4000) -Spalte ohne Standardwert hinzufügte eine 61K-Zeilentabelle in Oracle 11g. Nach 30 Minuten wurde die Spalte immer noch nicht hinzugefügt.

Ich habe versucht, die Operation abzubrechen und habe sie erneut versucht, aber sie ist immer noch nicht abgeschlossen.

Was funktioniert hat:
Ich habe versucht, stattdessen eine Zahlenspalte hinzuzufügen, die einen Sekundenbruchteil dauerte. Hat es fallen lassen.
Dann habe ich versucht, eine varchar2 (1) Spalte hinzuzufügen, die einen Bruchteil einer Sekunde dauerte. Hat es fallen lassen.
Dann habe ich versucht, eine varchar2 (4000) -Spalte erneut hinzuzufügen, und es dauerte nur einen Bruchteil einer Sekunde.

Silly "Workaround", aber vielleicht funktioniert dies auch für alle anderen, die mit diesem Problem konfrontiert sind.

    
Wouter 19.08.2015 09:32
quelle

Tags und Links