Migrazione degli utenti Oracle® a Cloud SQL per PostgreSQL: 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 PostgreSQL versione 12. Oltre alla parte introduttiva sulla configurazione, la serie include le seguenti parti:

Tipi di dati

Cloud SQL per PostgreSQL fornisce più tipi di dati completamente equivalenti o simili ai tipi di dati forniti da Oracle. La tabella seguente elenca i tipi di dati PostgreSQL più comuni, seguita da un confronto tra i tipi di dati primitivi di Oracle e i tipi di dati Cloud SQL per PostgreSQL corrispondenti. Se un tipo di dato non è supportato, viene elencato un tipo di dato alternativo.

Tipi di dati primitivi di Cloud SQL per PostgreSQL 12

Famiglia di tipi di dati di Cloud SQL per PostgreSQL Nome del tipo di dati di Cloud SQL per PostgreSQL Specifica del tipo di dati
Stringa/carattere CHAR(n) Memorizza esattamente n caratteri. Alias di CHARACTER(n).
CHARACTER(n) Memorizza esattamente n caratteri.
VARCHAR(n) Memorizza un numero variabile di caratteri, fino a un massimo di n caratteri. Alias di CHARACTER VARYING(n).
CHARACTER VARYING(n) Memorizza un numero variabile di caratteri, fino a un massimo di n caratteri.
TEXT Variante specifica di VARCHAR che non richiede di specificare un limite superiore al numero di caratteri. La stringa di caratteri più lunga possibile che può essere archiviata è di 1 GB (lo stesso per tutti i tipi di dati di caratteri di stringa).
Numerico SMALLINT Il valore minimo è -32768 | Il valore massimo è 32767.
INTEGER Il valore minimo è -2147483648 | Il valore massimo è 2147483647.
BIGINT Il valore minimo è -2^63 | Il valore massimo è 2^63-1.
REAL Numero a virgola mobile a precisione singola (4 byte).
DOUBLE PRECISION Numero a virgola mobile a precisione doppia (8 byte).
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.
SMALLSERIAL Numero intero con incremento automatico. Il valore minimo è 1 | Il valore massimo è 32767.
SERIAL Numero intero con incremento automatico. Il valore minimo è 1 | Il valore massimo è 2147483647.
BIGSERIAL Numero intero con incremento automatico. Valore minimo 1 | Valore massimo 2^63-1.
Monetary MONEY Importo in valuta con una precisione frazionaria fissa. Il valore minimo è -92233720368547758,08 | Il valore massimo è +92233720368547758,07.
Data e ora DATE - Valori con una parte della data, ma senza parte dell'ora.
- L'intervallo supportato va dal 4713 a.C. al 5874897 d.C. con una risoluzione di 1giorno.
TIMESTAMP (p) - Valori che contengono sia parti di data che di ora.
- L'intervallo supportato va dal 4713 a.C. al 294276 d.C.
- La risoluzione è pari a p cifre decimali in secondi (o 1 microsecondo se non specificato).
TIMESTAMP (p) with time zone - Valori che contengono data, ora e fuso orario.
- L'intervallo supportato va dal 4713 a.C. al 294276 d.C.
- La risoluzione è pari a p cifre decimali in secondi (o 1 microsecondo se non specificato).
TIME (p) - Valori con una parte relativa all'ora, ma senza una parte relativa alla data.
- L'intervallo supportato è compreso tra 00:00:00 e 24:00:00.
- La risoluzione è pari a p cifre decimali in secondi (o 1 microsecondo se non specificato).
TIME (p) with time zone - Valori con un'ora e un fuso orario, ma senza parte relativa alla data.
- L'intervallo supportato è compreso tra 00:00:00 e 24:00:00.
- La risoluzione è pari a p cifre decimali in secondi (o 1 microsecondo se non specificato).
INTERVAL (p) - Intervallo di tempo
- L'intervallo supportato è compreso tra -178000000 e 178000000 anni.
- La risoluzione è pari a p cifre decimali in secondi (o 1 microsecondo se non specificato).
JSON JSON Dati JSON di tipo testo.
JSONB Dati JSON binari.
XML XML Dati XML.

Geometrico
GEOMETRY Il tipo di colonna da specificare quando vuoi utilizzare i seguenti modelli di dati.
POINT Un valore (x,y).
LINE Una tupla (A, B, C) in cui Ax + By + C = 0, A e B non sono entrambi pari a 0.

OPPURE

Punto 1 e punto 2 nei seguenti formati:

[ ( x1 , y1 ) , ( x2 , y2 ) ]
( ( x1 , y1 ) , ( x2 , y2 ) )
( x1 , y1 ) , ( x2 , y2 )
x1 , y1 , x2 , y2

