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:
- Migrazione degli utenti Oracle a Cloud SQL per MySQL: terminologia e funzionalità
- Migrazione degli utenti Oracle a Cloud SQL per MySQL: tipi di dati, utenti e tabelle (questo documento)
- Migrazione degli utenti Oracle a Cloud SQL per MySQL: query, stored procedure, funzioni e trigger
- Migrazione degli utenti Oracle a Cloud SQL per MySQL: sicurezza, operazioni, monitoraggio e registrazione
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. | Sì | CHAR(n) |
CHARACTER(n) |
Dimensioni massime di 2000 byte. | Sì | CHARACTER(n) |
|
NCHAR(n) |
Dimensioni massime di 2000 byte. | Sì | NCHAR(n) |
|
VARCHAR(n) |
Dimensioni massime di 2000 byte. | Sì | VARCHAR(n) |
|
NCHAR VARYING(n) |
Stringa UTF-8 di lunghezza variabile con una dimensione massima di 4000 byte. |
Sì | 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. | Sì | 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. | Sì | NUMERIC(p,s) |
|
FLOAT(p) |
Numero con rappresentazione in virgola mobile. | Sì | FLOAT(p) |
|
DEC(p,s) |
Numero a virgola fissa. | Sì | DEC(p,s) |
|
DECIMAL(p,s) |
Numero a virgola fissa. | Sì | DECIMAL(p,s) |
|
INT |
Numero intero di 38 cifre. | Sì | INT |
|
INTEGER |
Numero intero di 38 cifre. | Sì | INTEGER |
|
SMALLINT |
Numero intero di 38 cifre. | Sì | SMALLINT |
|
REAL |
Numero con rappresentazione in virgola mobile. | Sì | REAL |
|
DOUBLE PRECISION |
Numero con rappresentazione in virgola mobile. | Sì | DOUBLE PRECISION |
|
Data e ora | DATE |
Memorizza i dati relativi a data e ora (anno, mese, giorno, ora, minuto e secondo). | Sì | DATE |
TIMESTAMP(p) |
Data e ora con frazione. | Sì | 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. |
Sì | 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. | Sì | 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
eFILE
). 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