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 logging
Tipi di dati
MySQL fornisce più tipi di dati che sono completamente equivalenti o simili 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 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 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 farlo
specificare un limite massimo di caratteri. |
|
ENUM |
Oggetto stringa con un valore scelto da un elenco di valori consentiti che sono enumerato in modo esplicito nella specifica della colonna quando la tabella è stato creato. | |
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 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,
quali d cifre possono essere successive al separatore decimale. |
|
BIT(m) |
Archiviazione 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 visualizza DATE valori in
'YYYY-MM-DD' .- L'intervallo supportato va da '1000-01-01' a
'9999-12-31' . |
DATETIME |
- Valori che contengono sia parti di data che di ora. - Recupera e visualizza DATETIME valori in
'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 essere compresi tra '-838:59:59' e
'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 da 1 byte utilizzato per rappresentare i valori dell'anno.- Può essere dichiarato come YEAR o
YEAR(n) e ha una larghezza di visualizzazione
n caratteri. |
|
JSON | JSON |
Dati JSON testuali 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, 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 vero o falso. - 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 dei tipi di dati Oracle | Equivalente MySQL a Oracle | MySQL corrispondente/alternativo |
---|---|---|---|---|
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) |
Dimensione massima 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 punto fisso. | Sì | DEC(p,s) |
|
DECIMAL(p,s) |
Numero a punto fisso. | 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 |
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) |
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 caratteri di grandi dimensioni con dimensione massima del file di 4 GB. | No | LONGTEXT |
|
BLOB |
Oggetto binario di grandi dimensioni 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 |
|
ID RIGA | ROWID |
Indirizzo fisico della riga. | No | CHAR(n) |
UROWID(n) |
ID riga universale degli indirizzi di riga logica. | No | VARCHAR(n) |
|
Spaziali | 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 di creare
tipi di dati complessi che si basano e si estendono dai dati integrati Oracle
l'elenco dei tipi di conversione.
Ecco un esempio di Oracle di UDT:
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, nonché la necessità di convertire le tabelle Oracle in tabelle Cloud SQL per MySQL.
Creazione e autorizzazioni di utenti
Gli account utente del database Oracle ("user" e "schema" Oracle sono identici) essere utilizzato per l'autenticazione e la connessione alle sessioni del database, l'accesso all'autorizzazione è impostato a livello individuale di ciascun utente per un database specifico oggetti e autorizzazioni.
In generale, esistono due tipi di utenti del database:
- Amministratori: gestiscono l'istanza, gli utenti e le risorse del database.
- Account utente: per operazioni logiche come le applicazioni.
Gli amministratori concedono i privilegi agli account utente degli utenti e delle applicazioni
per accedere agli oggetti del database. Le autorizzazioni per i database Oracle sono concesse a un
l'utente per operazioni specifiche (ad esempio, creazione di una sessione/connettersi) o
oggetti di database (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 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 che a cui l'utente deve connettersi 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 collegamento in due parti tra l'utente e il server da cui l'utente può connettersi, un un utente può essere creato con lo stesso nome, ma da un server diverso all'indirizzo client (IP/DNS).
- Una volta creato l'utente, può ottenere l'autorizzazione per il database che fanno parte di uno specifico database o schema.
- È 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 probabilmente richiede perché convertire le tabelle Oracle in MySQL è fondamentale di importanza significativa e con ulteriori implicazioni sul rendimento 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)
- Crea sintassi della tabella
- Metadati di tabelle e indici
- Supporto dei vincoli
- Supporto e limitazioni dei tipi di dati
- Indici
- Gestione delle partizioni e delle partizioni
- Manutenzione di tabelle e indici
- Tabelle temporanee
- Visualizzazioni
- Colonne visibili e invisibili (Oracle 12c)
- Insiemi di caratteri di tabelle e colonne