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 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:

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.

CHAR(n)

CHARACTER(n)
Dimensione massima di 2000 byte.

CHARACTER(n)

NCHAR(n)
Dimensione massima di 2000 byte.

NCHAR(n)

VARCHAR(n)
Dimensione massima di 2000 byte.

VARCHAR(n)

NCHAR
VARYING(n)
Dimensione massima
di 4000 byte della stringa UTF-8 di lunghezza variabile.

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.

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.

NUMERIC(p,s)

FLOAT(p)
Numero con 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 virgola mobile.

REAL

DOUBLE PRECISION
Numero con 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)
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.

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.

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 e FILE). 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