Migrer des applications de bases de données SQL Server vers une base de données Autonomous AI Database

Vous pouvez migrer des énoncés SQL de SQL Server vers Oracle SQL et exécuter ces énoncés sur Autonomous AI Database.

Traduire les instructions SQL Server en SQL Oracle

Vous pouvez traduire les énoncés SQL écrits dans SQL Server vers Oracle SQL et exécuter les énoncés traduits sur Autonomous AI Database.

Utilisez DBMS_CLOUD_MIGRATION.MIGRATE_SQL pour traduire un énoncé SQL Server vers Oracle SQL. Il existe des variantes de procédure et de fonction de DBMS_CLOUD_MIGRATION.MIGRATE_SQL.

Migrer l'énoncé SQL Server vers Oracle SQL avec la procédure MIGRATE_SQL

L'exemple suivant accepte l'énoncé SQL écrit dans SQL Server en tant qu'entrée, traduit l'énoncé dans Oracle SQL, affecte l'énoncé SQL traduit à output_sql_result et imprime le résultat :

SET SERVEROUTPUT ON
   declare output_sql_result CLOB;
BEGIN
  DBMS_CLOUD_MIGRATION.MIGRATE_SQL(      
    original_sql => 'CREATE TABLE [dbo].[movie] ([film_id] [int], [title] [varchar](20));',
    output_sql   => output_sql_result,
    source_db    => 'SQLSERVER');
    DBMS_OUTPUT.PUT_LINE (output_sql_result);
END;        
/

Output
–-------------------------------------------------------------
CREATE TABLE movie (film_id NUMBER(10), title VARCHAR2(20));

Le paramètre original_sql spécifie l'énoncé SQL SQL Server.

Le paramètre output_sql stocke l'énoncé SQL traduit.

Le paramètre source_db spécifie la base de données SQL Server.

Pour plus d'informations, voir MIGRATE_SQL Procédure et fonction.

Migrer l'énoncé SQL Server vers Oracle SQL à l'aide de la fonction MIGRATE_SQL

L'exemple suivant présente la fonction DBMS_CLOUD_MIGRATION.MIGRATE_SQL dans un énoncé SELECT. L'entrée de la fonction est une instruction SQL Server et la fonction retourne l'instruction traduite dans Oracle SQL :

SELECT DBMS_CLOUD_MIGRATION.MIGRATE_SQL(
     'CREATE TABLE [dbo].[movie] ([film_id] [int], [title] [varchar](20));','SQLSERVER') AS OUTPUT 
     FROM DUAL;

OUTPUT
------------------------------------------------------------------------------
CREATE TABLE movie (film_id NUMBER(10), title VARCHAR2(20));

Utilisez le paramètre SQLSERVER pour traduire à partir de Microsoft SQL Server.

Pour plus d'informations, voir MIGRATE_SQL Procédure et fonction.

Notes pour l'exécution de DBMS_CLOUD_MIGRATION.MIGRATE_SQL :

Exécuter les énoncés SQL Server dans Autonomous AI Database

Vous pouvez traduire et exécuter des énoncés SQL Server de manière interactive dans votre base de données Autonomous AI Database.

Utilisez la procédure ENABLE_TRANSLATION pour activer la traduction en temps réel des énoncés SQL écrits dans SQL Server. Après avoir activé la traduction dans une session, les énoncés SQL non Oracle sont automatiquement traduits et exécutés en tant qu'énoncés SQL Oracle, et vous pouvez voir les résultats.

Par exemple, après avoir activé la traduction en exécutant ENABLE_TRANSLATION, vous pouvez effectuer de manière interactive les opérations suivantes dans une session :
  • Créez les tables. Par exemple, créez les tables MOVIE et INVENTORY.

  • Insérer les données dans les tables.

  • tables d'interrogation;

  • Effectuez des opérations JOIN sur les tables. Par exemple, vous pouvez effectuer une jointure externe gauche sur des tables.

