Migrating Oracle users to Cloud SQL for PostgreSQL: tipi di dati, utenti e tabelle

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questo documento fa parte di una serie che fornisce informazioni e linee guida chiave relative alla pianificazione e all'esecuzione di migrazioni di database Oracle 11g/12c a Cloud SQL per PostgreSQL versione 12. Oltre alla parte introduttiva, la serie include le seguenti parti:

Tipi di dati

Cloud SQL per PostgreSQL fornisce più tipi di dati equivalenti o simili ai tipi di dati forniti da Oracle. Nella tabella seguente sono elencati i più comuni tipi di dati di PostgreSQL, seguiti da un confronto tra i tipi di dati primitivi di Oracle e quelli corrispondenti di Cloud SQL per PostgreSQL. Se non è supportato, viene elencato un tipo di dati alternativo.

Tipi di dati primitivi di Cloud SQL per PostgreSQL 12

Famiglia di tipi di dati Cloud SQL per PostgreSQL Nome del tipo di dati 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 di caratteri variabile, fino a un massimo di n caratteri. Alias di CHARACTER VARYING(n).
CHARACTER VARYING(n) Archivia un numero di caratteri variabile, fino a un massimo di n caratteri.
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 che può essere archiviata è di 1 GB (lo stesso per tutti i tipi di dati di caratteri della stringa).
Numerico SMALLINT Il valore minimo è -32768 | Il valore massimo è 32767.
INTEGER Il valore minimo è -2147483648 | Il valore massimo è 2147483647.
BIGINT Il valore minimo è -263 | Il valore massimo è 263-1.
REAL Numero in virgola mobile a precisione singola (4 byte).
DOUBLE PRECISION Numero a virgola mobile a doppia precisione (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 Intero a incremento automatico. Il valore minimo è 1 | Il valore massimo è 32767.
SERIAL Intero a incremento automatico. Il valore minimo è 1 | Il valore massimo è 2147483647.
BIGSERIAL Intero a incremento automatico. Il valore minimo è 1 | Il valore massimo è 2 63-1.
Monetario 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 è compreso tra 4713 a.C. e 587.4997 d.C. con una risoluzione di 1 giorno.
TIMESTAMP (p) - Valori che contengono parti di data e ora.
- L'intervallo supportato è compreso tra 4713 a.C. e 294.276 d.C.
- La risoluzione è di p cifre frazionarie in secondi (o 1 microsecondo se non specificato).
TIMESTAMP (p) with time zone - Valori che contengono sia la data, l'ora e il fuso orario.
- L'intervallo supportato è compreso tra 4713 a.C. e 294.276 d.C.
- La risoluzione è di p cifre frazionarie in secondi (o 1 microsecondo se non specificato).
TIME (p) - Valori con una parte dell'ora ma senza 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 specificato).
TIME (p) with time zone - Valori con ora e fuso orario ma senza 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 specificato).
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 specificato).
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 e A 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 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, effettivamente un percorso chiuso.
CIRCLE (x,y),r) (punto e raggio centrali)
Logico BOOLEAN - Contiene un valore vero, falso o nullo.
- Accetta valori quali yes, true, t, on e 1 come true.
Bit / dati binari BIT (n) Stringa di bit a 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 testuale.
TSVECTOR Documento di ricerca testo.
TXID_SNAPSHOT Istantanea ID transazione a livello di utente.
UUID Identificativo 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 Confronto tra Cloud SQL per PostgreSQL e Oracle Cloud SQL per PostgreSQL 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. No CHAR(n)
VARCHAR(n) Dimensione massima di 2000 byte. VARCHAR(n)
NCHAR VARYING(n) Stringa UTF-8 di lunghezza variabile
di dimensioni massime: 4000 byte.
No CHARACTER VARYING(n)
VARCHAR2(n) 11g Dimensione massima di 4000 byte, 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 di 2 GB. Sì* TEXT
RAW(n) Dimensione massima di 2000 byte. Sì* BYTEA
LONG RAW Dimensione massima di 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 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 virgola mobile. Sì* DOUBLE PRECISION
DOUBLE PRECISION Numero con virgola mobile. DOUBLE PRECISION
Data e ora DATE Archivia 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 giorno e ora. Sì* INTERVAL DAY TO SECOND(s)
Logico BOOLEAN Valori TRUE, FALSE e NULL. Impossibile assegnare a una colonna della tabella del database. BOOLEAN
XML XMLTYPE Dati XML. No XML
LOB BFILE Puntatore a file binario, con una dimensione massima di 4 GB. No VARCHAR(255)
CLOB Oggetto di grandi dimensioni con caratteri di dimensioni massime pari a 4 GB. No TEXT
BLOB Oggetto binario grande 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
ID RESTO ROWID Indirizzo della riga fisica. No CTID
UROWID(n) ID riga universale degli indirizzi delle righe logiche. No CTID
Spaziale SDO_ GEOMETRY La descrizione geometrica di un oggetto spaziale. Postgres dispone di diversi tipi di geometria, tra cui point, line, path, polygon, circle e così via.
SDO_TOPO_ GEOMETRY Descrive una geometria topologia. PostGIS, un'estensione Postgres ampiamente utilizzata, fornisce diversi tipi di topologia.
SDO_GEORASTER Gli oggetti immagine o griglia raster vengono memorizzati in un'unica riga. PostGIS, un'estensione Postgres ampiamente utilizzata, 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 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 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 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 è compatibile principalmente con Oracle, ma ha un nome diverso.

