Prérequis

  • A télécharger :
    • SQL Developer 3.x
      • Testé avec : Oracle SQL Developer 3.0.02
    • MySQL Connector/J, l'officiel driver JDBC pour MySQL.
      • Testé avec : Connector/J 5.1.14
  • Déjà installé (et configuré) :
    • Votre base donnée MySQL (contenant les données à migrer)
    • Votre base Oracle (comme destination)

Ajouter Connecteur JDBC MySQL dans SQL Developer

Télécharger le dernier MySQL Connector/J et ajouter la déclaration de ce connecteur (.jar) dans la configuration :

Oracle SQL Developer -> Outils -> Préférences -> Base de données -> Pilotes JDBC tiers

Migration d'une base MySQL vers une base de données Oracle

En sortie d'exportation

C:__sql_migration_mysql2oracle\généré

  • Migration jdbc 5.14.2011-01-12_13-14-35.out (contenant le log des erreurs)
  • Migration jdbc 5.14.2011-01-12_13-14-35.sql (contenant les requêtes SQL de migration)

Notes

Pas de gestion de la valeur par défaut '' (string vide)

Remplacé par du NULL...

Pas d'auto incrément, remplacé en séquences
-- Sous Mysql : matable.id est un champs PRIMARY AUTO_INCREMENT
 
-- En Oracle il est converti en une séquence et un trigger : 
 
-- La séquence
CREATE SEQUENCE  matable_id_SEQ  
  MINVALUE 1 MAXVALUE 999999999999999999999999 INCREMENT BY 1  NOCYCLE ;
 
-- Le triger sur la table pour appeler la séquence auto incrémentée
CREATE OR REPLACE TRIGGER matable_id_TRG BEFORE INSERT OR UPDATE ON matable
FOR EACH ROW
DECLARE 
v_newVal NUMBER(12) := 0;
v_incval NUMBER(12) := 0;
BEGIN
  IF INSERTING AND :new.id IS NULL THEN
    SELECT  matable_id_SEQ.NEXTVAL INTO v_newVal FROM DUAL;
    -- If this is the first time this table have been inserted into (sequence == 1)
    IF v_newVal = 1 THEN 
      --get the max indentity value from the table
      SELECT NVL(max(id),0) INTO v_newVal FROM matable;
      v_newVal := v_newVal + 1;
      --set the sequence to that value
      LOOP
           EXIT WHEN v_incval>=v_newVal;
           SELECT matable_id_SEQ.NEXTVAL INTO v_incval FROM dual;
      END LOOP;
    END IF;
    --used to emulate LAST_INSERT_ID()
    --mysql_utilities.identity := v_newVal; 
   -- assign the value from the sequence to emulate the identity column
   :new.id := v_newVal;
  END IF;
END;
 
/

Que pouvons nous migrer avec SQL Developer ?

A voir les extensions chargées dans le "A propos de" Oracle SQL Developer 3.0.02, je dirais que SQL Developer permet les migrations suivantes :

  • Migrer DB2 vers Oracle avec SQL Developer
  • Migrer Microsoft Access vers Oracle avec SQL Developer
  • Migrer Microsoft SQL Server vers Oracle avec SQL Developer
  • Migrer MySQL vers Oracle avec SQL Developer
  • Migrer Sybase vers Oracle avec SQL Developer
Nom	Identificateur	Version	Statut
Oracle SQL Developer - Migrations Antlr3 Translator	oracle.sqldeveloper.migration.translation.core_antlr3
Oracle SQL Developer - Migrations Application Migration	oracle.sqldeveloper.migration.application
Oracle SQL Developer - Migrations Core	oracle.sqldeveloper.migration
Oracle SQL Developer - Migrations DB2	oracle.sqldeveloper.migration.db2
Oracle SQL Developer - Migrations DB2 Translator	oracle.sqldeveloper.migration.translation.db2
Oracle SQL Developer - Migrations Microsoft Access	oracle.sqldeveloper.migration.msaccess
Oracle SQL Developer - Migrations Microsoft SQL Server	oracle.sqldeveloper.migration.sqlserver
Oracle SQL Developer - Migrations MySQL	oracle.sqldeveloper.migration.mysql
Oracle SQL Developer - Migrations Sybase Adaptive Server	oracle.sqldeveloper.migration.sybase
Oracle SQL Developer - Migrations T-SQL Translator	oracle.sqldeveloper.migration.translation.core
Oracle SQL Developer - Migrations Teradata	oracle.sqldeveloper.migration.teradata
Oracle SQL Developer - Migrations Translation UI	oracle.sqldeveloper.migration.translation.gui

Ressources