Eseguire la migrazione delle applicazioni dai database MySQL ad Autonomous Database

È possibile eseguire la migrazione delle istruzioni SQL da MySQL a Oracle SQL ed eseguire le istruzioni su Autonomous Database.

Tradurre le istruzioni MySQL in Oracle SQL

È possibile tradurre le istruzioni SQL scritte in MySQL in Oracle SQL ed eseguire le istruzioni tradotte in Autonomous Database.

Utilizzare DBMS_CLOUD_MIGRATION.MIGRATE_SQL per tradurre un'istruzione MySQL in Oracle SQL. Esistono varianti di procedura e funzione di DBMS_CLOUD_MIGRATION.MIGRATE_SQL.

Procedura di migrazione dell'istruzione MySQL a Oracle SQL con MIGRATE_SQL

L'esempio seguente accetta l'istruzione SQL scritta in MySQL come input, converte l'istruzione in Oracle SQL, assegna l'istruzione SQL tradotta a output_sql_result e stampa il risultato:

SET SERVEROUTPUT ON
   declare output_sql_result CLOB;
BEGIN
  DBMS_CLOUD_MIGRATION.MIGRATE_SQL(      
    original_sql => 'CREATE TABLE movie (movie_id INT, title VARCHAR(255));',
    output_sql   => output_sql_result,
    source_db    => 'MYSQL');
    DBMS_OUTPUT.PUT_LINE (output_sql_result);
END;        
/

OUTPUT
–-------------------------------------------------------------
CREATE TABLE movie (movie_id NUMBER(10), title VARCHAR2(255));

Il parametro original_sql specifica l'istruzione MySQL.

Il parametro output_sql memorizza l'istruzione SQL tradotta.

Il parametro source_db specifica MySQL come nome del database.

Per ulteriori informazioni, vedere MIGRATE_SQL Procedura e funzione.

Eseguire la migrazione dell'istruzione MySQL in Oracle SQL con la funzione MIGRATE_SQL

L'esempio seguente mostra la funzione DBMS_CLOUD_MIGRATION.MIGRATE_SQL all'interno di un'istruzione SELECT. L'input della funzione è un'istruzione MySQL e la funzione restituisce l'istruzione tradotta in Oracle SQL:

SELECT DBMS_CLOUD_MIGRATION.MIGRATE_SQL(
     'CREATE TABLE movie (film_id INT, title VARCHAR(255));','MYSQL') AS output FROM DUAL;

