Migrer des tables sans clé primaire

Cette page explique comment migrer des tables Oracle qui ne possèdent pas de clés primaires.

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 ROWID dans 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 UNIQUE sans colonne pouvant accepter la valeur nulle ;
    • ne possèdent pas d'index UNIQUE sans colonne pouvant accepter la valeur nulle.
    Si vos tables ne répondent pas à ces exigences, vous devez ajouter manuellement les clés primaires manquantes aux tables du schéma PostgreSQL converti.
  • 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 :

  1. Utilisez un espace de travail de conversion pour convertir votre code source et votre schéma.
  2. 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 connect commande. Cette commande ne fonctionne que pour les instances Cloud SQL pour lesquelles une adresse IP publique est activée.
  3. 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 ROWID

    Les bases de données Oracle utilisent la ROWID pseudocolonne pour stocker l'emplacement de chaque ligne dans une table. Pour migrer des tables Oracle sans clé primaire, vous pouvez ajouter une ROWID colonne dans la base de données PostgreSQL de destination. Database Migration Service remplit la colonne avec les valeurs numériques correspondantes de la pseudocolonne ROWID Oracle 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