Migrazione degli utenti Oracle a Cloud SQL per MySQL: tipi di dati, utenti e tabelle

Questo documento fa parte di una serie che fornisce informazioni e indicazioni chiave relative alla pianificazione ed esecuzione delle migrazioni dei database Oracle® 11g/12c a Cloud SQL per MySQL versione 5.7, istanze di seconda generazione. La serie include le seguenti parti:

Tipi di dati

MySQL fornisce più tipi di dati completamente equivalenti o simili ai tipi di dati forniti da Oracle. La tabella seguente elenca i tipi di dati MySQL più comuni, seguita da un confronto tra i tipi di dati primitivi di Oracle e i tipi di dati MySQL corrispondenti. Se un tipo di dato non è supportato, viene elencato un tipo di dato alternativo. Tieni presente che un database MySQL 5.7 ha un limite di 65.535 byte per l'intera riga (a seconda del set di caratteri utilizzato).

Tipi di dati primitivi di MySQL 5.7

Famiglia di tipi di dati MySQL Nome del tipo di dati MySQL Specifica del tipo di dati
Stringa/
carattere
CHAR(n)
Memorizza esattamente n caratteri.
VARCHAR(n)
Memorizza un numero variabile di caratteri, fino a un massimo di n caratteri.
BINARY
Memorizza esattamente n byte.
VARBINARY(n)
Memorizza un numero variabile di caratteri, fino a un massimo di n byte.
BLOB
Oggetto di grandi dimensioni binario che può contenere una quantità variabile di dati.
TEXT
Variante specifica di VARCHAR che non richiede di specificare un limite superiore al numero di caratteri.
ENUM
Oggetto stringa con un valore scelto da un elenco di valori consentiti elencati esplicitamente nella specifica della colonna al momento della creazione della tabella.
SET
Oggetto stringa che può avere zero o più valori, ciascuno dei quali deve essere scelto da un elenco di valori consentiti specificato al momento della creazione della tabella.
Numerico
INT
Il valore minimo è -2147483648 | Il valore massimo è 2147483647.
INTEGER
Il valore minimo è -2147483648 | Il valore massimo è 2147483647.
TINYINT
Valore minimo: -128 | Valore massimo: 127.
SMALLINT
Il valore minimo è -32768 | Il valore massimo è 32767.
MEDIUMINT
Il valore minimo è -8388608 | Il valore massimo è 8388607.
BIGINT
Il valore minimo è -2^63 | Il valore massimo è 2^63-1.
DECIMAL(p,s)
In grado di memorizzare qualsiasi valore con p cifre e s decimali.
NUMERIC(p,s)
In grado di memorizzare qualsiasi valore con p cifre e s decimali.
FLOAT(m,d)
I valori possono essere memorizzati con un massimo di m cifre in totale, di cui d cifre possono trovarsi dopo il separatore decimale.
DOUBLE(m,d)
I valori possono essere memorizzati con un massimo di m cifre in totale, di cui d cifre possono trovarsi dopo il separatore decimale.
BIT(m)
Memorizzazione di valori a m bit. m può assumere valori da 1 a 64.
Data e ora
DATE
- Valori con una parte della data, ma senza parte dell'ora.
- Recupera e mostra i valori DATE in formato 'YYYY-MM-DD'.
- L'intervallo supportato è da '1000-01-01' a '9999-12-31'.
DATETIME
- Valori che contengono sia parti di data che di ora.
- Recupera e mostra i valori DATETIME in formato 'YYYY-MM-DD HH:MM:SS'.
- L'intervallo supportato è da '1000-01-01 00:00:00' a '9999-
12-31 23:59:59'.
TIMESTAMP
- Valori che contengono sia parti di data che di ora.
- TIMESTAMP ha un intervallo compreso tra '1970-01-01 00:00:01' UTC e '2038-01-19 03:14:07' UTC.
TIME
- I valori possono variare da '-838:59:59' a '838:59:59'.
- La parte relativa alle ore potrebbe essere così grande perché il tipo TIME può essere utilizzato non solo per rappresentare un'ora del giorno (che deve essere inferiore a 24 ore), ma anche il tempo trascorso o un intervallo di tempo tra due eventi (che potrebbe essere molto più lungo di 24 ore o addirittura negativo).
YEAR
- YEAR Tipo di 1 byte utilizzato per rappresentare i valori dell'anno.
- Può essere dichiarato come YEAR o YEAR(n) e ha una larghezza di visualizzazione di n caratteri.
JSON
JSON
Dati JSON di tipo testuale.