OUTPUT
------------------------------------------------------------------------------
create table cars (brand VARCHAR2(255), model VARCHAR2(255);

Per ulteriori informazioni, vedere MIGRATE_SQL Procedura e funzione.

Note per l'esecuzione di DBMS_CLOUD_MIGRATION.MIGRATE_SQL:

  • È possibile che si verifichi un errore durante la traduzione se l'istruzione SQL di input non è supportata in Oracle SQL. Per ulteriori informazioni, vedere Limitazioni per la migrazione e la traduzione delle istruzioni MySQL in Oracle SQL.

  • I sottoprogrammi DBMS_CLOUD_MIGRATION.MIGRATE_SQL accettano solo un'istruzione SQL come input. Pertanto, è possibile tradurre solo una singola istruzione SQL per chiamata.

Eseguire le istruzioni MySQL in Autonomous Database

Puoi tradurre ed eseguire in modo interattivo le istruzioni MySQL nell'Autonomous Database.

Utilizzare la procedura ENABLE_TRANSLATION per abilitare la traduzione in tempo reale delle istruzioni SQL scritte in MySQL. Dopo aver abilitato la traduzione in una sessione, le istruzioni MySQL vengono tradotte ed eseguite automaticamente come istruzioni Oracle SQL e i risultati possono essere visualizzati.

Ad esempio, dopo aver abilitato la traduzione mediante l'esecuzione di ENABLE_TRANSLATION, è possibile eseguire in modo interattivo le seguenti operazioni in una sessione:
  • Creare le tabelle. Ad esempio, creare le tabelle MOVIE e INVENTORY.

  • Inserire i dati nelle tabelle.

  • Tabelle di query.

  • Eseguire operazioni JOIN sulle tabelle. Ad esempio, è possibile eseguire un outer join sinistro sulle tabelle.

Per abilitare la traduzione con MySQL ed eseguire i comandi:

  1. Connettersi ad Autonomous Database utilizzando un client SQL.

    See Connect to Autonomous Database for more information.

    Nota

    DBMS_CLOUD_MIGRATION.ENABLE_TRANSLATION non è supportato in Database Actions e non è supportato in Oracle APEX Service.
  2. Eseguire DBMS_CLOUD_MIGRATION.ENABLE_TRANSLATION per abilitare la traduzione SQL in tempo reale nella sessione. Utilizzare il parametro MYSQL per eseguire la conversione da MySQL.
    BEGIN
     DBMS_CLOUD_MIGRATION.ENABLE_TRANSLATION('MYSQL');
    END;
    /

    Utilizzare la query seguente per verificare la lingua di traduzione SQL per la sessione:

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

    Per ulteriori informazioni, vedere ENABLE_TRANSLATION Procedure.

  3. Immettere le istruzioni MySQL. Ad esempio:
    CREATE TABLE movie (film_id int, title varchar(255));
    
    Table MOVIE created.

    Ciò traduce ed esegue automaticamente l'istruzione MySQL CREATE TABLE.

    È possibile verificare utilizzando il comando DESC. Ad esempio:
    DESC movie;
    
    Name        Null?     Type          
    -------     -----     ------------- 
    FILM_ID               NUMBER(38)    
    TITLE                 VARCHAR2(255)
    Viene creata la tabella MOVIE e i tipi di dati di ciascuna colonna vengono convertiti automaticamente nei tipi di dati Oracle.

    È possibile che si verifichi un errore durante la traduzione se l'istruzione SQL di input non è supportata. Per ulteriori informazioni, vedere Limitazioni per la migrazione e la traduzione delle istruzioni MySQL in Oracle SQL.

  4. Inserire i dati nella tabella MOVIE. Ad esempio:
    INSERT INTO movie (film_id, title) VALUES (123, 'Tangled');
    
    1 row inserted.
    
    INSERT INTO movie (film_id, title) VALUES (234, 'Frozen');
    
    1 row inserted.

    Verificare l'inserimento dei dati eseguendo una query sulla tabella MOVIE. Ad esempio:

    SELECT * FROM movie;
    
    FILM_ID  TITLE
    –------- –--------
    123	 Tangled
    234	 Frozen
    
  5. Creare una tabella INVENTORY:
    CREATE TABLE inventory (film_id int, inventory_id int);
    
    Table INVENTORY created.
    È possibile verificare questo passaggio con il comando DESC. Ad esempio:
    DESC inventory;
    
    Name        Null?     Type          
    -------     -----     ------------- 
    FILM_ID               NUMBER(38)    
    INVENTORY_ID          NUMBER(38)
    Viene creata la tabella INVENTORY e i tipi di dati di ciascuna colonna vengono convertiti automaticamente nei tipi di dati Oracle.
  6. Inserire i dati nella tabella INVENTORY. Ad esempio:
    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.

    Verificare l'inserimento dei dati eseguendo una query su INVENTORY. Ad esempio:

    SELECT * FROM inventory;
    
    FILM_ID  INVENTORY_ID
    –------- –------------
    123	 223
    234	 334
  7. Eseguire un outer join sinistro sulle tabelle MOVIE e INVENTORY:
    SELECT m.film_id, m.title, 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
    

    In questo esempio viene eseguito un valore LEFT OUTER JOIN nelle tabelle movie e inventory. La parola chiave AS per gli alias di tabella nella clausola FROM non è supportata in Oracle SQL. La query viene prima tradotta in Oracle SQL e quindi eseguita nella sessione.

  8. Utilizzare la procedura DBMS_CLOUD_MIGRATION.DISABLE_TRANSLATION per disabilitare la traduzione della lingua SQL in tempo reale per la sessione.
    BEGIN
     DBMS_CLOUD_MIGRATION.DISABLE_TRANSLATION;
    END;
    /

    Restituisce un errore se la traduzione della lingua SQL non è abilitata per la sessione.

    Vedere DISABLE_TRANSLATION Procedura

È possibile eseguire una query sulla vista V$MAPPED_SQL per elencare le istruzioni MySQL tradotte e mappate in memoria alle istruzioni Oracle SQL.

Ad esempio:

SELECT v.* 
    FROM v$mapped_sql v, dba_objects o
    WHERE v.sql_translation_profile_id = o.object_id
        AND o.object_name = 'MYSQL'
        AND o.object_type = 'TRANSLATION PROFILE';
Per ulteriori informazioni, vedere V$MAPPED_SQL.

Esegui migrazione file MySQL in Oracle SQL

È possibile eseguire la migrazione di un file contenente istruzioni MySQL in un file contenente istruzioni Oracle SQL.

La procedura DBMS_CLOUD_MIGRATION.MIGRATE_FILE converte le istruzioni SQL in un file MySQL nello storage degli oggetti e genera un nuovo file contenente Oracle SQL.

Come prerequisito, caricare uno o più file MySQL con estensione .sql in una posizione nello storage degli oggetti. Negli esempi riportati di seguito viene utilizzato il file mysqltest.sql caricato nello storage degli oggetti. Per ulteriori informazioni, vedere Mettere i dati nello storage degli oggetti.

Per eseguire la migrazione dei file MySQL in Oracle SQL:

  1. Connettersi all'istanza di Autonomous Database.

    See Connect to Autonomous Database for more information.

  2. Configurare l'accesso allo storage degli oggetti cloud utilizzando un principal risorsa o creando un oggetto credenziale.

    Questo passo fornisce l'accesso allo storage degli oggetti cloud in cui vengono inseriti i file di cui si sta eseguendo la migrazione:

  3. Facoltativamente, puoi elencare i file nello storage degli oggetti. Ad esempio:
    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
    ---------------------
    mysqltest.sql

    In alternativa, se si crea una credenziale anziché il principal risorsa, OCI$RESOURCE_PRINCIPAL, specificare il nome della credenziale nel parametro credential_name.

    Per ulteriori informazioni, vedere LIST_OBJECTS Function.

  4. Eseguire DBMS_CLOUD_MIGRATION.MIGRATE_FILE per eseguire la migrazione del file MySQL in 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/mysqltest.sql',
         source_db       => 'MYSQL'
        );
    END;
    /

    Il parametro credential_name specifica la credenziale per accedere all'URI dello storage degli oggetti cloud. L'utente che esegue DBMS_CLOUD_MIGRATION.MIGRATE_FILE deve disporre del privilegio EXECUTE per l'oggetto credenziale utilizzato per accedere all'URI dello storage degli oggetti. Cioè, le credenziali specificate con il parametro credential_name. Se si utilizza una credenziale anziché un principal risorsa, specificare il nome della credenziale nel parametro credential_name.

    Il parametro location_uri specifica l'URI del file di origine. Il formato dell'URI dipende dal servizio di storage degli oggetti cloud in uso. Per ulteriori informazioni, vedere DBMS_CLOUD Formati URI.

    Il parametro source_db specifica MySQL come lingua del database. Utilizzare il valore MYSQL per convertire i file MySQL in Oracle SQL.

    L'esecuzione di questo comando converte il file MySQL mysqltest.sql in Oracle SQL e genera un nuovo file denominato original_filename_oracle.sql.

    Per questo esempio, l'esecuzione di DBMS_CLOUD_MIGRATION.MIGRATE_FILE con il file di input mysqltest.sql genera mysqltest_oracle.sql. Dopo il passo di traduzione, la procedura carica mysqltest_oracle.sql nello storage degli oggetti.

    Facoltativamente, utilizzare il parametro target_uri per specificare la posizione in cui viene caricato il file tradotto. Il valore predefinito per questo parametro è NULL, ovvero il file tradotto viene caricato nella stessa posizione specificata nel parametro location_uri.

    Per ulteriori informazioni, vedere MIGRATE_FILE Procedure.

  5. Verificare che il file di output sia stato generato.
    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
    ---------------------
    mysqltest.sql
    mysqltest_oracle.sql

    In alternativa, se si crea una credenziale anziché il principal risorsa, OCI$RESOURCE_PRINCIPAL, specificare il nome della credenziale nel parametro credential_name.

    Per ulteriori informazioni, vedere LIST_OBJECTS Function.

