Bakground: Ich habe eine Legacy-App, die ich arbeite, die DATE-Typen für die meisten Zeit Speicher in der Datenbank verwendet. Ich möchte versuchen, einige dieser Tabellen zu aktualisieren, so dass sie Zeitzonen verwenden können, da dies Probleme mit Benutzern in verschiedenen Bereichen verursacht, von denen die db ist (siehe A unten). Dies ist für Oracle 10g.Oracle DATE Spalten zu TIMESTAMP mit Zeitzone migrieren
Quetions:
1) Kann ich diese "an seinem Platz." Wandern Das kann ich so konvertieren
DATE_COL = type:DATE => DATE_COL = type:TIMESTAMP
... oder muss ich einen anderen Spaltennamen verwenden?
Beachten Sie, dass Daten beibehalten werden müssen. Wenn dies in einem Migrationsskript halb leicht gemacht werden kann, wird es für meine Zwecke funktionieren.
2) Ist diese Art der Konvertierung abwärtskompatibel? Wir haben wahrscheinlich einige Skripte oder Berichte, die diese Tabelle treffen werden, von denen wir vielleicht nichts wissen. Wir können uns wahrscheinlich damit befassen, aber ich würde gerne wissen, in welches Hornissennest ich gehe.
3) Auf welche Fallgruben sollte ich achten?
Danke,
EDIT:
(teilweise als Reaktion auf Gary)
Ich bin fein mit einem mehrstufigen Prozess.
1) Daten in eine neue Spalte Zeitstempel bewegen (caled TEMP) mit irgendeiner Art von Umwandlung 2) fallen alte Spalte (wir es my_date) 3) erstellen mit dem alten Datum Spaltennamen neue Zeitstempel Spalte nennen wollen (my_date) 4) verschieben von Daten in die my_date Spalte 5) fallen TEMP Spalte
A Gary auch Klärung der spezifischen Zeitzone Frage wollte. Ich habe meine Antwort von unten kopiert, um sie lesbarer zu halten.
Grundsätzlich wird auf die Daten aus verschiedenen Bereichen zugegriffen. Wir müssen in der Lage sein, nach Bedarf in die lokale Zeitzone zu konvertieren. Wir haben auch Trigger, die sysdate verwenden, was die Dinge noch komplizierter macht. Zeitstempel mit Zeitzone lindert viele dieser Schmerzen.
Oh, und danke für die Antworten bisher.
Ich denke, was ich möchte geklärt ist, wenn ich die Spalte mit einem Zeitstempel (wie ich in meinem Update beschreiben) ersetzen, werden Berichte und Abfragen, die diese Felder verwenden, an einem Timestamp ersticken? (Dies wird nur gelesen werden) Könnte ich einen Zeitstempel als eine Unterklasse des Datums betrachten oder gibt es genug Orakel-Feinheiten, um dies zu einer sehr schlechten Annahme zu machen? –
'TIMESTAMP' ist ein anderer Datentyp - Berichte und Abfragen müssen auf Auswirkungen überprüft werden. Es ist nicht so, dass die db "würgen" wird, aber dass die Funktionen/etc wahrscheinlich nicht flexibel auf den Datentyp sind, so dass sie entsprechend angepasst werden müssen. –
'TIMESTAMP' zeichnet nicht die Zeitzone auf, die die Frage erfordert. Sie sollten "TIMESTAMP WITH TIME ZONE" oder "TIMESTAMP WITH LOCAL TIME ZONE" verwenden. Siehe http://download.oracle.com/docs/cd/B19306_01/server.102/b14225/ch4datetime.htm. Ersteres speichert die Datums- und Zeitzone in der Spalte, während Letzteres das auf die Datenbank-Zeitzone normierte Datum speichert, aber in die Benutzersitzungszeit umwandelt, wenn der Benutzer die Spalte abfragt. –