En esta página, se explica cómo migrar tablas de Oracle que no tienen claves primarias.
En Generación automática de clave primaria primarias, se explica cómo Database Migration Service controla las tablas de origen a las que les faltan claves primarias.
En Agrega claves primarias faltantes de forma manual, se muestran consultas de ejemplo que puedes usar para agregar claves primarias faltantes en tu esquema convertido.
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
ROWIDen 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
UNIQUEsin columnas que admitan valores nulos. - No tengas un índice
UNIQUEsin columnas que admitan valores nulos.
- 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:
- Usa un espacio de trabajo de conversión para convertir tu código fuente y esquema.
- Para los espacios de trabajo de conversión estándar, consulta Convierte tu código fuente y esquema.
- Para los espacios de trabajo de conversión heredados, consulta Trabaja con espacios de trabajo de conversión heredados.
- Conéctate a la instancia de Cloud SQL de destino con un cliente de SQL. Puedes
usar los siguientes métodos:
-
cliente de
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. -
Comando
gcloud sql connect. Este comando solo funciona para las instancias de Cloud SQL que tienen habilitada una dirección IP pública.
-
cliente de
- 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
ROWIDLas bases de datos de Oracle usan la pseudocolumna
ROWIDpara almacenar la ubicación de cada fila de una tabla. Para migrar tablas de Oracle que no tienen claves primarias, puedes agregar una columnaROWIDen la base de datos de PostgreSQL de destino. Database Migration Service propaga la columna con los valores numéricos correspondientes de la pseudocolumnaROWIDde 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?
- Continúa trabajando con los espacios de trabajo de conversión.
- Obtén más información sobre las funciones de conversión potenciadas por Gemini.