主キーのないテーブルを移行する

このページでは、まだ主キーがない Oracle テーブルを移行する方法について説明します。

Database Migration Service では、移行先の PostgreSQL テーブルに主キーが必要です。デフォルトの Database Migration Service 変換ワークスペースは、主キーのないテーブルに rowid 列を作成することで、これを自動的に処理します。

ただし、Ora2Pg 移行ツールで以前のコンバージョン ワークスペースを使用している場合、Oracle ソーステーブルに主キーがない場合は、キーを手動で作成する必要があります。

次のセクションでは、Oracle ソーステーブルの主キーを作成する方法のオプションについて説明します。

既存の列を使用して主キーを作成する

テーブルに、列または列の組み合わせに基づく論理主キーがすでに存在している場合があります。たとえば、一意の制約またはインデックスが構成されている列がある場合があります。これらの列を使用して、移行先の AlloyDB for PostgreSQL クラスタに新しい主キーを生成します。

rowid 列を使用して主キーを作成する

Oracle データベースでは、rowid 疑似列を使用して、テーブル内の各行の位置を保存します。主キーのない Oracle テーブルを移行するには、移行先の PostgreSQL データベースに新しい rowid 列を追加します。Database Migration Service は、移行元の Oracle rowid 疑似列に対応する数値を列に入力します。

列を追加して主キーとして設定するには、次のコマンドを実行します。

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_NAME PRIMARY KEY (rowid);

次のように置き換えます。

  • TABLE_NAME: 列を追加するテーブルの名前。
  • CONSTRAINT_NAME: PRIMARY KEY 制約の ID。

すべての列を使用して主キーを作成する

前述のオプションを使用できない場合、ソースの Oracle テーブルに重複する行がない場合は、テーブルのすべての列を使用して主キーを作成します。PostgreSQL クラスタで許可されている主キーの最大長を超えないようにしてください。