このページでは、まだ主キーがない Oracle テーブルを移行する方法について説明します。
Database Migration Service では、移行先の PostgreSQL テーブルに主キーが必要です。デフォルトの Database Migration Service 変換ワークスペースは、主キーのないテーブルに rowid
列を作成することで、これを自動的に処理します。
ただし、Ora2Pg 移行ツールで以前のコンバージョン ワークスペースを使用している場合、Oracle ソーステーブルに主キーがない場合は、キーを手動で作成する必要があります。
次のセクションでは、Oracle ソーステーブルの主キーを作成する方法のオプションについて説明します。
既存の列を使用して主キーを作成する
テーブルに、列または列の組み合わせに基づく論理主キーがすでに存在している場合があります。たとえば、一意の制約またはインデックスが構成されている列がある場合があります。これらの列を使用して、移行先の 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 インスタンスで許可されている主キーの最大長を超えないようにしてください。