Questo documento fa parte di una serie che fornisce informazioni chiave e indicazioni relative alla pianificazione e all'esecuzione delle migrazioni dei database Oracle® 11g/12c in 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 logging
Tipi di dati
MySQL fornisce più tipi di dati completamente equivalenti o simili ai tipi di dati forniti da Oracle. La seguente tabella elenca i tipi di dati MySQL più comuni, seguiti da un confronto tra i tipi di dati primitivi Oracle e i tipi di dati MySQL corrispondenti. Se un tipo di dati non è supportato, viene elencato un tipo di dati 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 MySQL 5.7
Famiglia di tipi di dati MySQL | Nome tipo di dati MySQL | Specifica del tipo di dati |
---|---|---|
Stringa/ carattere |
CHAR(n) |
Memorizza esattamente n caratteri. |
VARCHAR(n) |
Archivia un numero variabile di caratteri, fino a un massimo di n caratteri. |
|
BINARY |
Archivia esattamente n byte. |
|
VARBINARY(n) |
Archivia un numero variabile di caratteri, fino a un massimo di n byte. |
|
BLOB |
Oggetto binario di grandi dimensioni che può contenere una quantità variabile di dati. | |
TEXT |
Variante specifica di VARCHAR che non richiede di specificare un limite massimo per il numero di caratteri. |
|
ENUM |
Oggetto stringa con un valore scelto da un elenco di valori consentiti enumerati esplicitamente nella specifica della colonna al momento della creazione della tabella. | |
SET |
Oggetto stringa che può avere zero o più valori, ognuno 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 |
Il valore minimo è -128 | Il 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 archiviati con un massimo di m cifre in totale, di cui d cifre possono essere successive al separatore decimale. |
|
DOUBLE(m,d) |
I valori possono essere archiviati con un massimo di m cifre in totale, di cui d cifre possono essere successive al separatore decimale. |
|
BIT(m) |
Archiviazione di valori a m bit. Il valore di m può
essere compreso tra 1 e 64. |
|
Data e ora | DATE |
- Valori con una parte della data ma nessuna parte dell'ora. - Recupera e visualizza i valori DATE in
formato 'YYYY-MM-DD' .- L'intervallo supportato è compreso tra '1000-01-01' e
'9999-12-31' . |
DATETIME |
- Valori che contengono parti di data e ora. - Recupera e visualizza i valori DATETIME in
formato 'YYYY-MM-DD HH:MM:SS' .- L'intervallo supportato è compreso tra '1000-01-01 00:00:00' e
'9999- 12-31 23:59:59' . |
|
TIMESTAMP |
- Valori che contengono parti di data e ora. - Il valore di TIMESTAMP è compreso tra le ore '1970-01-01
00:00:01' UTC e le ore '2038-01-19 03:14:07' UTC. |
|
TIME |
- I valori possono essere compresi tra '-838:59:59' e
'838:59:59' .- La parte relativa alle ore potrebbe essere troppo 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 maggiore di 24 ore, o anche negativo). |
|
YEAR |
- YEAR tipo di 1 byte utilizzato per rappresentare i valori degli anni.- Può essere dichiarato come YEAR o
YEAR(n) e ha una larghezza di visualizzazione di
n caratteri. |
|
JSON | JSON |
Dati testuali JSON come tipo di dati. |
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, di fatto 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ò archiviare NULL . |
Conversione del tipo di dati da Oracle a MySQL
Famiglia di tipi di dati Oracle | Nome tipo di dati Oracle | Specifica del tipo di dati Oracle | Equivalente da MySQL a Oracle | MySQL corrispondente/alternativo |
---|---|---|---|---|
Stringa/ Carattere |
CHAR(n) |
Dimensione massima di 2000 byte. | Sì | CHAR(n) |
CHARACTER(n) |
Dimensione massima di 2000 byte. | Sì | CHARACTER(n) |
|
NCHAR(n) |
Dimensione massima di 2000 byte. | Sì | NCHAR(n) |
|
VARCHAR(n) |
Dimensione massima di 2000 byte. | Sì | VARCHAR(n) |
|
NCHAR VARYING(n) |
Dimensione massima di 4000 byte della stringa UTF-8 di lunghezza variabile. |
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 |
Dimensione massima di 32.767 byte MAX_STRING_SIZE=EXTENDED . |
No | VARCHAR(n) |
|
NVARCHAR2(n) |
Dimensione massima di 4000 byte. | No | VARCHAR(n) |
|
LONG |
Dimensione massima: 2 GB. | Sì | LONG |
|
RAW(n) |
Dimensione massima di 2000 byte. | No | VARBINARY(n) |
|
LONG RAW |
Dimensione massima: 2 GB. | No | LONGTEXT |
|
Numerico | NUMBER |
Numero con virgola mobile. | No | NUMERIC/DECIMAL(p,s) |
Numerico | NUMBER |
Numero con virgola mobile. | No | NUMERIC/DECIMAL(p,s) |
NUMBER(*) |
Numero con virgola mobile. | No | DOUBLE |
|
NUMERIC(p,s) |
La precisione può variare da 1 a 38. | Sì | NUMERIC(p,s) |
|
FLOAT(p) |
Numero con 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 virgola mobile. | Sì | REAL |
|
DOUBLE PRECISION |
Numero con virgola mobile. | Sì | DOUBLE PRECISION |
|
Data e ora | DATE |
Archivia i dati di 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) |
Giorno e intervallo di tempo. | No | VARCHAR(n) |
|
Logico | BOOLEAN |
Valori TRUE , FALSE e NULL . Non può
essere assegnato a una colonna della tabella di database. |
Sì | BOOLEAN |
XML | XMLTYPE |
Dati XML. | No | LONGTEXT |
LOB | BFILE |
Punta a file binario con una dimensione massima di 4 GB. | No | VARCHAR(255) |
CLOB |
Oggetto di grandi dimensioni con caratteri con una dimensione massima dei file di 4 GB. | No | LONGTEXT |
|
BLOB |
Oggetto binario di grandi dimensioni con una dimensione massima di 4 GB. | Sì | BLOB |
|
NCLOB |
Stringa Unicode a lunghezza variabile con una dimensione massima del file di 4 GB. | No | LONGTEXT |
|
ROWID | ROWID |
Indirizzo della riga fisica. | No | CHAR(n) |
UROWID(n) |
ID riga universale degli indirizzi di riga logici. | No | VARCHAR(n) |
|
Spaziale | SDO_GEOMETRY |
La descrizione geometrica di un oggetto spaziale. | No | N/A |
SDO_TOPO_GEOMETRY |
Descrive la geometria di una topologia. | No | N/A |
|
SDO_GEORASTER |
Una griglia raster o un oggetto immagine è 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 l'archiviazione 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 fa riferimento ai tipi definiti dall'utente (UDT) come OBJECT TYPES
, gestiti
tramite PL/SQL. I tipi definiti dall'utente consentono all'utente di creare tipi di dati complessi e dedicati all'applicazione che si basano sull'elenco dei tipi di dati Oracle integrato e si estendono su di esso.
Ecco un esempio di UDT 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 dedicati.
Utenti e tabelle
Questa sezione illustra la creazione degli utenti e l'assegnazione delle autorizzazioni e la necessità di convertire le tabelle Oracle in tabelle Cloud SQL per MySQL.
Creazione e autorizzazioni degli utenti
Gli account utente del database Oracle (gli account "utente" e "schema" Oracle sono identici) possono essere utilizzati per l'autenticazione e la connessione a sessioni di database, mentre l'accesso all'autorizzazione è impostato a livello individuale di ciascun utente per autorizzazioni e oggetti di database specifici.
In generale, esistono due tipi di utenti del database:
- Amministratori: gestiscono l'istanza del database, gli utenti e le risorse.
- Account utente:gestione di operazioni logiche, ad esempio applicazioni.
Gli amministratori concedono privilegi ad account utente utente e applicazione per accedere agli oggetti del database. Le autorizzazioni per i database Oracle vengono concesse a un utente per operazioni specifiche (ad esempio, creazione di sessione/connessione) o per oggetti di database specifici (ad esempio SELECT
su una tabella specifica o EXECUTE
su una stored procedure specifica).
Considerazioni sulle conversioni
- La sintassi di MySQL
CREATE USER
è diversa da quella di Oracle e non può essere migrata 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 l'utente deve connettersi per l'accesso al database. Il server può essere un indirizzo IP o un DNS specifico oppure può connettersi da tutte le origini utilizzando il segno % con carattere jolly.
- Poiché il nome utente MySQL è un collegamento 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 dell'indirizzo client (IP/DNS).
- Una volta creato, l'utente può ricevere l'autorizzazione per gli oggetti del database che fanno parte di un database o di uno schema specifico.
- Agli utenti possono anche essere concesse autorizzazioni aggiuntive in base alle autorizzazioni consentite per Cloud SQL per MySQL (ad esempio, l'utente root avrà tutti i privilegi tranne i privilegi
SUPER
eFILE
). Gli utenti Oracle possono essere collegati a uno spazio delle tabelle dedicato mentre sono in MySQL, quindi questa funzionalità non è pertinente.
Tables
Le tabelle Oracle sono create a partire da molti elementi, come tipi di dati di colonna, vincoli delle tabelle, indici, partizioni, funzionalità proprietarie delle tabelle Oracle e altro ancora. Per eseguire correttamente la migrazione nelle 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 di minore entità o senza alcuna modifica, mentre alcuni devono essere completamente modificati.
Dal punto di vista della migrazione, la conversione di PL/SQL in MySQL richiede probabilmente uno sforzo maggiore perché la conversione delle tabelle Oracle in tabelle MySQL è una fase fondamentale con importanza significativa e ulteriori implicazioni sulle prestazioni e sulla dimensione dei dati.
Di seguito sono riportate le principali differenze tra le tabelle Oracle e MySQL e le relative funzionalità. Queste differenze sono discusse nelle restanti parti della serie.
- Sensibilità alle maiuscole (nomi di tabelle e colonne)
- Crea sintassi della tabella
- Metadati di tabella e indice
- Supporto dei vincoli
- Supporto e limitazioni dei tipi di dati
- Indici
- Gestione di partizioni e partizioni
- Manutenzione di tabelle e indici
- Tabelle temporanee
- Viste
- Colonne visibili e invisibili (Oracle 12c)
- Set di caratteri di tabelle e colonne