Nesta página, explicamos como migrar tabelas do Oracle que não têm chaves primárias.
A geração automática de chave primária explica como o Database Migration Service lida com tabelas de origem que não têm chaves primárias.
Adicionar chaves primárias ausentes manualmente mostra exemplos de consultas que podem ser usadas para adicionar chaves primárias ausentes no esquema convertido.
Visão geral da geração automática de chave primária
Tabelas sem chaves primárias não garantem uma replicação consistente. O Database Migration Service só migra tabelas que têm chaves primárias. Se o banco de dados de origem incluir tabelas sem chaves primárias, o Database Migration Service poderá lidar com isso das seguintes maneiras:
- Quando você
converte o código-fonte e o esquema, o Database Migration Service
pode criar automaticamente as chaves primárias
ausentes adicionando colunas
ROWIDnas tabelas de destino. Esse processo automatizado exige que as tabelas de origem:- Não têm chaves primárias.
- Não use uma restrição
UNIQUEsem colunas anuláveis. - Não tenha um índice
UNIQUEsem colunas anuláveis.
- Em espaços de trabalho de conversão legados, o Database Migration Service não cria chaves primárias automaticamente. Se você usa um espaço de trabalho de conversão legado, precisa adicionar manualmente as chaves primárias ausentes às tabelas no esquema do PostgreSQL convertido.
Adicionar chaves primárias ausentes manualmente
Para migrar tabelas do Oracle sem chaves primárias, faça o seguinte:
- Use um espaço de trabalho de conversão para converter o código-fonte e o esquema.
- Para espaços de trabalho de conversão padrão, consulte Converter o código-fonte e o esquema.
- Para espaços de trabalho de conversão legados, consulte Trabalhar com espaços de trabalho de conversão legados.
- Conecte-se à instância de destino do Cloud SQL com um cliente SQL. Você
pode usar os seguintes métodos:
-
psqlcliente. É possível usar esse método para se conectar ao IP privado da instância, mas talvez seja necessário criar uma máquina virtual do Compute Engine. -
Comando
gcloud sql connect. Esse comando funciona apenas para instâncias do Cloud SQL que têm um endereço IP público ativado.
-
- Crie as restrições de chave primária que estão faltando nas tabelas. Para mais
informações sobre chaves primárias, consulte
Chaves primárias na documentação do PostgreSQL.
Você também pode expandir as seções a seguir para ver exemplos de comandos SQL:
Criar chaves primárias usando colunas atuais
Sua tabela pode já ter uma chave primária lógica com base em uma coluna ou em uma combinação de colunas. Por exemplo, pode haver colunas com uma restrição ou um índice exclusivo configurado. Use essas colunas para gerar uma nova chave primária para tabelas no banco de dados de origem. Exemplo:
ALTER TABLE TABLE_NAME ADD PRIMARY KEY (COLUMN_NAME);
Substitua:
- TABLE_NAME pelo nome da tabela que não tem uma chave primária.
- COLUMN_NAME pelo nome de uma coluna com restrição ou índice exclusivo que pode ser usado como chave primária.
Criar uma chave primária usando todas as colunas
Se você não tiver uma restrição preexistente que possa servir como chave primária, crie chaves primárias usando todas as colunas da tabela. Verifique se você não excede o tamanho máximo da chave primária permitido pela instância do PostgreSQL.
Ao criar uma chave primária composta dessa forma, é necessário listar explicitamente todos os nomes de coluna que você quer usar. Não é possível usar uma instrução para recuperar todos os nomes de colunas para essa finalidade. Exemplo:
ALTER TABLE TABLE_NAME ADD PRIMARY KEY (COLUMN_NAME_1, COLUMN_NAME_2, COLUMN_NAME_3, ...);
Substitua:
- TABLE_NAME pelo nome da tabela que não tem uma chave primária.
- COLUMN_NAME_1, COLUMN_NAME_2 etc. pelos nomes das colunas que você quer usar para criar a chave primária.
Criar uma restrição exclusiva com a pseudocoluna
ROWIDOs bancos de dados Oracle usam a pseudocoluna
ROWIDpara armazenar o local de cada linha em uma tabela. Para migrar tabelas do Oracle que não têm chaves primárias, adicione uma colunaROWIDno banco de dados PostgreSQL de destino. O Database Migration Service preenche a coluna com os valores numéricos correspondentes da pseudocolunaROWIDdo Oracle de origem.Para adicionar a coluna e defini-la como a chave primária, execute o seguinte:
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);
Substitua:
- TABLE_NAME pelo nome da tabela em que você quer adicionar a coluna.
- CONSTRAINT_DISPLAY_NAME pelo identificador da restrição
PRIMARY KEY.
A seguir
- Continue trabalhando com espaços de trabalho de conversão.
- Saiba mais sobre os recursos de conversão com tecnologia do Gemini.