Esta página explica como migrar tabelas do Oracle que não têm chaves primárias.
A geração automática de chave primária primárias explica como o Database Migration Service processa tabelas de origem sem chaves primárias.
Adicionar chaves primárias ausentes manualmente mostra consultas de exemplo que você pode usar 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 prometem replicação consistente. O Database Migration Service migra apenas tabelas que têm chaves primárias. Se o banco de dados de origem incluir tabelas que não têm chaves primárias, o Database Migration Service poderá processar isso das seguintes maneiras:
-
Ao converter 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 tenham chaves primárias.
- Não tenham uma restrição
UNIQUEsem colunas anuláveis. - Não tenham 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ê usar um espaço de trabalho de conversão legado, será necessário 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. É possível usar os seguintes métodos:
-
Cliente
psql. É possível usar esse método para se conectar ao IP particular da instância, mas talvez seja necessário criar uma máquina virtual do Compute Engine. -
gcloud sql connectcomando. Esse comando funciona apenas para instâncias do Cloud SQL que têm um endereço IP público ativado.
-
Cliente
- Crie as restrições de chave primária ausentes para suas tabelas. Para mais
informações sobre chaves primárias, consulte
Chaves primárias na documentação do PostgreSQL.
Também é possível expandir as seções a seguir para conferir comandos SQL de exemplo:
Criar chaves primárias usando colunas atuais
A tabela já pode ter uma chave primária lógica com base em uma coluna ou uma combinação de colunas. Por exemplo, pode haver colunas com uma restrição ou í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 a chave primária, crie chaves primárias usando todas as colunas da tabela. Verifique se você não excedeu o comprimento máximo da chave primária permitida 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 coluna 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 do Oracle usam a
ROWIDpseudocoluna para armazenar o local de cada linha em uma tabela. Para migrar tabelas do Oracle que não têm chaves primárias, é possível adicionar umaROWIDcoluna no banco de dados de destino do PostgreSQL. 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 Gemini.