Migrer des utilisateurs Oracle vers Cloud SQL pour MySQL : types de données, utilisateurs et tables

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 des instances Cloud SQL pour MySQL de deuxième génération, version 5.7. La série comprend les parties suivantes :

Types de données

MySQL fournit plusieurs types de données totalement équivalents ou semblables aux types de données fournis par Oracle. Le tableau suivant répertorie les types de données MySQL les plus courants, suivis d'une comparaison entre les types de données primitifs Oracle et les types de données MySQL correspondants : si un type de données n'est pas accepté, un autre type de données est répertorié. Notez qu'une base de données MySQL version 5.7 est limitée à 65 535 octets pour toute la ligne (en fonction du jeu de caractères utilisé).

Types de données primitifs MySQL 5.7

Famille de types de données MySQL Nom du type de données MySQL Spécification du type de données
Chaîne/
caractère
CHAR(n)
Stocke exactement n caractères.
VARCHAR(n)
Stocke un nombre variable de caractères, jusqu'à un maximum de n caractères.
BINARY
Stocke exactement n octets.
VARBINARY(n)
Stocke un nombre variable de caractères, jusqu'à un maximum de n octets.
BLOB
Objet binaire volumineux pouvant contenir une quantité variable de données.
TEXT
Variante spécifique de VARCHAR qui ne nécessite pas de limite maximale du nombre de caractères.
ENUM
Objet chaîne ayant une valeur sélectionnée parmi une liste de valeurs autorisées qui sont explicitement énumérées dans la spécification de colonne lors de la création de la table.
SET
Objet chaîne pouvant avoir aucune ou plusieurs valeurs, chacune devant être choisie dans une liste de valeurs autorisées spécifiées lors de la création de la table.
Numérique
INT
La valeur minimale est -217483648 | La valeur maximale est 2147483647.
INTEGER
La valeur minimale est -217483648 | La valeur maximale est 2147483647.
TINYINT
La valeur minimale est -128 | La valeur maximale est 127.
SMALLINT
La valeur minimale est -32768 | La valeur maximale est 32767.
MEDIUMINT
La valeur minimale est -8388608 | La valeur maximale est 8388607.
BIGINT
La valeur minimale est 2^63 | La valeur maximale est 2^63-1.
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.
FLOAT(m,d)
Les valeurs peuvent être stockées avec un maximum de m chiffres, dont d chiffres après la virgule.
DOUBLE(m,d)
Les valeurs peuvent être stockées avec un maximum de m chiffres, dont d chiffres après la virgule.
BIT(m)
Stockage de valeurs de m bits, m étant compris entre 1 et 64.
Date et heure
DATE
- Valeurs avec une partie date, mais pas de partie heure.
- Récupère et affiche les valeurs DATE au format 'YYYY-MM-DD'.
- La plage acceptée est comprise entre '1000-01-01' et '9999-12-31'.
DATETIME
- Valeurs contenant des parties date et heure.
- Récupère et affiche les valeurs DATETIME au format 'YYYY-MM-DD HH:MM:SS'.
- La plage acceptée est comprise entre '1000-01-01 00:00:00' et '9999-
12-31 23:59:59'.
TIMESTAMP
- Valeurs contenant des parties date et heure.
TIMESTAMP a une plage comprise entre '1970-01-01 00:00:01' UTC et  '2038-01-19 03:14:07' UTC.
TIME
- Les valeurs peuvent aller de '-838:59:59' à '838:59:59'.
- La partie heure peut atteindre des valeurs aussi élevées, car le type TIME peut représenter non seulement une heure de la journée (qui doit être inférieure à 24 heures), mais également une période écoulée ou un intervalle entre deux événements (qui peuvent être beaucoup plus longs que 24 heures, voire négatifs).
YEAR
- Type YEAR à 1 octet utilisé pour représenter les valeurs d'année.
- Peut être déclaré comme YEAR ou YEAR(n) avec une largeur d'affichage de n caractères.
JSON
JSON
Données JSON textuelles en tant que type de données.

Spatial (géométrie)
GEOMETRY
Type de colonne à spécifier lorsque vous souhaitez utiliser les modèles de données qui suivent dans le reste de ce tableau.
POINT
Une valeur (x,y).
LINESTRING
Une ligne (pt1, pt2).
POLYGON
Une séquence de points qui forme un tracé fermé.
MULTIPOINT
Collection de valeurs POINT.
MULTI-LINESTRING
Collection de valeurs LINE.
MULTIPOLYGON
Collection de valeurs POLYGON.
GEOMETRY-COLLECTION
Collection de types de données géométriques.
Logique
BOOLEAN
- Contient une valeur "true" ou "false".
- Accepte des valeurs telles que TRUE, '1' et 1 comme "true".
- Utilise 1 octet de stockage et peut stocker des valeurs NULL.

Conversion de types de données Oracle vers MySQL

