Cette page explique comment migrer des tables Oracle qui ne possèdent pas de clés primaires.
La section Génération automatique de clés primaires explique comment Database Migration Service gère les tables sources sans clé primaire.
La section Ajouter manuellement des clés primaires manquantes présente des exemples de requêtes que vous pouvez utiliser pour ajouter des clés primaires manquantes dans votre schéma converti.
Présentation de la génération automatique de clés primaires
Les tables sans clé primaire ne garantissent pas une réplication cohérente. Database Migration Service ne migre que les tables qui possèdent des clés primaires. Si votre base de données source inclut des tables sans clé primaire, Database Migration Service peut les gérer de différentes manières :
- Lorsque vous
convertissez votre code source et votre schéma, Database Migration Service
peut créer automatiquement les clés primaires manquantes
en ajoutant des colonnes
ROWIDdans les tables de destination. Ce processus automatisé nécessite que vos tables sources :- ne possèdent pas déjà de clés primaires ;
- ne possèdent pas de contrainte
UNIQUEsans colonne pouvant accepter la valeur nulle ; - ne possèdent pas d'index
UNIQUEsans colonne pouvant accepter la valeur nulle.
- Dans les anciens espaces de travail de conversion, Database Migration Service ne crée pas automatiquement de clés primaires. Si vous utilisez un ancien espace de travail de conversion, vous devez ajouter manuellement les clés primaires manquantes aux tables du schéma PostgreSQL converti.
Ajouter manuellement des clés primaires manquantes
Pour migrer des tables Oracle sans clé primaire, procédez comme suit :
- Utilisez un espace de travail de conversion pour convertir votre code source et votre schéma.
- Pour les espaces de travail de conversion standards, consultez Convertir votre code source et votre schéma.
- Pour les anciens espaces de travail de conversion, consultez Utiliser les anciens espaces de travail de conversion.
- Connectez-vous à votre instance Cloud SQL de destination avec un client SQL. Vous
pouvez utiliser les méthodes suivantes
- Client
psql. Vous pouvez utiliser cette méthode pour vous connecter à l'adresse IP privée de votre instance, mais vous devrez peut-être créer une machine virtuelle Compute Engine. -
gcloud sql connectcommande. Cette commande ne fonctionne que pour les instances Cloud SQL pour lesquelles une adresse IP publique est activée.
- Client
- Créez les contraintes de clé primaire manquantes pour vos tables. Pour en savoir plus
sur les clés primaires, consultez
Clés primaires dans la documentation PostgreSQL.
Vous pouvez également développer les sections suivantes pour afficher des exemples de commandes SQL :
Créer des clés primaires à l'aide de colonnes existantes
Votre table peut déjà posséder une clé primaire logique basée sur une colonne ou une combinaison de colonnes. Par exemple, des colonnes peuvent être configurées avec une contrainte ou un index unique. Utilisez ces colonnes pour générer une clé primaire pour les tables de votre base de données source. Exemple :
ALTER TABLE TABLE_NAME ADD PRIMARY KEY (COLUMN_NAME);
Remplacez les éléments suivants :
- TABLE_NAME par le nom de votre table sans clé primaire.
- COLUMN_NAME par le nom d'une colonne avec une contrainte ou un index unique que vous pouvez utiliser comme clé primaire.
Créer une clé primaire à l'aide de toutes les colonnes
Si vous ne disposez pas d'une contrainte préexistante pouvant servir de clé primaire, créez des clés primaires à l'aide de toutes les colonnes de la table. Assurez-vous de ne pas dépasser la longueur maximale de la clé primaire autorisée par votre instance PostgreSQL.
Lorsque vous créez une clé primaire composite de cette manière, vous devez répertorier explicitement tous les noms de colonnes que vous souhaitez utiliser. Il n'est pas possible d'utiliser une instruction pour récupérer tous les noms de colonnes à cet effet. Exemple :
ALTER TABLE TABLE_NAME ADD PRIMARY KEY (COLUMN_NAME_1, COLUMN_NAME_2, COLUMN_NAME_3, ...);
Remplacez les éléments suivants :
- TABLE_NAME par le nom de votre table sans clé primaire.
- COLUMN_NAME_1, COLUMN_NAME_2 etc. par les noms des colonnes que vous souhaitez utiliser pour créer la clé primaire.
Créer une contrainte unique avec la pseudocolonne
ROWIDLes bases de données Oracle utilisent la
ROWIDpseudocolonne pour stocker l'emplacement de chaque ligne dans une table. Pour migrer des tables Oracle sans clé primaire, vous pouvez ajouter uneROWIDcolonne dans la base de données PostgreSQL de destination. Database Migration Service remplit la colonne avec les valeurs numériques correspondantes de la pseudocolonneROWIDOracle source.Pour ajouter la colonne et la définir comme clé primaire, exécutez la commande suivante :
ALTER TABLE TABLE_NAME ADD COLUMN rowid numeric(33,0) NOT NULL; CREATE SEQUENCE TABLE_NAME_rowid_seq INCREMENT BY -1 START WITH -1 OWNED BY TABLE_NAME.rowid; ALTER TABLE TABLE_NAME ALTER COLUMN rowid SET DEFAULT nextval('TABLE_NAME_rowid_seq'); ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_DISPLAY_NAME PRIMARY KEY (rowid);
Remplacez les éléments suivants :
- TABLE_NAME par le nom de la table dans laquelle vous souhaitez ajouter la colonne.
- CONSTRAINT_DISPLAY_NAME par l'identifiant de la contrainte
PRIMARY KEY.
Étape suivante
- Continuez à utiliser les espaces de travail de conversion.
- En savoir plus sur les fonctionnalités de conversion optimisées par Gemini.