Ce document fait partie d'une série qui fournit des informations et des conseils clés sur la planification et l'exécution des migrations de base de données Oracle® 11g/12c vers Cloud SQL pour PostgreSQL version 12. Outre la section d'introduction à la configuration, la série inclut les éléments suivants :
- Migrer des utilisateurs Oracle vers Cloud SQL pour PostgreSQL : terminologie et fonctionnalités
- Migrer des utilisateurs Oracle vers Cloud SQL pour PostgreSQL : types de données, utilisateurs et tables (ce document)
- Migrer des utilisateurs Oracle vers Cloud SQL pour PostgreSQL : requêtes, procédures stockées, fonctions et déclencheurs
- Migrer des utilisateurs Oracle vers Cloud SQL pour PostgreSQL : sécurité, opérations, surveillance et journalisation
- Migrer des utilisateurs et des schémas de Oracle Database vers Cloud SQL pour PostgreSQL
Types de données
Cloud SQL pour PostgreSQL fournit plusieurs types de données qui sont totalement équivalents ou semblables aux types de données fournis par Oracle. Le tableau suivant répertorie les types de données PostgreSQL les plus courants, suivis d'une comparaison entre les types de données primitifs Oracle et les types de données Cloud SQL pour PostgreSQL correspondants. Lorsqu'un type de données n'est pas compatible, un autre type de données possible est répertorié.
Les 12 types de données primitifs Cloud SQL pour PostgreSQL
Famille de type de données Cloud SQL pour PostgreSQL | Nom du type de données Cloud SQL pour PostgreSQL | Spécification du type de données |
---|---|---|
Chaîne/caractère | CHAR(n) |
Stocke exactement n caractères. Alias de CHARACTER(n) . |
CHARACTER(n) |
Stocke exactement n caractères. |
|
VARCHAR(n) |
Stocke un nombre variable de caractères, jusqu'à un maximum de n caractères. Alias de CHARACTER
VARYING(n) . |
|
CHARACTER VARYING(n) |
Stocke un nombre variable de caractères, jusqu'à un maximum de n caractères. |
|
TEXT |
Variante spécifique de VARCHAR qui ne nécessite pas de limite maximale du nombre de caractères. La chaîne de caractères la plus longue possible pouvant être stockée est de 1 Go (identique pour tous les types de données de chaîne de caractères). |
|
Numérique | SMALLINT |
La valeur minimale est -32768 | La valeur maximale est 32767. |
INTEGER |
La valeur minimale est -217483648 | La valeur maximale est 2147483647. | |
BIGINT |
La valeur minimale est 2^63 | La valeur maximale est 2^63-1. | |
REAL |
Nombre à virgule flottante à simple précision (4 octets). | |
DOUBLE PRECISION |
Nombre à virgule flottante à double précision (8 octets). | |
DECIMAL (p,s) |
Possibilité de stocker n'importe quelle valeur avec p chiffres et s décimales. |
|
NUMERIC(p,s) |
Possibilité de stocker n'importe quelle valeur avec p chiffres et s décimales. |
|
SMALLSERIAL |
Entier à incrémentation automatique. La valeur minimale est 1 | La valeur maximale est 32 767. | |
SERIAL |
Entier à incrémentation automatique. La valeur minimale est 1 | La valeur maximale est 2147483647. | |
BIGSERIAL |
Entier à incrémentation automatique. La valeur minimale est 1 | La valeur maximale est 2^63-1. | |
Monétaire | MONEY |
Montant en devise avec précision décimale fixe. La valeur minimale est -92 233 720 368 547 758.08 | La valeur maximale est +92 233 720 368 547 758.07. |
Date et heure | DATE |
- Valeurs avec une partie date, mais pas de partie heure. : la plage acceptée est comprise entre 4713 av. J.-C. et 5 874 897 apr. J.-C, avec une résolution d'un jour. |
TIMESTAMP (p) |
- Valeurs contenant des parties date et heure. : la plage acceptée est comprise entre 4713 av. J.-C. et 294 276 apr. J.-C, avec une résolution d'un jour. : la résolution est de p chiffres décimaux en secondes (ou d'une microseconde si elle n'est pas spécifiée). |
|
TIMESTAMP (p) with time zone |
- Valeurs contenant à la fois la date, l'heure et le fuseau horaire. : la plage acceptée est comprise entre 4713 av. J.-C. et 294 276 apr. J.-C, avec une résolution d'un jour. : la résolution est de p chiffres décimaux en secondes (ou d'une microseconde si elle n'est pas spécifiée). |
|
TIME (p) |
- Valeurs contenant une partie heure, mais pas de partie date. : la plage acceptée est comprise entre 00:00:00 et 24:00:00. : la résolution est de p chiffres décimaux en secondes (ou d'une microseconde si elle n'est pas spécifiée). |
|
TIME (p) with time zone |
- Valeurs comportant une heure et un fuseau horaire, mais pas de partie date. : la plage acceptée est comprise entre 00:00:00 et 24:00:00. : la résolution est de p chiffres décimaux en secondes (ou d'une microseconde si elle n'est pas spécifiée). |
|
INTERVAL (p) |
- Intervalle de temps - La plage acceptée est comprise entre -178 000 000 et 178 000 000 ans. : la résolution est de p chiffres décimaux en secondes (ou d'une microseconde si elle n'est pas spécifiée). |
|
JSON | JSON |
Données JSON textuelles. |
JSONB |
Données JSON binaires. | |
XML | XML |
Données XML. |
Géométrie |
GEOMETRY |
Type de colonne à spécifier lorsque vous souhaitez utiliser les modèles de données suivants. |
POINT |
Une valeur (x,y) . |
|
LINE |
Un tuple (A, B, C) dans lequel Ax +
By + C = 0 et A et B sont tous deux non nuls.OU Point 1 et point 2 aux formats suivants :
|
|
LSEG |
Un segment de ligne ((x1,y1),(x2,y2)) . |
|
BOX |
Cadre rectangulaire ((x1,y1),(x2,y2)) . |
|
PATH |
Une séquence de points ((x1,y1),...) . |
|
POLYGON |
Une séquence de points qui forme un tracé fermé. | |
CIRCLE |
(x,y),r) (point central et rayon) |
|
Logique | BOOLEAN |
- Contient une valeur "true", "false" ou "null". - Accepte des valeurs telles que yes , true , t , on et 1 comme "true". |
Bit / données binaires | BIT (n) |
Chaîne de bits de longueur fixe. |
BYTEA |
Données binaires / tableau d'octets. | |
Types liés aux adresses réseau | CIDER |
Réseaux IPv4 et IPv6. |
INET |
Hôtes et réseaux IPv4 et IPv6. | |
MACADDR |
Adresses MAC. | |
MACADDR8 |
Adresses MAC (format EUI-64). | |
Others | PG_LSN |
Numéro de séquence de journal Cloud SQL pour PostgreSQL. |
TSQUERY |
Requête de recherche de texte. | |
TSVECTOR |
Document de recherche de texte. | |
TXID_SNAPSHOT |
Instantané d'ID de transaction au niveau utilisateur. | |
UUID |
identifiant universel unique. |
Conversion de types de données Oracle vers Cloud SQL pour PostgreSQL
Famille de types de données Oracle | Nom du type de données Oracle | Spécification du type de données Oracle | Équivalent Cloud SQL pour PostgreSQL vers Oracle | Type correspondant/alternatif Cloud SQL pour PostgreSQL |
---|---|---|---|---|
Chaîne/caractère | CHAR(n) |
Taille maximale de 2 000 octets. | Oui | CHAR(n) |
CHARACTER(n) |
Taille maximale de 2 000 octets. | Oui | CHARACTER(n) |
|
NCHAR(n) |
Taille maximale de 2 000 octets. | Non | CHAR(n) |
|
VARCHAR(n) |
Taille maximale de 2 000 octets. | Oui | VARCHAR(n) |
|
NCHAR VARYING(n) |
Chaîne UTF-8 à longueur variable. Taille maximale de 4 000 octets. |
Non | CHARACTER VARYING(n) |
|
VARCHAR2(n)
11g |
Taille maximale de 4 000 octets. Taille maximale de 32 Ko en PL/SQL. | Oui* | VARCHAR(n) |
|
VARCHAR2(n) |
Taille maximale de 32 767 octets MAX_STRING_SIZE= EXTENDED . |
Oui* | VARCHAR(n) |
|
NVARCHAR2(n) |
Taille maximale de 4 000 octets. | Non | VARCHAR(n) |
|
LONG |
Taille maximale de 2 Go. | Oui* | TEXT |
|
RAW(n) |
Taille maximale de 2 000 octets. | Oui* | BYTEA |
|
LONG RAW |
Taille maximale de 2 Go. | Oui* | BYTEA |
|
Numérique | NUMBER |
Nombre à virgule flottante. | Oui* | NUMERIC(p,s) |
NUMBER(*) |
Nombre à virgule flottante. | Oui* | DOUBLE PRECISION |
|
NUMERIC(p,s) |
La précision peut aller de 1 à 38. | Oui | NUMERIC(p,s) |
|
FLOAT(p,s) |
Nombre à virgule flottante. | Oui* | DOUBLE PRECISION |
|
DEC(p,s) |
Nombre à virgule fixe. | Oui | DEC(p,s) |
|
DECIMAL(p,s) |
Nombre à virgule fixe. | Oui | DECIMAL(p,s) |
|
INT |
Entier de 38 chiffres. | Oui | INT |
|
INTEGER |
Entier de 38 chiffres. | Oui | INTEGER |
|
SMALLINT |
Entier de 38 chiffres. | Oui | SMALLINT |
|
REAL |
Nombre à virgule flottante. | Oui* | DOUBLE PRECISION |
|
DOUBLE PRECISION |
Nombre à virgule flottante. | Oui | DOUBLE PRECISION |
|
Date et heure | DATE |
Stocke les données de date et d'heure (année, mois, jour, heure, minute et seconde). | Oui* | TIMESTAMP(0) |
TIMESTAMP(p) |
Date et heure avec fraction. | Oui | TIMESTAMP(p) |
|
TIMESTAMP(p) WITH TIME ZONE |
Date et heure avec fraction et fuseau horaire. | Oui | TIMESTAMP (p) WITH TIME ZONE |
|
INTERVAL YEAR(p) TO MONTH |
Intervalle de date. | Oui* | INTERVAL YEAR TO MONTH |
|
INTERVAL DAY(p) TO SECOND(s) |
Intervalle de jour et d'heure. | Oui* | INTERVAL DAY TO SECOND(s) |
|
Logique | BOOLEAN |
Valeurs TRUE , FALSE et NULL . Ne peuvent pas être attribuées à une colonne de table de base de données. |
Oui | BOOLEAN |
XML | XMLTYPE |
Données XML. | Non | XML |
LOB | BFILE |
Pointeur vers un fichier binaire, d'une taille maximale de 4 Go. | Non | VARCHAR(255) |
CLOB |
Objet volumineux à base de caractères avec une taille de fichier maximale de 4 Go. | Non | TEXT |
|
BLOB |
Objet binaire volumineux d'une taille maximale de 4 Go. | Non | BYTEA |
|
NCLOB |
Chaîne Unicode de longueur variable avec une taille de fichier maximale de 4 Go. | Non | TEXT |
|
ROWID | ROWID |
Adresse de ligne physique. | Non | CTID |
UROWID(n) |
ID de ligne universelle des adresses de ligne logique. | Non | CTID |
|
Spatial | SDO_ GEOMETRY |
Description géométrique d'un objet spatial. | Oui | Postgres utilise différents types de géométrie, y compris point , line , path , polygon , circle , etc. |
SDO_TOPO_ GEOMETRY |
Décrit une géométrie de topologie. | Oui | PostGIS, une extension Postgres couramment utilisée, fournit plusieurs types de topologie. | |
SDO_GEORASTER |
Une grille matricielle ou un objet image est stocké sur une seule ligne. | Oui | PostGIS, une extension Postgres couramment utilisée, fournit un outil permettant de charger des fichiers raster dans la base de données. | |
Types de contenu | ORDDicom |
Compatible avec le stockage et la gestion des fichiers de données au format DICOM (Digital Imaging and Communications in Medicine). | Oui, avec solution de contournement | Postgres fournit un type binaire, bytea , pour le stockage d'objets volumineux. |
ORDDoc |
Compatible avec le stockage et la gestion de tout type de données multimédias. | Oui, avec solution de contournement | Postgres fournit un type binaire, bytea , pour le stockage d'objets volumineux. |
|
ORDImage |
Compatible avec le stockage et la gestion des données d'image. | Oui, avec solution de contournement | Postgres fournit un type binaire, bytea , pour le stockage d'objets volumineux. |
|
ORDVideo |
Compatible avec le stockage et la gestion des données vidéo. | Solution | Postgres fournit un type binaire, bytea , pour le stockage d'objets volumineux. |
* Le type de données correspondant dans Cloud SQL pour PostgreSQL est essentiellement compatible avec Oracle, mais porte un nom différent.
Types définis par l'utilisateur
Oracle fait référence aux types définis par l'utilisateur (UDT) en tant que OBJECT TYPES
, qui sont gérés à l'aide de PL/SQL. Les types définis par l'utilisateur permettent à celui-ci de créer des types de données complexes, dédiés aux applications et basés sur la liste de types de données Oracle intégrés.
Types Oracle définis par l'utilisateur | Présentation ou mise en œuvre dans Oracle | Compatibilité avec Cloud SQL pour PostgreSQL | Solution Cloud SQL pour PostgreSQL correspondante ou alternative |
---|---|---|---|
Type de données abstrait (Abstract data type, ADT) | CREATE TYPE ADT_DEMO AS OBJECT ( |
Partielle, avec une syntaxe différente | Les types composites de Cloud SQL pour PostgreSQL sont spécifiés par une liste de noms d'attributs et de types de données :
|
Type ARRAY | CREATE TYPE VARRAY_DEMO AS VARRAY (5) OF VARCHAR2(25); |
Non | Pour contourner ce problème, Cloud SQL pour PostgreSQL permet de définir des colonnes en tant que tableau :
|
Type de table imbriquée | CREATE TYPE NTT_DEMO AS OBJECT ( |
Non | Pour contourner le problème, utilisez une combinaison de types composites et de définition de colonne de tableau dans Cloud SQL pour PostgreSQL, afin d'obtenir des fonctionnalités semblable au type de table imbriquée d'Oracle.
|
Type incomplet | Les types incomplets sont des types sans attributs ni méthodes. Ils peuvent être référencés par d'autres types. Cependant, vous devez fournir la définition du type avant de l'utiliser.
|
Non | N/A |
Utilisateurs
Cette section explique comment créer des utilisateurs et leur attribuer des autorisations, ainsi que la nécessité de convertir des tables Oracle en tables Cloud SQL pour PostgreSQL.
Création d'utilisateurs et autorisations
Les comptes utilisateur de la base de données Oracle ("user" et "schema" sont identiques dans Oracle) peuvent être utilisés pour s'authentifier et se connecter aux sessions de base de données, tandis que l'autorisation d'accès est définie au niveau de chaque utilisateur pour des objets et des autorisations spécifiques.
En général, il existe deux types d'utilisateurs de base de données :
- Administrateurs : gestion de l'instance de base de données, des utilisateurs et des ressources.
- Comptes utilisateur : diffusion d'opérations logiques telles que des applications.
Les administrateurs accordent des droits aux comptes utilisateur et d'application pour accéder aux objets de la base de données. Les autorisations de base de données Oracle sont accordées à un utilisateur pour l'accès à des opérations spécifiques (par exemple, créer une session/connexion) ou à des objets de base de données spécifiques (par exemple, SELECT
sur une table spécifique ou EXECUTE
sur une procédure stockée spécifique).
Oracle utilise les concepts d'utilisateur et de rôle. Les utilisateurs permettent de s'authentifier auprès de la base de données, et les rôles fournissent un regroupement d'autorisations pouvant être accordées de manière globale.
Dans Cloud SQL pour PostgreSQL, les utilisateurs et les rôles sont synonymes. Un utilisateur Cloud SQL pour PostgreSQL est un rôle disposant de l'autorisation connect
. Vous pouvez utiliser les instructions CREATE USER
ou CREATE ROLE
pour créer un utilisateur de base de données. Contrairement à Oracle, dans Cloud SQL pour PostgreSQL, les schémas et les utilisateurs sont créés séparément. Un schéma est une collection d'objets (par exemple, des tables, des types de données, des fonctions, etc.) et appartient à un utilisateur.
Créer un utilisateur Oracle | |
---|---|
CREATE USER user_name IDENTIFIED BY password; |
|
Créer un utilisateur Cloud SQL pour PostgreSQL | |
CREATE USER user WITH PASSWORD 'password';
OU
|
Remarques sur les conversions
- Les utilisateurs sont définis au niveau racine et sont valables pour toutes les bases de données contenues dans le même cluster Cloud SQL pour PostgreSQL. Ce système est semblable aux "utilisateurs communs" d'Oracle 12c.
- La syntaxe
CREATE USER
de Cloud SQL pour PostgreSQL est différente de celle d'Oracle et ne peut pas être migrée telle quelle.CREATE USER
dans Cloud SQL pour PostgreSQL est un alias pourCREATE ROLE
, mais avec l'optionLOGIN
activée par défaut.
Tables
Les tables Oracle sont construites à partir de nombreux éléments tels que les types de données de colonne, les contraintes de table, les index, les partitions, les fonctionnalités propriétaires des tables Oracle, etc. Pour réussir la migration vers les tables de base de données Cloud SQL pour PostgreSQL, tous les éléments de table Oracle doivent être convertis en tables PostgreSQL. Certains éléments sont compatibles avec pas ou peu de modifications, tandis que d'autres doivent être entièrement modifiés.
Du point de vue de la migration, la conversion de PL/SQL en Cloud SQL for PostgreSQL nécessite probablement davantage d'efforts, car la conversion de tables Oracle en tables Cloud SQL for PostgreSQL est une étape essentielle qui a une importance significative et des conséquences sur les performances et la taille des données.
Voici les principales différences entre les tables Oracle et Cloud SQL pour PostgreSQL et les fonctionnalités associées. Ces différences sont abordées dans les autres parties de la série.
- Syntaxe de création de table
- Métadonnées de table et d'index
- Compatibilité avec les contraintes
- Types de données acceptés et limites
- Index
- Partitions et gestion des partitions
- Gestion des tables et des index
- Tables temporaires
- Vues
- Colonnes visibles et invisibles (Oracle 12c)
- Jeux de caractères des tables et des colonnes
Étape suivante
- En savoir plus sur les comptes utilisateur Cloud SQL for PostgreSQL.
- Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.