Famille de types de données Oracle Nom du type de données Oracle Spécification du type de données Oracle Équivalent MySQL vers Oracle MySQL correspondant/alternative
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. Oui
NCHAR(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.
Oui
NCHAR
VARYING(n)
VARCHAR2(n)
11g
Taille maximale de 4 000 octets. Taille maximale de 32 Ko en PL/SQL. Non
VARCHAR(n)
VARCHAR2(n)
12g
Taille maximale de 32 767 octets MAX_STRING_SIZE=EXTENDED. Non
VARCHAR(n)
NVARCHAR2(n)
Taille maximale de 4 000 octets. Non
VARCHAR(n)
LONG
Taille maximale de 2 Go. Oui
LONG
RAW(n)
Taille maximale de 2 000 octets. Non
VARBINARY(n)
LONG RAW
Taille maximale de 2 Go. Non
LONGTEXT
Numérique
NUMBER
Nombre à virgule flottante. Non
NUMERIC/DECIMAL(p,s)
Numérique
NUMBER
Nombre à virgule flottante. Non
NUMERIC/DECIMAL(p,s)
NUMBER(*)
Nombre à virgule flottante. Non
DOUBLE
NUMERIC(p,s)
La précision peut aller de 1 à 38. Oui
NUMERIC(p,s)
FLOAT(p)
Nombre à virgule flottante. Oui
FLOAT(p)
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
REAL
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
DATE
TIMESTAMP(p)
Date et heure avec fraction. Oui
TIMESTAMP
TIMESTAMP(p)
WITH TIME ZONE
Date et heure avec fraction et fuseau horaire. Non
DATETIME(n)
INTERVAL
YEAR(p)
TO MONTH
Intervalle de date. Non
VARCHAR(n)
INTERVAL
DAY(p)
TO SECOND(s)
Intervalle de jour et d'heure. Non
VARCHAR(n)
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
LONGTEXT
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
LONGTEXT
BLOB
Objet binaire volumineux d'une taille maximale de 4 Go. Oui
BLOB
NCLOB
Chaîne Unicode de longueur variable avec une taille de fichier maximale de 4 Go. Non
LONGTEXT
ROWID
ROWID
Adresse de ligne physique. Non
CHAR(n)
UROWID(n)
ID de ligne universelle des adresses de ligne logique. Non
VARCHAR(n)
Spatial
SDO_GEOMETRY
Description géométrique d'un objet spatial. Non
N/A
SDO_TOPO_GEOMETRY
Décrit une géométrie de topologie. Non
N/A
SDO_GEORASTER
Une grille matricielle ou un objet image est stocké sur une seule ligne. Non
N/A
Types de contenu
ORDDicom
Compatible avec le stockage et la gestion des données audio. Non
N/A
ORDDicom
Compatible avec le stockage et la gestion des données au format DICOM (Digital Imaging and Communications in Medicine). Non
N/A
ORDDoc
Compatible avec le stockage et la gestion de tout type de données multimédias. Non
N/A
ORDImage
Compatible avec le stockage et la gestion des données d'image. Non
N/A
ORDVideo
Compatible avec le stockage et la gestion des données vidéo. Non
N/A

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.

Voici un exemple UDT :

SQL> CREATE OR REPLACE TYPE EMP_PHONE_NUM AS OBJECT (
     PHONE_NUM VARCHAR2(11));

Notes de conversion

MySQL ne permet pas aux utilisateurs de créer des types dédiés et définis.

Utilisateurs et tables

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

Création d'utilisateurs et autorisations

Les comptes utilisateur de la base de données Oracle ("utilisateur" et "schéma" 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).

Remarques sur les conversions

  • La syntaxe CREATE USER de MySQL est différente de celle d'Oracle et ne peut pas être migrée telle quelle. De plus, les deux bases de données ont une architecture utilisateur différente.
  • Lorsqu'un administrateur crée un utilisateur dans MySQL, il doit spécifier le serveur auquel l'utilisateur doit se connecter pour accéder à la base de données. Le serveur peut être une adresse IP ou un DNS spécifique, ou il est autorisé à se connecter depuis toutes les sources à l'aide du signe générique %.
  • Comme le nom d'utilisateur MySQL est un rattachement en deux parties entre le nom d'utilisateur et le serveur à partir duquel l'utilisateur serait autorisé à se connecter, un utilisateur peut être créé avec le même nom, mais à partir d'un serveur différent de l'adresse client (IP/DNS).
  • Une fois l'utilisateur créé, il peut être autorisé à accéder aux objets de base de données faisant partie d'une base de données ou d'un schéma spécifique.
  • Les utilisateurs peuvent également bénéficier d'autorisations supplémentaires en fonction des autorisations Cloud SQL pour MySQL accordées (par exemple, l'utilisateur racine disposera de tous les droits, à l'exception des privilèges SUPER et FILE). Les utilisateurs Oracle peuvent être associés à un espace de table dédié dans MySQL. Cette fonctionnalité n'est donc pas pertinente.

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 MySQL, tous les éléments de table Oracle doivent être convertis en tables MySQL. 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 MySQL nécessite probablement davantage d'efforts, car la conversion de tables Oracle en tables MySQL 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 MySQL et les fonctionnalités associées. Ces différences sont abordées dans les autres parties de la série.

  • Sensibilité à la casse (noms des tables et des colonnes)
  • 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