Pour activer la traduction avec des instructions SQL Server et exécuter des commandes :

  1. Connectez-vous à votre base de données autonome avec un client SQL.

    Pour plus d'informations, voir Se connecter à Autonomous Database.

    Note

    DBMS_CLOUD_MIGRATION.ENABLE_TRANSLATION n'est pas pris en charge dans Database Actions et n'est pas pris en charge avec le service Oracle APEX.
  2. Exécutez DBMS_CLOUD_MIGRATION.ENABLE_TRANSLATION pour activer la traduction SQL en temps réel dans votre session. Utilisez le paramètre SQLSERVER pour traduire à partir de Microsoft SQL Server.
    BEGIN
     DBMS_CLOUD_MIGRATION.ENABLE_TRANSLATION('SQLSERVER');
    END;
    /

    Utilisez l'interrogation suivante pour vérifier la langue de traduction SQL de votre session :

    SELECT SYS_CONTEXT('USERENV','SQL_TRANSLATION_PROFILE_NAME') FROM DUAL;

    Pour plus d'informations, voir ProcédureENABLE_TRANSLATION.

  3. Entrez les instructions SQL SQL Server. Exemple :
    CREATE TABLE [dbo].[movie] ([film_id] [int], [title] [varchar](20));
    
    Table [dbo].[movie] created.

    Cela traduit et exécute automatiquement l'énoncé SQL Server CREATE TABLE.

    Vous pouvez effectuer une vérification à l'aide de la commande DESC. Exemple :
    DESC movie;
    
    Name        Null?     Type          
    -------     -----     ------------- 
    FILM_ID               NUMBER(38)    
    TITLE                 VARCHAR2(255)
    La table MOVIE est créée et les types de données de chacune des colonnes sont automatiquement convertis en types de données Oracle.
  4. Insérez des données dans la table MOVIE. Exemple :
    INSERT INTO movie([film_id], [title]) VALUES (123, 'Tangled');
    
    1 row inserted.
    
    INSERT INTO movie([film_id], [title]) VALUES (234, 'Frozen');
    
    1 row inserted.

    Vérifiez l'insertion des données en interrogeant la table MOVIE. Exemple :

    SELECT * FROM movie;
    
    FILM_ID  TITLE
    –------- –--------
    123	 Tangled
    234	 Frozen
    
  5. Créez une table INVENTORY :
    CREATE TABLE [dbo].[inventory] ([film_id] [int], [title] [inventory_id](20));
    
    
    Table INVENTORY created.
    Vous pouvez vérifier cette étape à l'aide de la commande DESC. Exemple :
    DESC inventory;
    
    Name        Null?     Type          
    -------     -----     ------------- 
    FILM_ID               NUMBER(38)    
    INVENTORY_ID          NUMBER(38)
    La table INVENTORY est créée et les types de données de chacune des colonnes sont automatiquement convertis en types de données Oracle.
  6. Insérez des données dans la table INVENTORY. Exemple :
    INSERT INTO inventory([film_id], [inventory_id]) VALUES (123, 223);
    
    1 row inserted.
    
    INSERT INTO inventory(film_id, inventory_id) VALUES (234, 334);
    
    1 row inserted.

    Vérifiez l'insertion des données en interrogeant INVENTORY. Exemple :

    SELECT * FROM inventory;
    
    FILM_ID  INVENTORY_ID
    –------- –------------
    123	 223
    234	 334
  7. Effectuez une jointure externe gauche sur les tables MOVIE et INVENTORY :
    SELECT m.film_id, m.title, inventory.inventory_id 
        FROM movie AS m LEFT JOIN inventory 
        ON inventory.film_id = m.film_id;
    
      FILM_ID  TITLE       INVENTORY_ID
    ---------- ---------- ------------
           234 Frozen      334
           123 Tangled     223
    

    Cet exemple effectue une opération LEFT OUTER JOIN sur les tables movie et inventory. L'interrogation est d'abord traduite en SQL Oracle, puis exécutée dans votre session.

  8. Utilisez la procédure DBMS_CLOUD_MIGRATION.DISABLE_TRANSLATION pour désactiver la traduction en temps réel du langage SQL pour votre session.
    BEGIN
     DBMS_CLOUD_MIGRATION.DISABLE_TRANSLATION;
    END;
    /

    Cela renvoie une erreur si la traduction du langage SQL n'est pas activée pour votre session.

    Voir ProcédureDISABLE_TRANSLATION

