We apologize for untranslated text, you can use the Google Translation button to get an automatic translation of the web page in the language of your choice.

Migration de Derby vers autre SGBD

Jean-Charles FELICITE · on 6/19/15 at 5:23 PM

Bonjour,

Quelqu'un a-t-il effectuer une migration des données de Derby vers un autre SGBD?

#2

Merci Xuan ;-)

Jean-Charles FELICITE · on 6/19/15 at 5:34 PM
#3

Plus sérieusement quelle est la méthode pour effectuer cette migration?

Jean-Charles FELICITE · on 6/19/15 at 5:35 PM
#4

Il faudrait contacter notre directeur des Services Professionnels : xavier.masia@jalios.com

Xuan Tuong LE · on 6/22/15 at 5:29 PM
5 pts
Jean-Charles FELICITE · on 7/7/15 at 10:09 AM

Bonjour à tous,

Petit retour d'expérience pour ceux que cela intéresse, voici ce que j'ai fait pour migrer une base Derby vers Oracle.
Le contexte : Un client avait un JCMS configuré avec Oracle puis lors d'une livraison le custom.prop de dev a été livré avec un paramétrage Derby, il a fallut récupérer les données Derby pour les envoyer dans la base JCMS Oracle déjà existante.

Procédure utilisée pour migrer les données de Derby vers Oracle : J'ai importé tous les éléments des tables qui me semblaient importantes (toutes les tables JCMS ne sont pas à importer obligatoirement) même le champ J_ROW_ID.

Le outils utilisés : Razor pour Derby et Toad pour Oracle.

Les J_ROW_ID ont été importés de Derby vers Oracle
Avant d'envoyer les données, il a fallut vérifier qu'un J_ROW_ID n'était pas déjà utilisé dans la table de destination,
pour cela il a fallut créer une table temporaire dans l'Oracle de recette uniquement
1. Dans Razor, Exporter les données en cliquant sur la table a exporter puis "Export Data"
2. Dans la fenêtre sélectionner XLS(Excel 97-2003) puis Next
3. Dans le champ Timestamp Format rentrer "dd/MM/yyyy HH:mm:ss.SSS" puis Next
4. Enregistrer au format .xls
5. Dans Toad, dupliquer la table à importer ce sera une table temporaire
6. Sur la table dupliquer, cliquez droite et sélectionner "Import Data" puis Next
7. Sélectionner "Excel file" comme type de fichier à importer
8. Sélectionner le fichier .xls précédemment créé puis Next
9. Dans FirstRow taper 2 si la première ligne contient les noms des colonnes
10. Date Ordre doit être égale à "MDY" et cocher la case "Four Digit Years" puis Next jusqu'à la fin
11. Normalement la table s'est correctement alimenter
12. Ouvrir une fenêtre d'editin dans TOAD et taper la commande SQL suivante
select t1.J_ROW_ID
from <Nom_Table_Final> t1, <Nom_Table_Tmp> t2
where t1.J_ROW_ID = t2.J_ROW_ID
Si il n'y a aucun résultat c'est qu'aucun Id n'est en double

Une fois toutes les tables temporaires importer, il a fallut effectuer une vérification sur la valeur MAX des séquences de chaque table importées depuis Derby
SELECT MAX(J_ROW_ID) FROM J_EXTRADBDATA_TMP ==> 82575360
SELECT MAX(J_ROW_ID) FROM J_WFNOTE_TMP ==> 82444298
SELECT MAX(J_ROW_ID) FROM J_PUBFOLLOWER_TMP ==> 81723392

Puis faire une vérification de la séquence en PROD Oracle==> 745296
SELECT HIBERNATE_SEQUENCE.NEXTVAL FROM DUAL

On prend donc la séquence la plus grande+1 à laquelle il a fallut soustraire 745296 ==> Résultat = 81830065
Il a fallut passer le script suivant

ALTER SEQUENCE HIBERNATE_SEQUENCE
INCREMENT BY 81830065;

SELECT HIBERNATE_SEQUENCE.nextval FROM dual;

ALTER SEQUENCE HIBERNATE_SEQUENCE
INCREMENT BY 1;

On doit obtenir 82575361

Puis il a fallut vérifier s'il y avait des doublons dans les différentes tables importées entre les tables finales et les tables temporaires
Seule la table WF_NOTE avait des doublons.

J'ai récupérer les résultats des doublons de la table WF_NOTE dans un script sql
*===================TABLE WF_NOTE==================================*
SELECT wf_tmp.J_ROW_ID, wf_tmp.J_CDATE, wf_tmp.J_MDATE, wf_tmp.J_AUTHOR_ID ,wf_tmp.J_PUBLICATION_ID,
wf_tmp.J_FINAL_VOTE,wf_tmp.J_PREV_PSTATUS,wf_tmp.J_NEW_PSTATUS, wf_tmp.J_NOTE
FROM J_WFNOTE_TMP wf_tmp, J_WFNOTE wf_note WHERE wf_tmp.J_ROW_ID = wf_note.J_ROW_ID;

Les doublons sont envoyés dans le fichier wf_note_tmp_doublon.sql

Il a fallut remplacer les valeurs de "J_ROW_ID" par "hibernate_sequence.NEXTVAL"
Puis pour terminer en executant le script sur la table WF_NOTE

Merci à Alain Mouen-njoh de Jalios pour son aide à distance!

2 pts
Ronan Kerdudou · on 8/2/19 at 6:06 PM

Exemple de commande pour trouver le plus haut index des tables sous MySQL afin de savoir quelle valeur donner à la séquence hibernate lorsque la base cible en utilise une unique commune (par exemple sous PosgreSQL) :

mysql -h 0.0.0.0 -P 3306 -u user --password=password databasename -N -s -e "select table_name from information_schema.columns where table_schema ='community' and column_name='j_row_id';" 2>/dev/null | awk '{print "select max(j_row_id) from "$1";"}' | mysql -h 0.0.0.0 -P 3306 -u user --password=password databasename -N -s 2>/dev/null | sort -n | tail -n 1
0 pts