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 prometen una replicación coherente. Database Migration Service solo migra las tablas que tienen claves primarias. Si tu base de datos de origen incluye tablas que no tienen claves primarias, Database Migration Service puede controlarlas de las siguientes maneras:

  • Cuando conviertes tu código fuente y esquema, Database Migration Service puede crear automáticamente las claves primarias faltantes agregando ROWID columnas en las tablas de destino. Este proceso automatizado requiere que tus tablas de origen cumplan con los siguientes requisitos:
    • No tener claves primarias
    • No tener una restricción UNIQUE sin columnas anulables
    • No tener un índice UNIQUE sin columnas anulables
    Si tus tablas no cumplen con estos requisitos, debes agregar manualmente 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 automáticamente. Si usas un espacio de trabajo de conversión heredado, debes agregar manualmente las claves primarias faltantes a las tablas en el esquema de PostgreSQL convertido.

Cómo agregar claves primarias faltantes de forma manual

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 tu instancia de Cloud SQL de destino con un cliente de SQL. Puedes usar los siguientes métodos:
    • Cliente psql. 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.
    • gcloud sql connect comando. Este comando solo funciona para instancias de Cloud SQL que tienen habilitada una dirección IP pública.
  3. Crea las restricciones de clave primaria faltantes 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 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 restricción o índice únicos que puedes 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 exceder la longitud máxima de la clave primaria permitida por tu instancia de PostgreSQL.

    Cuando creas una clave primaria compuesta de esta manera, debes enumerar explícitamente todos los nombres de columna que deseas usar. No es posible usar una instrucción para recuperar todos los nombres de columna para 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 ROWID seudocolumna para almacenar la ubicación de cada fila en una tabla. Para migrar tablas de Oracle que no tienen claves primarias, puedes agregar una ROWID columna en la base de datos PostgreSQL de destino. Database Migration Service propaga la columna con los valores numéricos correspondientes de la seudocolumna ROWID de Oracle de origen.

    Para agregar la columna y establecerla como 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?