Vous pouvez interroger la vue V$MAPPED_SQL pour lister les énoncés SQL Server traduits et mappés en mémoire avec les énoncés SQL Oracle.

Exemple :

SELECT v.* 
    FROM v$mapped_sql v, dba_objects o
    WHERE v.sql_translation_profile_id = o.object_id
        AND o.object_name = 'SQLSERVER'
        AND o.object_type = 'TRANSLATION PROFILE';
Pour plus d'informations, voir V$MAPPED_SQL.

Migrer des fichiers SQL Server vers Oracle SQL

Vous pouvez migrer un fichier contenant des instructions SQL Server vers un fichier contenant des instructions SQL Oracle.

La procédure DBMS_CLOUD_MIGRATION.MIGRATE_FILE traduit les énoncés SQL dans un fichier SQL Server du service de stockage d'objets et génère un nouveau fichier contenant Oracle SQL.

Vous devez au préalable charger un ou plusieurs fichiers SQL Server avec l'extension .sql dans un emplacement du stockage d'objets. Les exemples suivants utilisent le fichier mssqltest.sql qui est chargé dans le stockage d'objets. Pour plus d'informations, voir Mettre des données dans le stockage d'objets.

Pour migrer des fichiers SQL Server vers Oracle SQL :

  1. Connectez-vous à votre instance de base de données Autonomous AI Database.

    Pour plus d'informations, voir Se connecter à Autonomous Database.

  2. Configurez l'accès au stockage d'objets en nuage à l'aide d'un principal de ressource ou en créant un objet de données d'identification.

    Cette étape permet d'accéder au stockage d'objets en nuage où vous placez les fichiers que vous migrez :

  3. Facultativement, vous pouvez lister les fichiers dans le service de stockage d'objets. Exemple :
    VAR function_list CLOB;
    SELECT object_name FROM DBMS_CLOUD.LIST_OBJECTS
       (credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => 'https://objectstorage.region.oraclecloud.com/n/namespace/b/bucket/o/files');
    
    OBJECT_NAME
    ---------------------
    mssqltest.sql
    

    Sinon, si vous créez des données d'identification au lieu du principal de ressource, OCI$RESOURCE_PRINCIPAL, spécifiez le nom des données d'identification dans le paramètre credential_name.

    Pour plus d'informations, voir Fonction LIST_OBJECTS.

  4. Exécutez DBMS_CLOUD_MIGRATION.MIGRATE_FILE pour migrer le fichier SQL Server vers Oracle SQL :
    BEGIN
     DBMS_CLOUD_MIGRATION.MIGRATE_FILE (
         credential_name => 'OCI$RESOURCE_PRINCIPAL',
         location_uri    => 'https://objectstorage.region.oraclecloud.com/n/namespace/b/bucket/o/files/mssqltest.sql',
         source_db       => 'SQLSERVER'
        );
    END;
    /

    Le paramètre credential_name spécifie les données d'identification permettant d'accéder à l'URI du service de stockage d'objets en nuage. L'utilisateur qui exécute DBMS_CLOUD_MIGRATION.MIGRATE_FILE doit disposer du privilège EXECUTE pour l'objet de données d'identification utilisé pour accéder à l'URI du service de stockage d'objets. Autrement dit, les données d'identification que vous spécifiez avec le paramètre credential_name. Si vous utilisez des données d'identification au lieu d'un principal de ressource, spécifiez leur nom dans le paramètre credential_name.

    Le paramètre location_uri spécifie l'URI du fichier source. Le format de l'URI dépend du service de stockage d'objets en nuage que vous utilisez. Pour plus d'informations, voir Formats d'URI DBMS_CLOUD.

    Le paramètre source_db spécifie SQL Server comme langue de base de données. Utilisez la valeur SQLSERVER pour traduire les fichiers SQL Server vers Oracle SQL.

    L'exécution de cette commande convertit le fichier SQL Server mssqltest.sql en SQL Oracle et génère un nouveau fichier nommé original_filename_oracle.sql.

    Pour cet exemple, l'exécution de DBMS_CLOUD_MIGRATION.MIGRATE_FILE avec le fichier d'entrée mssqltest.sql génère mssqltest_oracle.sql. Après l'étape de traduction, la procédure charge mssqltest_oracle.sql dans le stockage d'objets.

    Facultativement, utilisez le paramètre target_uri pour spécifier l'emplacement où le fichier traduit est chargé. La valeur par défaut de ce paramètre est NULL, ce qui signifie que le fichier traduit est chargé au même emplacement que celui spécifié dans le paramètre location_uri.

    Pour plus d'informations, voir ProcédureMIGRATE_FILE.

  5. Vérifiez que le fichier de sortie a été généré.
    SELECT object_name FROM DBMS_CLOUD.LIST_OBJECTS (
        credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => 'https://objectstorage.region.oraclecloud.com/n/namespace/b/bucket/o/files');
    
    OBJECT_NAME
    ---------------------
    mssqltest.sql
    mssqltest_oracle.sql
    

    Sinon, si vous créez des données d'identification au lieu du principal de ressource, OCI$RESOURCE_PRINCIPAL, spécifiez le nom des données d'identification dans le paramètre credential_name.

    Pour plus d'informations, voir Fonction LIST_OBJECTS.

