Migration des colonnes Oracle DATE vers TIMESTAMP avec le fuseau horaire
Bakground:
J'ai un héritage application que je suis en train de travailler sur qui utilise des types DATE pour la plupart du temps de stockage dans la base de données. Je voudrais essayer de mettre à jour certains de ces tableaux afin qu'ils puissent utiliser les zones de temps puisque c'est à l'origine des problèmes avec les utilisateurs des différents domaines où l'db(voir Un ci-dessous). C'est pour Oracle 10g.
Quetions:
1) puis-je migrer de ce "en place". Qu'est ce que je peux convertir comme
DATE_COL = type:DATE => DATE_COL = type:TIMESTAMP
...ou devrai-je utiliser un autre nom de la colonne?
Garder à l'esprit que les données doivent être conservées. Si cela peut être fait en semi-facilement dans un script de migration, il va travailler pour mes fins.
2) ce type de conversion compatible? Nous avons probablement certains scripts ou des rapports qui ont frappé de cette table que nous ne peuvent pas connaître. Nous pouvons probablement faire face avec elle, mais j'aimerais savoir quelle sorte de nid de guêpes je marche dans.
3) Quels sont les pièges que je devrais être à l'affût pour?
Merci,
EDIT:
(en partie en réponse à Gary)
Je suis très bien avec un processus multi-étapes.
1) déplacer les données vers une nouvelle colonne de type Timestamp (caled TEMP) avec une sorte de conversion
2) déposer ancienne colonne (nous allons l'appeler MY_DATE)
3) créer une nouvelle colonne timestamp avec l'ancienne date nom de la colonne (MY_DATE)
4) déplacer les données vers le MY_DATE colonne
5) chute de TEMP colonne
Un Gary a également demandé des éclaircissements sur le fuseau horaire question. J'ai copié ma réponse ci-dessous à garder plus lisible.
Fondamentalement les données seront accessibles à partir de plusieurs endroits différents. Nous devons être en mesure de convertir vers/de l'heure locale de la zone en tant que de besoin. Nous avons également des déclencheurs qui utilisent sysdate pour compliquer encore plus les choses. horodatage avec le temps, la zone soulage beaucoup de cette douleur.
Oh, et merci pour les réponses jusqu'à présent.
source d'informationauteur Jason Tholstrup | 2009-11-03
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement exécuter:
Mais je vous recommande l'ajout d'une colonne de type TIMESTAMP à la table, à l'aide d'une instruction de mise à JOUR pour remplir et déposer l'original de la colonne de la date si vous le souhaitez:
La conversion est rétro - compatible, vous pouvez revenir & de l'autre, comme vous le souhaitez.
Assez Simple à démontrer
De sorte que vous pouvez aller à partir de la date d'horodatage (timestamp ou avec fuseau horaire local) et de retour à nouveau, mais pas pour d'horodatage avec le temps de la zone (c'est à dire où le décalage est conservée).
Vous devez ajouter une autre colonne, et de copier les données existantes sur (avec une valeur par défaut pour le fuseau horaire approprié).
"à l'origine des problèmes avec les utilisateurs des différents domaines où la bd est".
Pourrait aider à être un peu plus précis. Est-il suffisant pour convertir les dates (ou les horodatages) à partir de la base de données de fuseau horaire le fuseau horaire de l'utilisateur lors de l'insertion/modification/interrogé, ou avez-vous réellement besoin de persister le fait que le dossier a été créé à 3:00pm dans un fuseau horaire.