Eseguire la query seguente per visualizzare il contenuto del file mysqltest_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;
DROP TABLE inventory;
CREATE TABLE movie (film_id NUMBER(10), title VARCHAR2(255));
INSERT INTO movie (film_id, title) VALUES (123, 'Tangled');
INSERT INTO movie (film_id, title) VALUES (234, 'Frozen');
CREATE TABLE movie (film_id NUMBER(10), inventory_id NUMBER(10));
INSERT INTO movie (film_id, inventory_id) VALUES (123, 223);
INSERT INTO inventory (film_id, inventory_id) VALUES (234, 334);
SELECT * FROM movie;

In alternativa, se si crea una credenziale anziché il principal risorsa, OCI$RESOURCE_PRINCIPAL, specificare il nome della credenziale nel parametro credential_name.

Per ulteriori informazioni, vedere GET_OBJECT Procedura e funzione.

Limitazioni per la migrazione e la traduzione delle istruzioni MySQL a Oracle SQL

Questa sezione riassume le limitazioni per la migrazione delle istruzioni SQL da MySQL a Oracle SQL.

Tenere presenti le limitazioni riportate di seguito durante la migrazione dal sapore del database MySQL a Oracle SQL.

  • Variabili globali definite dall'utente: le variabili globali definite dall'utente MySQL dichiarate in formato @var_name non sono supportate quando si esegue la conversione in Oracle SQL.

  • Identificativi quotati: gli identificativi MySQL racchiusi con i backtick (`), ad esempio `var_name`, non sono supportati durante la conversione in Oracle SQL. Sono supportati solo gli identificativi senza virgolette o racchiusi tra virgolette doppie.

  • Delimitatori:
    • Per funzioni e procedure, sono supportati solo il delimitatore $$ e //.

    • Per le istruzioni SQL è supportato solo il delimitatore ;.

Il seguente elenco di funzioni MySQL non è supportato:
  • ADDTIME(datetime, time)

  • AES_DECRYPT(crypt_str, key_str)

  • AES_ENCRYPT(str, key_str)

  • BIN(num)

  • CONV(num, from_base, to_base)

  • CONVERT_TZ(datetime, from, to)

  • CRC32(exp)

  • DATE_ADD(date, interval)