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:
- 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 logging
- Migrazione di utenti e schemi di Oracle Database a 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 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:
|
|
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. | Sì | CHAR(n) |
CHARACTER(n) |
Dimensione massima di 2000 byte. | Sì | CHARACTER(n) |
|
NCHAR(n) |
Dimensione massima di 2000 byte. | No | CHAR(n) |
|
VARCHAR(n) |
Dimensione massima di 2000 byte. | Sì | 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) |
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. | Sì | NUMERIC(p,s) |
|
FLOAT(p,s) |
Numero con 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 virgola mobile. | Sì* | DOUBLE PRECISION |
|
DOUBLE PRECISION |
Numero con virgola mobile. | Sì | 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. | 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) |
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. |
Sì | 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. | Sì | Postgres ha vari tipi di geometria, tra cui point ,
line , path ,
polygon , circle , .... |
SDO_TOPO_ GEOMETRY |
Descrive la geometria di una topologia. | Sì | 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. | Sì | 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 ( |
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:
|
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 composti e definizione di colonne array in Cloud SQL per PostgreSQL per ottenere una funzionalità simile al tipo di tabella nidificata di Oracle.
|
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.
|
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
|
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 diCREATE ROLE
, tranne per il fatto che l'opzioneLOGIN
è 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
- Scopri di più sugli account utente Cloud SQL per PostgreSQL.
- Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Dai un'occhiata al nostro Cloud Architecture Center.