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 chiave e indicazioni relative alla pianificazione e all'esecuzione delle migrazioni dei database Oracle® 11g/12c in Cloud SQL per PostgreSQL versione 12. Oltre alla parte introduttiva della 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 seguente tabella elenca i tipi di dati PostgreSQL più comuni, seguiti da un confronto tra i tipi di dati primitivi Oracle e i corrispondenti tipi di dati di Cloud SQL per PostgreSQL. Se un tipo di dati non è supportato, ne viene indicato uno alternativo.

Cloud SQL per PostgreSQL 12 tipi di dati primitivi

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) Archivia un numero variabile di caratteri, fino a un massimo di n. Alias di CHARACTER VARYING(n).
CHARACTER VARYING(n) Archivia un numero variabile di caratteri, fino a un massimo di n.
TEXT Variante specifica di VARCHAR che non richiede di specificare un limite massimo per il numero di caratteri. La stringa di caratteri più lunga possibile archiviabile è di 1 GB (lo stesso per tutti i tipi di dati con caratteri 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 in virgola mobile a precisione singola (4 byte).
DOUBLE PRECISION Numero in 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 è 32.767.
SERIAL Numero intero con incremento automatico. Il valore minimo è 1 | Il valore massimo è 2147483647.
BIGSERIAL Numero intero con incremento automatico. Il valore minimo è 1 | Il valore massimo è 2^63-1.
moneterie MONEY Importo di valuta con precisione frazionata fissa. Il valore minimo è -92233720368547758,08 | Il valore massimo è +92233720368547758,07.
Data e ora DATE - Valori con una parte della data ma nessuna parte dell'ora.
- L'intervallo supportato è compreso tra 4713 BC e 5874897 AD con una risoluzione di 1 giorno.
TIMESTAMP (p) - Valori che contengono parti di data e ora.
- L'intervallo supportato è compreso tra 4713 BC e 294276 AD.
- La risoluzione è di p cifre frazionarie in secondi (o 1 microsecondo se non specificate).
TIMESTAMP (p) with time zone - Valori che contengono sia la data, l'ora e il fuso orario.
- L'intervallo supportato è compreso tra 4713 BC e 294276 AD.
- La risoluzione è di p cifre frazionarie in secondi (o 1 microsecondo se non specificate).
TIME (p) - Valori con una parte temporale ma nessuna parte della data.
- L'intervallo supportato è compreso tra 00:00:00 e 24:00:00.
- La risoluzione è di p cifre frazionarie in secondi (o 1 microsecondo se non specificate).
TIME (p) with time zone - Valori con ora e fuso orario ma nessuna parte della data.
- L'intervallo supportato è compreso tra 00:00:00 e 24:00:00.
- La risoluzione è di p cifre frazionarie in secondi (o 1 microsecondo se non specificate).
INTERVAL (p) - Intervallo di tempo
- L'intervallo supportato è compreso tra -178000000 e 178000000 anni.
- La risoluzione è di p cifre frazionarie in secondi (o 1 microsecondo se non specificate).
JSON JSON Dati JSON testuali.
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 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 lineare ((x1,y1),(x2,y2)).
BOX Scatola rettangolare ((x1,y1),(x2,y2)).
PATH Una sequenza di punti ((x1,y1),...).
POLYGON Una sequenza di punti, di fatto 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 bit / binari BIT (n) Stringa di bit a lunghezza fissa.
BYTEA Array di dati binari / byte.
Tipi di indirizzi di rete CIDER le reti IPv4 e IPv6.
INET Host e reti IPv4 e IPv6.
MACADDR gli indirizzi MAC.
MACADDR8 Indirizzi MAC (formato EUI-64).
Altro PG_LSN Numero di sequenza dei log di Cloud SQL per PostgreSQL.
TSQUERY Query di ricerca testuale.
TSVECTOR Documento di ricerca testuale.
TXID_SNAPSHOT Istantanea dell'ID transazione a livello di utente.
UUID Identificatore univoco universalmente.

Conversione dei tipi di dati da Oracle a Cloud SQL per PostgreSQL

Famiglia di tipi di dati Oracle Nome tipo di dati Oracle Specifica del tipo di dati Oracle Equivalente da Cloud SQL per PostgreSQL a Oracle Cloud SQL per PostgreSQL corrispondente/alternativa
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. No CHAR(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.
No CHARACTER VARYING(n)
VARCHAR2(n) 11g Dimensione massima di 4000 byte. La dimensione massima è di 32 kB in PL/SQL. Sì* VARCHAR(n)
VARCHAR2(n)
12g
Dimensione massima di 32.767 byte MAX_STRING_SIZE= EXTENDED. Sì* VARCHAR(n)
NVARCHAR2(n) Dimensione massima di 4000 byte. No VARCHAR(n)
LONG Dimensione massima: 2 GB. Sì* TEXT
RAW(n) Dimensione massima di 2000 byte. Sì* BYTEA
LONG RAW Dimensione massima: 2 GB. Sì* BYTEA
Numerico NUMBER Numero con virgola mobile. Sì* NUMERIC(p,s)
NUMBER(*) Numero con virgola mobile. Sì* DOUBLE PRECISION
NUMERIC(p,s) La precisione può variare da 1 a 38. NUMERIC(p,s)
FLOAT(p,s) Numero con 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 virgola mobile. Sì* DOUBLE PRECISION
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). 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) Giorno e intervallo di tempo. Sì* INTERVAL DAY TO SECOND(s)
Logico BOOLEAN Valori TRUE, FALSE e NULL. Non può essere assegnato a una colonna della tabella di database. BOOLEAN
XML XMLTYPE Dati XML. No XML
LOB BFILE Punta a file binario con una dimensione massima di 4 GB. No VARCHAR(255)
CLOB Oggetto grande con caratteri con una dimensione massima dei file di 4 GB. No TEXT
BLOB Oggetto binario di grandi dimensioni con una dimensione massima di 4 GB. No BYTEA
NCLOB Stringa Unicode a lunghezza variabile con una dimensione massima del file di 4 GB. No TEXT
ROWID ROWID Indirizzo della riga fisica. No CTID
UROWID(n) ID riga universale degli indirizzi di riga logici. 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, ....
SDO_TOPO_ GEOMETRY Descrive la geometria di una topologia. PostGIS, un'estensione di Postgres molto utilizzata, offre diversi tipi di topologia.
SDO_GEORASTER Una griglia raster o un oggetto immagine è archiviato in una singola riga. PostGIS, un'estensione di Postgres molto diffusa, fornisce uno strumento per caricare file raster nel database.
Tipi di contenuti multimediali ORDDicom Supporta l'archiviazione e la gestione di file Digital Imaging and Communications in Medicine (DICOM). Sì, con una soluzione alternativa Postgres fornisce un tipo binario, bytea, per l'archiviazione di 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 l'archiviazione di 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 l'archiviazione di oggetti di grandi dimensioni.
ORDVideo Supporta l'archiviazione e la gestione dei dati video. Soluzione alternativa Postgres fornisce un tipo binario, bytea, per l'archiviazione di oggetti di grandi dimensioni.

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

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.

