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:
- Migrazione degli utenti Oracle a Cloud SQL per PostgreSQL: terminologia e funzionalità
- Migrazione degli utenti Oracle a Cloud SQL per PostgreSQL: tipi di dati, utenti e tabelle (questo documento)
- Migrazione degli utenti Oracle a Cloud SQL per PostgreSQL: query, stored procedure, funzioni e trigger
- Migrazione degli utenti Oracle a Cloud SQL per PostgreSQL: sicurezza, operazioni, monitoraggio e registrazione
- Eseguire la migrazione di utenti e schemi di database Oracle in Cloud SQL per PostgreSQL
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:
|
|
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. | Sì | CHAR(n) |
CHARACTER(n) |
Dimensioni massime di 2000 byte. | Sì | CHARACTER(n) |
|
NCHAR(n) |
Dimensioni massime di 2000 byte. | No | CHAR(n) |
|
VARCHAR(n) |
Dimensioni massime di 2000 byte. | Sì | 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) |
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. | Sì | NUMERIC(p,s) |
|
FLOAT(p,s) |
Numero con rappresentazione in virgola mobile. | Sì* | DOUBLE PRECISION |
|
DEC(p,s) |
Numero a virgola fissa. | Sì | DEC(p,s) |
|
DECIMAL(p,s) |
Numero a virgola fissa. | Sì | DECIMAL(p,s) |
|
INT |
Numero intero di 38 cifre. | Sì | INT |
|
INTEGER |
Numero intero di 38 cifre. | Sì | INTEGER |
|
SMALLINT |
Numero intero di 38 cifre. | Sì | SMALLINT |
|
REAL |
Numero con rappresentazione in virgola mobile. | Sì* | DOUBLE PRECISION |
|
DOUBLE PRECISION |
Numero con rappresentazione in virgola mobile. | Sì | 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. | Sì | TIMESTAMP(p) |
|
TIMESTAMP(p) WITH TIME ZONE |
Data e ora con frazione e fuso orario. | Sì | 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. |
Sì | 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. | Sì | Postgres ha vari tipi di geometria, tra cui point , line , path , polygon , circle e così via. |
SDO_TOPO_ GEOMETRY |
Descrive una geometria della topologia. | Sì | 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. | Sì | 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 ( |
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:
|
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:
|
Tipo di tabella nidificata | CREATE TYPE NTT_DEMO AS OBJECT ( |
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.
|
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.
|
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
|
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 perCREATE ROLE
, tranne per il fatto che l'opzioneLOGIN
è 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
- Scopri di più sugli account utente di Cloud SQL per PostgreSQL.
- Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.