LSEG Un segmento di linea ((x1,y1),(x2,y2)).
BOX Scatola rettangolare ((x1,y1),(x2,y2)).
PATH Una sequenza di punti ((x1,y1),...).
POLYGON Una sequenza di punti, in pratica un percorso chiuso.
CIRCLE (x,y),r) (punto centrale e raggio)
Logico BOOLEAN - Contiene un valore true, false o null.
- Accetta valori come yes, true, t, on e 1 come true.
Dati binari / in bit BIT (n) Stringa di bit di lunghezza fissa.
BYTEA Dati binari / array di byte.
Tipi di indirizzi di rete CIDER reti IPv4 e IPv6.
INET Host e reti IPv4 e IPv6.
MACADDR Indirizzi MAC.
MACADDR8 Indirizzi MAC (formato EUI-64).
Altro PG_LSN Numero di sequenza del log di Cloud SQL per PostgreSQL.
TSQUERY Query di ricerca di testo.
TSVECTOR Documento di ricerca di testo.
TXID_SNAPSHOT Snapshot degli ID transazione a livello di utente.
UUID Identificatore univoco universale.

Conversione del tipo di dati da Oracle a Cloud SQL per PostgreSQL

Famiglia di tipi di dati Oracle Nome del tipo di dati Oracle Specifica del tipo di dati Oracle Cloud SQL per PostgreSQL a Oracle equivalente Corrispondente/alternativa Cloud SQL per PostgreSQL
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. No CHAR(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.
No CHARACTER VARYING(n)
VARCHAR2(n) 11g Dimensione massima di 4000 byte e dimensione massima di 32 KB in PL/SQL. Sì* VARCHAR(n)
VARCHAR2(n)
12g
Dimensioni massime di 32767 byte MAX_STRING_SIZE= EXTENDED. Sì* VARCHAR(n)
NVARCHAR2(n) Dimensione massima di 4000 byte. No VARCHAR(n)
LONG Dimensioni massime di 2 GB. Sì* TEXT
RAW(n) Dimensioni massime di 2000 byte. Sì* BYTEA
LONG RAW Dimensioni massime di 2 GB. Sì* BYTEA
Numerico NUMBER Numero con rappresentazione in virgola mobile. Sì* NUMERIC(p,s)
NUMBER(*) Numero con rappresentazione in virgola mobile. Sì* DOUBLE PRECISION
NUMERIC(p,s) La precisione può variare da 1 a 38. NUMERIC(p,s)
FLOAT(p,s) Numero con rappresentazione in virgola mobile. Sì* DOUBLE PRECISION
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 rappresentazione in virgola mobile. Sì* DOUBLE PRECISION
DOUBLE PRECISION Numero con rappresentazione in virgola mobile. DOUBLE PRECISION
Data e ora DATE Memorizza i dati relativi a data e ora (anno, mese, giorno, ora, minuto e secondo). Sì* TIMESTAMP(0)
TIMESTAMP(p) Data e ora con frazione. TIMESTAMP(p)
TIMESTAMP(p) WITH TIME ZONE Data e ora con frazione e fuso orario. TIMESTAMP (p) WITH TIME ZONE
INTERVAL YEAR(p) TO MONTH Intervallo di date. Sì* INTERVAL YEAR TO MONTH
INTERVAL DAY(p) TO SECOND(s) Intervallo di giorni e ore. Sì* INTERVAL DAY TO SECOND(s)
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 XML
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 TEXT
BLOB Oggetto di grandi dimensioni binario con una dimensione massima di 4 GB. No BYTEA
NCLOB Stringa Unicode di lunghezza variabile con una dimensione massima del file di 4 GB. No TEXT
ROWID ROWID Indirizzo fisico della riga. No CTID
UROWID(n) ID riga universale degli indirizzi di riga logica. No CTID
Spaziale SDO_ GEOMETRY La descrizione geometrica di un oggetto spaziale. Postgres ha vari tipi di geometria, tra cui point, line, path, polygon, circle e così via.
SDO_TOPO_ GEOMETRY Descrive una geometria della topologia. PostGIS, un'estensione Postgres ampiamente utilizzata, fornisce diversi tipi di topologie.
SDO_GEORASTER Una griglia raster o un oggetto immagine viene archiviato in una singola riga. PostGIS, un'estensione di Postgres ampiamente utilizzata, fornisce uno strumento per caricare i file raster nel database.
Tipi di contenuti multimediali ORDDicom Supporta l'archiviazione e la gestione dei file DICOM (Digital Imaging and Communications in Medicine). Sì, con una soluzione alternativa Postgres fornisce un tipo binario, bytea, per archiviare oggetti di grandi dimensioni.
ORDDoc Supporta l'archiviazione e la gestione di qualsiasi tipo di dati multimediali. Sì, con una soluzione alternativa Postgres fornisce un tipo binario, bytea, per archiviare oggetti di grandi dimensioni.
ORDImage Supporta l'archiviazione e la gestione dei dati delle immagini. Sì, con una soluzione alternativa Postgres fornisce un tipo binario, bytea, per archiviare oggetti di grandi dimensioni.
ORDVideo Supporta l'archiviazione e la gestione dei dati video. Soluzione alternativa Postgres fornisce un tipo binario, bytea, per archiviare oggetti di grandi dimensioni.

* Il tipo di dati corrispondente in Cloud SQL per PostgreSQL è per lo più compatibile con Oracle, ma ha un nome diverso.

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.

Tipi definiti dall'utente Oracle Panoramica o implementazione di Oracle Assistenza Cloud SQL per PostgreSQL Soluzione corrispondente o alternativa Cloud SQL per PostgreSQL
Tipo di dati astratto (ADT) CREATE TYPE ADT_DEMO AS OBJECT (
ID NUMBER(6),
NAME VARCHAR2(20)
);
Parzialmente con sintassi diversa I tipi compositi di Cloud SQL per PostgreSQL sono specificati da un elenco di nomi di attributi e tipi di dati:

CREATE TYPE ADT_DEMO AS
(
ID NUMERIC(6),
NAME VARCHAR(20)
);

Tipo VARRAY CREATE TYPE VARRAY_DEMO AS VARRAY (5) OF VARCHAR2(25); No Come soluzione alternativa, Cloud SQL per PostgreSQL consente di definire le colonne come array:

CREATE TABLE VARRAY_TABLE (
NAME VARCHAR(25)[]
);

Tipo di tabella nidificata CREATE TYPE NTT_DEMO AS OBJECT (
ID NUMBER(6),
NAME VARCHAR2(20)
) ;
CREATE TYPE NTT_TABLE AS TABLE OF NTT_DEMO;
No Come soluzione alternativa, utilizza una combinazione di tipi compositi e definizione di colonne array in Cloud SQL per PostgreSQL per ottenere funzionalità simili a quelle del tipo di tabella nidificata di Oracle.

CREATE TYPE NTT_DEMO AS
(
ID NUMERIC(6),
NAME VARCHAR(20)
);
CREATE TABLE NTT_TABLE (
RECORD NTT_DEMO[]
);

Tipo incompleto I tipi incompleti sono tipi senza attributi e metodi. Potrebbero essere riferite da altri tipi. Tuttavia, devi fornire la definizione del tipo prima di utilizzarlo.

CREATE TYPE INCOMPLETE_DEMO;

No N/A

Utenti

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 PostgreSQL.

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 dell'utente per oggetti/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).

In Oracle esiste il concetto di utenti e ruoli. Gli utenti vengono utilizzati per autenticarsi con il database e i ruoli forniscono il raggruppamento delle autorizzazioni che possono essere concesse nel loro insieme.

In Cloud SQL per PostgreSQL, gli utenti e i ruoli sono sinonimi. Un utente in Cloud SQL per PostgreSQL è un ruolo con autorizzazione connect. Puoi utilizzare l'istruzione CREATE USER o CREATE ROLE per creare un utente database. A differenza di Oracle, in Cloud SQL per PostgreSQL gli schemi e gli utenti vengono creati separatamente. Uno schema è una raccolta di oggetti (ad esempio tabelle, tipi di dati, funzioni e così via) ed è di proprietà di un utente.

Oracle Create User
CREATE USER user_name IDENTIFIED BY password;
Cloud SQL per PostgreSQL Create User
CREATE USER user WITH PASSWORD 'password';

OPPURE

CREATE ROLE user WITH LOGIN PASSWORD 'password';

Considerazioni sulle conversioni

  • Gli utenti sono definiti a livello di radice e sono validi per tutti i database contenuti nello stesso cluster Cloud SQL per PostgreSQL. È simile agli "utenti comuni" in Oracle 12c.
  • La sintassi di CREATE USER di Cloud SQL per PostgreSQL è diversa da quella di Oracle e non può essere eseguita la migrazione così com'è. CREATE USER in Cloud SQL per PostgreSQL è un alias per CREATE ROLE, tranne per il fatto che l'opzione LOGIN è abilitata per impostazione predefinita.

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 PostgreSQL, tutti gli elementi delle tabelle Oracle devono essere convertiti in tabelle Cloud SQL per PostgreSQL. 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 Cloud SQL per PostgreSQL richiede probabilmente più impegno perché la conversione delle tabelle Oracle in tabelle Cloud SQL per PostgreSQL è 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 di Oracle e Cloud SQL per PostgreSQL e le funzionalità correlate. Queste differenze sono discusse nelle restanti parti della serie.

  • 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

Passaggi successivi