Migra tablas sin claves primarias

En esta página, se explica cómo migrar tablas de Oracle que no tienen claves primarias.

Descripción general de la generación automática de clave primaria

Las tablas sin claves primarias no garantizan una replicación coherente. Database Migration Service solo migra tablas que tienen claves primarias. Si tu base de datos de origen incluye tablas que no tienen claves primarias, Database Migration Service puede controlarlo de las siguientes maneras:

  • Cuando conviertes el código fuente y el esquema, Database Migration Service puede crear automáticamente las claves primarias faltantes agregando columnas ROWID en las tablas de destino. Este proceso automatizado requiere que tus tablas de origen cumplan con las siguientes condiciones:
    • No tienen claves primarias.
    • No tengas una restricción UNIQUE sin columnas que admitan valores nulos.
    • No tengas un índice UNIQUE sin columnas que admitan valores nulos.
    Si tus tablas no cumplen con estos requisitos, debes agregar de forma manual las claves primarias faltantes a las tablas en el esquema de PostgreSQL convertido.
  • En los espacios de trabajo de conversión heredados, Database Migration Service no crea claves primarias de forma automática. Si usas un espacio de trabajo de conversión heredado, debes agregar de forma manual las claves primarias faltantes a las tablas en el esquema de PostgreSQL convertido.

Agrega manualmente las claves primarias faltantes

Para migrar tablas de Oracle sin claves primarias, haz lo siguiente:

  1. Usa un espacio de trabajo de conversión para convertir tu código fuente y esquema.
  2. Conéctate a la instancia de Cloud SQL de destino con un cliente de SQL. Puedes usar los siguientes métodos:
    • cliente depsql. Puedes usar este método para conectarte a la IP privada de tu instancia, pero es posible que debas crear una máquina virtual de Compute Engine.
    • Comando gcloud sql connect. Este comando solo funciona para las instancias de Cloud SQL que tienen habilitada una dirección IP pública.
  3. Crea las restricciones de clave primaria que faltan para tus tablas. Para obtener más información sobre las claves primarias, consulta Claves primarias en la documentación de PostgreSQL.

    También puedes expandir las siguientes secciones para ver comandos de SQL de ejemplo:

    Crea claves primarias con columnas existentes

    Es posible que tu tabla ya tenga una clave primaria lógica basada en una columna o una combinación de columnas. Por ejemplo, puede haber columnas con una restricción o un índice únicos configurados. Usa estas columnas para generar una clave primaria nueva para las tablas de tu base de datos de origen. Por ejemplo:

    ALTER TABLE TABLE_NAME
    ADD PRIMARY KEY (COLUMN_NAME);

    Reemplaza lo siguiente:

    • TABLE_NAME por el nombre de la tabla que no tiene una clave primaria.
    • COLUMN_NAME por el nombre de una columna con una restricción o un índice únicos que puedas usar como clave primaria.

    Crea una clave primaria con todas las columnas

    Si no tienes una restricción preexistente que pueda servir como clave primaria, crea claves primarias con todas las columnas de la tabla. Asegúrate de no superar la longitud máxima de la clave primaria que permite tu instancia de PostgreSQL.

    Cuando creas una clave primaria compuesta de esta manera, debes enumerar de forma explícita todos los nombres de las columnas que deseas usar. No es posible usar una sentencia para recuperar todos los nombres de columnas con este propósito. Por ejemplo:

    ALTER TABLE TABLE_NAME
    ADD PRIMARY KEY (COLUMN_NAME_1, COLUMN_NAME_2, COLUMN_NAME_3, ...);

    Reemplaza lo siguiente:

    • TABLE_NAME por el nombre de la tabla que no tiene una clave primaria.
    • COLUMN_NAME_1, COLUMN_NAME_2, etc., por los nombres de las columnas que deseas usar para crear la clave primaria.

    Crea una restricción única con la seudocolumna ROWID

    Las bases de datos de Oracle usan la pseudocolumna ROWID para almacenar la ubicación de cada fila de una tabla. Para migrar tablas de Oracle que no tienen claves primarias, puedes agregar una columna ROWID en la base de datos de PostgreSQL de destino. Database Migration Service propaga la columna con los valores numéricos correspondientes de la pseudocolumna ROWID de Oracle de origen.

    Para agregar la columna y establecerla como la clave primaria, ejecuta lo siguiente:

    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);

    Reemplaza lo siguiente:

    • TABLE_NAME por el nombre de la tabla en la que deseas agregar la columna.
    • CONSTRAINT_DISPLAY_NAME por el identificador de la restricción PRIMARY KEY.

¿Qué sigue?