Spaziale (geometria)
GEOMETRY
Il tipo di colonna da specificare quando vuoi utilizzare i modelli di dati che seguono nel resto di questa tabella.
POINT
Un valore (x,y).
LINESTRING
Una riga (pt1, pt2).
POLYGON
Una sequenza di punti, in pratica un percorso chiuso.
MULTIPOINT
Raccolta di valori POINT.
MULTI-LINESTRING
Raccolta di valori LINE.
MULTIPOLYGON
Raccolta di valori POLYGON.
GEOMETRY-COLLECTION
Raccolta di tipi di dati geometrici.
Logico
BOOLEAN
- Contiene un valore true o false.
- Accetta valori come TRUE, '1' e 1 come true.
- Utilizza 1 byte di spazio di archiviazione e può memorizzare NULL.

Conversione del tipo di dati da Oracle a MySQL

Famiglia di tipi di dati Oracle Nome del tipo di dati Oracle Specifica del tipo di dati Oracle Equivalente di MySQL a Oracle Corrispondenza/alternativa MySQL
Stringa/
Carattere
CHAR(n)
Dimensioni massime di 2000 byte.
CHAR(n)
CHARACTER(n)
Dimensioni massime di 2000 byte.
CHARACTER(n)
NCHAR(n)
Dimensioni massime di 2000 byte.
NCHAR(n)
VARCHAR(n)
Dimensioni massime di 2000 byte.
VARCHAR(n)
NCHAR
VARYING(n)
Stringa UTF-8 di lunghezza variabile con una dimensione massima
di 4000 byte.
NCHAR
VARYING(n)
VARCHAR2(n)
11g
Dimensione massima di 4000 byte. Dimensione massima di 32 KB in PL/SQL. No
VARCHAR(n)
VARCHAR2(n)
12g
Dimensioni massime di 32767 byte MAX_STRING_SIZE=EXTENDED. No
VARCHAR(n)
NVARCHAR2(n)
Dimensione massima di 4000 byte. No
VARCHAR(n)
LONG
Dimensioni massime di 2 GB.
LONG
RAW(n)
Dimensioni massime di 2000 byte. No
VARBINARY(n)
LONG RAW
Dimensioni massime di 2 GB. No
LONGTEXT
Numerico
NUMBER
Numero con rappresentazione in virgola mobile. No
NUMERIC/DECIMAL(p,s)
Numerico
NUMBER
Numero con rappresentazione in virgola mobile. No
NUMERIC/DECIMAL(p,s)
NUMBER(*)
Numero con rappresentazione in virgola mobile. No
DOUBLE
NUMERIC(p,s)
La precisione può variare da 1 a 38.
NUMERIC(p,s)
FLOAT(p)
Numero con rappresentazione in virgola mobile.
FLOAT(p)
DEC(p,s)
Numero a virgola fissa.
DEC(p,s)
DECIMAL(p,s)
Numero a virgola fissa.
DECIMAL(p,s)
INT
Numero intero di 38 cifre.
INT
INTEGER
Numero intero di 38 cifre.
INTEGER
SMALLINT
Numero intero di 38 cifre.
SMALLINT
REAL
Numero con rappresentazione in virgola mobile.
REAL
DOUBLE PRECISION
Numero con rappresentazione in virgola mobile.
DOUBLE PRECISION
Data e ora
DATE
Memorizza i dati relativi a data e ora (anno, mese, giorno, ora, minuto e secondo).
DATE
TIMESTAMP(p)
Data e ora con frazione.
TIMESTAMP
TIMESTAMP(p)
WITH TIME ZONE
Data e ora con frazione e fuso orario. No
DATETIME(n)
INTERVAL
YEAR(p)
TO MONTH
Intervallo di date. No
VARCHAR(n)
INTERVAL
DAY(p)
TO SECOND(s)
Intervallo di giorni e ore. No
VARCHAR(n)
Logico
BOOLEAN
Valori TRUE, FALSE e NULL. Non può essere assegnata a una colonna della tabella di un database.
BOOLEAN
XML
XMLTYPE
Dati XML. No
LONGTEXT
LOB
BFILE
Puntatore al file binario, con una dimensione massima di 4 GB. No
VARCHAR(255)
CLOB
Oggetto di grandi dimensioni con una dimensione massima del file di 4 GB. No
LONGTEXT
BLOB
Oggetto di grandi dimensioni binario con una dimensione massima di 4 GB.
BLOB
NCLOB
Stringa Unicode di lunghezza variabile con una dimensione massima del file di 4 GB. No
LONGTEXT
ROWID
ROWID
Indirizzo fisico della riga. No
CHAR(n)
UROWID(n)
ID riga universale degli indirizzi di riga logica. No
VARCHAR(n)
Spaziale
SDO_GEOMETRY
La descrizione geometrica di un oggetto spaziale. No
N/A
SDO_TOPO_GEOMETRY
Descrive una geometria della topologia. No
N/A
SDO_GEORASTER
Una griglia raster o un oggetto immagine viene archiviato in una singola riga. No
N/A
Tipi di contenuti multimediali
ORDDicom
Supporta l'archiviazione e la gestione dei dati audio. No
N/A
ORDDicom
Supporta lo stoccaggio e la gestione di Digital Imaging and Communications in Medicine (DICOM). No
N/A
ORDDoc
Supporta l'archiviazione e la gestione di qualsiasi tipo di dati multimediali. No
N/A
ORDImage
Supporta l'archiviazione e la gestione dei dati delle immagini. No
N/A
ORDVideo
Supporta l'archiviazione e la gestione dei dati video. No
N/A