Tipi definiti dall'utente

Oracle si riferisce ai 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 basati su tipi di dati Oracle integrati.

Tipi definiti dall'utente Oracle Panoramica o implementazione di Oracle Supporto di Cloud SQL per PostgreSQL Soluzione alternativa o alternativa di 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 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 Per risolvere il problema, 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 delle colonne dell'array in Cloud SQL per PostgreSQL per ottenere funzionalità simili 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 tipi senza attributi e metodi. Potrebbero essere utilizzati come riferimento da altri tipi. Tuttavia, devi fornire la definizione del tipo prima di utilizzarla.

CREATE TYPE INCOMPLETE_DEMO;

No N/A

Utenti

Questa sezione illustra la creazione di utenti e l'assegnazione di autorizzazioni e la necessità di convertire le tabelle Oracle in Cloud SQL per tabelle PostgreSQL.

Creazione e autorizzazioni utente

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

In generale esistono due tipi di utenti del database:

  • Amministratori: gestione delle istanze del database, degli utenti e delle risorse.
  • Account utente: operazioni logiche come le applicazioni.

Gli amministratori concedono i privilegi agli account utente e utente per accedere agli oggetti del database. Le autorizzazioni del database Oracle vengono concesse a un utente per operazioni specifiche (ad esempio, creazione di sessioni/connessioni) o oggetti di database specifici (ad esempio, SELECT su una tabella specifica o EXECUTE su una specifica procedura archiviata).

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 di autorizzazioni che possono essere concesse nel suo insieme.

In Cloud SQL per PostgreSQL, utenti e 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 di 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) di proprietà di un utente.

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

OPPURE

CREATE ROLE user WITH LOGIN PASSWORD 'password';

Considerazioni sulla conversione

  • Gli utenti sono definiti a livello della directory principale e sono validi per tutti i database contenuti nello stesso cluster Cloud SQL per PostgreSQL. Questo è simile a "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 per CREATE ROLE ad eccezione del fatto che l'opzione LOGIN è abilitata per impostazione predefinita.

Tabelle

Le tabelle Oracle sono create da molti elementi come tipi di dati di colonna, vincoli di tabella, indici, partizioni, funzionalità proprietarie di tabelle Oracle e altro ancora. Per eseguire correttamente la migrazione nelle tabelle di database Cloud SQL per PostgreSQL, tutti gli elementi della tabella Oracle devono essere convertiti in tabelle Cloud SQL per PostgreSQL. Alcuni elementi sono supportati senza modifiche minime o minime, mentre altri devono essere modificati completamente.

Dal punto di vista della migrazione, la conversione di PL/SQL in Cloud SQL per PostgreSQL probabilmente richiede più impegno, perché la conversione delle tabelle orali in Cloud SQL per PostgreSQL è una fase cruciale con importanza significativa e ulteriori implicazioni sulle prestazioni e sulle dimensioni dei dati.

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

  • Crea sintassi tabella
  • Metadati di tabelle e indici
  • Vincoli dei vincoli
  • Supporto e limitazioni dei tipi di dati
  • Indici
  • Gestione di partizioni e partizioni
  • Manutenzione di tabelle e indici
  • Tabelle temporanee
  • Visualizzazioni
  • Colonne visibili e invisibili (Oracle 12c)
  • Set di caratteri per colonne e tabelle

Passaggi successivi