Tipi definiti dall'utente Oracle Panoramica o implementazione di Oracle Supporto di Cloud SQL per PostgreSQL Soluzione corrispondente o alternativa di Cloud SQL per PostgreSQL
Tipo di dati astratti (ADT) CREATE TYPE ADT_DEMO AS OBJECT (
ID NUMBER(6),
NAME VARCHAR2(20)
);
Parzialmente con sintassi diversa I tipi composti 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 composti e definizione di colonne array in Cloud SQL per PostgreSQL per ottenere una funzionalità simile al 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 senza attributi e metodi. Potrebbero essere menzionati con 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 di utenti e l'assegnazione delle autorizzazioni e la necessità di convertire le tabelle Oracle in tabelle Cloud SQL per PostgreSQL.

Creazione e autorizzazioni degli utenti

Gli account utente del database Oracle (gli stessi oggetti "user" e "schema" di Oracle) possono essere utilizzati per l'autenticazione e la connessione a sessioni di database, mentre l'accesso all'autorizzazione è impostato a livello individuale dell'utente per specifici oggetti e autorizzazioni del database.

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

In Oracle esiste il concetto di utenti e ruoli. Gli utenti vengono utilizzati per l'autenticazione con il database e i ruoli forniscono il raggruppamento delle autorizzazioni che possono essere concesse nel complesso.

In Cloud SQL per PostgreSQL, gli utenti e i ruoli sono sinonimi. Un utente di Cloud SQL per PostgreSQL è un ruolo con autorizzazione connect. Puoi utilizzare l'istruzione CREATE USER o CREATE ROLE per creare un utente del 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.

Creazione utente Oracle
CREATE USER user_name IDENTIFIED BY password;
Utente di creazione Cloud SQL per PostgreSQL
CREATE USER user WITH PASSWORD 'password';

OPPURE

CREATE ROLE user WITH LOGIN PASSWORD 'password';

Considerazioni sulle conversioni

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

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 PostgreSQL, tutti gli elementi delle tabelle Oracle devono essere convertiti in tabelle Cloud SQL per PostgreSQL. Alcuni elementi sono supportati senza modifiche o modifiche di minore entità, mentre alcuni devono essere modificati completamente.

Dal punto di vista della migrazione, la conversione di PL/SQL in Cloud SQL per PostgreSQL richiede probabilmente uno sforzo maggiore perché la conversione delle tabelle Oracle in tabelle di Cloud SQL per PostgreSQL è una fase cruciale con un'importanza significativa e ulteriori implicazioni sulle prestazioni e sulla dimensione dei dati.

Di seguito sono riportate le principali differenze tra le tabelle Oracle e Cloud SQL per PostgreSQL e le relative funzionalità. Queste differenze sono discusse nelle altre parti della serie.

  • 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

Passaggi successivi