Migrar tabelas sem chaves primárias

Esta página explica como migrar tabelas do Oracle que não têm chaves primárias.

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:

Adicionar chaves primárias ausentes manualmente

Para migrar tabelas do Oracle sem chaves primárias, faça o seguinte:

  1. Use um espaço de trabalho de conversão para converter o código-fonte e o esquema.
  2. 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 connect comando. Esse comando funciona apenas para instâncias do Cloud SQL que têm um endereço IP público ativado.
  3. 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 ROWID

    Os bancos de dados do Oracle usam a ROWID pseudocoluna 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 uma ROWID coluna no banco de dados de destino do PostgreSQL. O Database Migration Service preenche a coluna com os valores numéricos correspondentes da pseudocoluna ROWID do 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