Tipi definiti dall'utente

Oracle definisce i tipi definiti dall'utente (UDT) come OBJECT TYPES, che vengono gestiti utilizzando PL/SQL. I tipi definiti dall'utente consentono all'utente di creare tipi di dati complessi dedicati all'applicazione che si basano sull'elenco dei tipi di dati Oracle integrati e lo estendono.

Ecco un esempio di UDT di Oracle:

SQL> CREATE OR REPLACE TYPE EMP_PHONE_NUM AS OBJECT (
     PHONE_NUM VARCHAR2(11));

Note sulle conversioni

MySQL non consente agli utenti di creare tipi definiti e dedicati.

Utenti e tabelle

Questa sezione illustra la creazione degli utenti e l'assegnazione delle autorizzazioni, nonché la necessità di convertire le tabelle Oracle in tabelle Cloud SQL per MySQL.

Creazione di utenti e autorizzazioni

Gli account utente del database Oracle ("user" e "schema" di Oracle sono identici) possono essere utilizzati per l'autenticazione e la connessione alle sessioni del database, mentre l'accesso di autorizzazione viene impostato a livello individuale per ciascun utente per oggetti e autorizzazioni del database specifici.

In generale, esistono due tipi di utenti del database:

  • Amministratori:gestione dell'istanza del database, degli utenti e delle risorse.
  • Account utente:per operazioni logiche come le applicazioni.

Gli amministratori concedono i privilegi agli account utente e utente dell'applicazione per accedere agli oggetti del database. Le autorizzazioni del database Oracle vengono concesse a un utente per operazioni specifiche (ad esempio creazione di sessioni/connessione) o per oggetti database specifici (ad esempio SELECT su una tabella specifica o EXECUTE su una procedura memorizzata specifica).

Considerazioni sulle conversioni

  • La sintassi di MySQL CREATE USER è diversa da quella di Oracle e non può essere eseguita la migrazione così com'è. Inoltre, entrambi i database hanno un'architettura utente diversa.
  • Quando un amministratore crea un utente in MySQL, deve specificare il server a cui deve connettersi l'utente per accedere al database. Il server può essere un indirizzo IP o DNS specifico oppure è consentito connettersi da tutte le origini utilizzando il carattere jolly %.
  • Poiché il nome utente MySQL è un allegato in due parti tra il nome utente e il server da cui l'utente può connettersi, è possibile creare un utente con lo stesso nome, ma da un server diverso dall'indirizzo client (IP/DNS).
  • Una volta creato l'utente, è possibile concedergli l'autorizzazione per gli oggetti database che fanno parte di uno schema o di un database specifico.
  • È inoltre possibile concedere agli utenti autorizzazioni aggiuntive in base alle autorizzazioni consentite di Cloud SQL per MySQL (ad esempio, l'utente root avrà tutti i privilegi tranne quelli di SUPER e FILE). Gli utenti Oracle possono essere collegati a un tablespace dedicato in MySQL, pertanto questa funzionalità non è pertinente.

Tabelle

Le tabelle Oracle sono costituite da molti elementi, come tipi di dati delle colonne, vincoli delle tabelle, indici, partizioni, funzionalità proprietarie delle tabelle Oracle e altro ancora. Per eseguire correttamente la migrazione alle tabelle di database Cloud SQL per MySQL, tutti gli elementi delle tabelle Oracle devono essere convertiti in tabelle MySQL. Alcuni elementi sono supportati senza modifiche o con modifiche minime, mentre altri devono essere modificati completamente.

Dal punto di vista della migrazione, la conversione di PL/SQL in MySQL richiede probabilmente un impegno maggiore perché la conversione delle tabelle Oracle in tabelle MySQL è una fase cruciale di notevole importanza e con ulteriori implicazioni sulle prestazioni e sulle dimensioni dei dati.

Di seguito sono riportate le principali differenze tra le tabelle Oracle e MySQL e le funzionalità correlate. Queste differenze sono discusse nelle altre parti della serie.

  • Sensibilità alle maiuscole (nomi di tabelle e colonne)
  • Sintassi di creazione della tabella
  • Metadati di tabelle e indici
  • Supporto dei vincoli
  • Supporto e limitazioni dei tipi di dati
  • Indici
  • Partizioni e gestione delle partizioni
  • Manutenzione di tabelle e indici
  • Tabelle temporanee
  • Visualizzazioni
  • Colonne visibili e invisibili (Oracle 12c)
  • Insiemi di caratteri di tabelle e colonne