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 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.
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)
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.
NUMERIC(p,s)
FLOAT(p)
Numero con rappresentazione in virgola mobile.
FLOAT(p)
DEC(p,s)
Numero a punto fisso.
DEC(p,s)
DECIMAL(p,s)
Numero a punto fisso.
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
Archivia i dati di 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 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.
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 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 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