Exécutez l'interrogation suivante pour voir le contenu du fichier mssqltest_oracle.sql :

SELECT UTL_RAW.CAST_TO_VARCHAR2 (DBMS_CLOUD.GET_OBJECT(
   credential_name => 'OCI$RESOURCE_PRINCIPAL', 
   object_uri => 'https://objectstorage.region.oraclecloud.com/n/namespace/b/bucket/o/files')) 
FROM dual;

UTL_RAW.CAST_TO_VARCHAR2(DBMS_CLOUD.GET_OBJECT(CREDENTIAL_NAME=>'CRED1',OBJECT_U
--------------------------------------------------------------------------------
DROP TABLE movie;
CREATE TABLE movie (film_id NUMBER(10), title VARCHAR2(20));
 
INSERT INTO movie (film_id, title) VALUES (123, 'Tangled');
INSERT INTO movie (film_id, title) VALUES (234, 'Frozen');
 
CREATE TABLE inventory(film_id NUMBER(10), inventory_id NUMBER(10));
INSERT INTO inventory(film_id, inventory_id) VALUES (123, 223);
INSERT INTO inventory(film_id, inventory_id) VALUES (234, 334);
 
SELECT * FROM movie;
SELECT * FROM inventory;
SELECT m.film_id, m.title, inventory_id FROM movie m LEFT JOIN inventory ON inventory.film_id = m.film_id;

Sinon, si vous créez des données d'identification au lieu du principal de ressource, OCI$RESOURCE_PRINCIPAL, spécifiez le nom des données d'identification dans le paramètre credential_name.

Pour plus d'informations, voir GET_OBJECT Procédure et fonction.

Limites pour la migration et la traduction des énoncés SQL Server vers Oracle SQL

Cette section résume les limitations pour la migration des instructions SQL de SQL Server vers Oracle SQL.

La liste suivante de fonctions SQL Server n'est pas prise en charge lors de la migration de la version de base de données SQL Server vers Oracle SQL :
  • ISJSON()

  • OPENJSON()