Oracle から PostgreSQL へのデータの移行 - Devart ブログ (2023)

データベースを Oracle から PostgreSQL に移行する理由はいくつかあります。

1. Oracle は非常に高価であり、いくつかの重要な機能には追加の投資が必要です。

2. PostgreSQL は、データベースのパフォーマンスを向上させ、機能を拡張するのに役立つさまざまな無料のアドオンを含む、便利で堅牢なオープンソース ライセンスを提供します。

3. PostgreSQL の言語は、(データ型の処理方法などで) 扱いやすい場合もあれば、Oracle の言語よりも好ましいと感じる場合もあります。

他の多くの側面も決定に影響する可能性があります。ただし、PostgreSQL への移行が必要であるとすでに決定している場合は、留意する必要があることがいくつかあります。

理解しておくべき最も重要なことは、移行プロセスを完全に自動化できるツールはないということです。 2 つの環境の動作には多くの違いがあるため、一部の部分は手動で実行する必要があります。

第 2 に、小規模なデータベース (100 GB 以下) は比較的簡単に移行できますが、より大規模なデータベースの場合は、移行中に不都合なほどの時間とリソースがかからないようにするには、別のアプローチが必要になります。特に、このような場合には日付ベースのパーティションを使用することが推奨されます。これはデータ操作に非常に役立ちます。

この情報はさておき、データを移行する前に確認する必要があることを説明する手順を次に示します。

1. 事前確認

何を移行する必要があるかを正確に特定します。古いバックアップや古い一時テーブルなど、複製する必要のないすべてのデータを見つけて除外します。

2. 移行の評価

アプリとデータベース内のオブジェクトを分析し、データベース間の相違点を見つけて、移行レポートにデータをエクスポートして、移行プロセスの推定時間とリソース使用量を把握します。 Ora2pg などのツールは、このステップに非常に役立ちます。

3. データ型のマッピング

PostgreSQL のデータ型は、Oracle のデータ型と比較するといくつかの違いがあります。したがって、ほとんどの場合、何らかの変換が必要になります。これら 2 つの環境で使用されるいくつかのデータ型の比較表を次に示します。

オラクルPostgreSQL
VARCHAR2(n)VARCHAR(n)
CHAR(n)CHAR(n)
NUMBER(n,m)数値(n,m)
番号(4)スモールント
番号(9)INT
番号(18)BIGINT
NUMBER(n)数値(n)
日にちタイムスタンプ(0)
ローカルタイムゾーンを含むタイムスタンプタイムスタンプ
クロブ文章
BLOB RAW(n)BYTEA(1GB制限)
大きな物体

4. 取引

Oracle と PostgreSQL のトランザクションは、若干異なる方法で実装されます。実行されたステートメントは Oracle でトランザクションをトリガーし、COMMIT ステートメントはトランザクションを終了します。 PostgreSQL では、トランザクションがアクティブになる前に BEGIN ステートメントを実行する必要があります。

これにより、環境間でコードを移植するときに追加の作業が発生する可能性があります。

5. その他の技術的な違い

移行プロセス中に考慮する必要がある最も重要な違いは次のとおりです。

  • 空の文字列と NULL –PostgreSQL では、IS NULL 演算子は空の文字列に対して使用すると FALSE を返しますが、Oracle ではそのような場合に TRUE を返します。
  • デュアルテーブル –Oracle データベースでは、各 SELECT ステートメントに FROM 句が必要なため、そのようなステートメントには DUALtable が使用されます。一方、PostgreSQL では、FROM 句 (ひいては DUAL テーブル) は必要ありません。
  • DELETEステートメント –Oracle とは異なり、PostgreSQL の DELETE ステートメントは FROM 句でのみ機能します。
  • サブストラ –この関数は Oracle と PostgreSQL で異なる結果を生成し、問題が発生する可能性があります。
  • システムデート– PostgreSQL には、実行時に日付と時刻を提供する Oracle の SSYSDATE 関数に相当する関数がありません。ニーズに応じて、代わりに次の方法を使用する必要があります。
必須時間情報対応する関数
SQLの開始時間Statement_timestamp()
トランザクション開始時間トランザクションタイムスタンプ()
機能実装時期Clock_timestamp()

6. 言語変換

PL/pgSQL と PL/SQL 言語は非常に似ていますが、いくつかの重要な違いに留意する必要があります。

  • 前述したように、これら 2 つの言語ではデータ型の実装方法が異なるため、データ型を適切に変換するにはいくつかの作業が必要です。
  • PostgreSQL にはパッケージがないため、必要に応じて関数をグループ化するためにスキーマが使用されます。これは、パッケージレベルの変数が使用できないことを意味します。
  • これら 2 つの言語では、カーソル変数の表記が異なります。
  • PostgreSQL では関数本体を文字列リテラルとして記述する必要があるため、関数本体ではドル記号引用符を使用するか、一重引用符をエスケープする必要があります。

ご覧のとおり、移行プロセス前および移行プロセス中に覚えておく必要があることがたくさんあります。したがって、データベースが正常に移行されたことを確認するには、移行後に徹底的にテストする必要があります。

ここまでの情報をすべて自由に使えるようになったので、次は、次を使用してデータベースを Oracle から PostgreSQL に移行する方法を見てみましょう。PostgreSQL 用 dbForge スタジオ

Oracle から PostgreSQL データベースにデータを移行するにはどうすればよいですか?

前提条件として、作業しているマシンに次の機能が備わっていることを確認してください。PostgreSQLサーバー(v.15を使用しています)オラクルクライアントインストールされています。

まず、Oracle テーブルにアクセスできるように PostgreSQL を構成する必要があります。これを行うには、次の手順を実行します。

  • ステップ 1: oracle_fdw をダウンロードしてインストールします。
  • ステップ 2: 外部サーバーを作成します。
  • ステップ 3: 外部サーバーへのユーザー マッピングを作成します。
  • ステップ 4: 外部テーブルを作成します。

ステップ 1: oracle_fdw をダウンロードしてインストールする

oracle_fdwEXPLAIN と WHERE がサポートされている、Oracle データベースへの簡単かつ効果的なアクセスのための外部データ ラッパーを提供する PostgreSQL 拡張機能です。

マシンに PostgreSQL サーバー バージョン 15 がインストールされていることを確認してください。次に、oracle_fdw-2.5.0-pg15-win64.zipPostgreSQL のバージョンに対応するアーカイブを展開し、必要なファイルを取得します。

その後、次のファイルをコピーし、次のように対応するフォルダーに貼り付けます。

  • oracle_fdw.dllからライブラリフォルダにライブラリPostgreSQLサーバーがインストールされているフォルダー。たとえば、Windows マシンのデフォルトのフォルダーは次のとおりです。C:\Program Files\PostgreSQL\15\lib\
  • oracle_fdw.controlの他の SQL スクリプトとともに、共有\拡張子\フォルダへ\PostgreSQL\15\共有\拡張機能\

次に、スーパーユーザー接続を作成する必要があります。これを行うには、dbForge Studio for PostgreSQL を起動し、データベースメニュー、選択新しい接続。の中にデータベース接続プロパティ開いたダイアログで、PostgreSQL のホスト、ポート、ユーザー名、パスワード、データベースを入力します。サーバーへの接続を作成するには、接続:

次のステップはラッパーを作成することです。これを行うには、新しいSQLそして、CREATE EXTENSION ステートメントを実行します。

拡張子 oracle_fdw を作成します。

ステップ 2: 外部サーバーを作成する

Oracle データベースへの接続を確立し、PostgreSQL でアクセスを構成するには、外部サーバーを作成し、必要な接続の詳細を指定する必要があります。 CREATE SERVER ステートメントの構文は次のとおりです。

CREATE SERVERserver_name TYPE 'server_type' VERSION 'server_version' FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//host:port/service_name');

接続オプションを構成するには、値を次のような接続の詳細に置き換えます。ホスト、ポート、サービス名、移行するデータが含まれるテーブルが配置されている Oracle サーバーの。

サーバーのタイプとバージョンはオプションであるため、省略できることに注意してください。この例では、ホストは次のとおりです。dbforcl、港は1521年そしてサービス名はオークラスト。

また、PostgreSQL ユーザーに権限を付与する必要があります。ポストグレ–これにより、外部サーバーにアクセスできるようになります。

ステップ 3: 外部サーバーへのユーザー マッピングを作成する

また、PostgreSQL ユーザーと外部サーバーのユーザー マッピングを定義する必要があります。このマッピングには、Oracle リモート ユーザーとそれに対応するパスワードの指定が含まれます。これを行うには、SQL エディターで CREATE USER MAPPING ステートメントを実行します。

postgresql_username サーバーのユーザー マッピングを作成します。foreign_server_name オプション ( "user" 'oracle_username'、パスワード '********');
  1. postgresql_ユーザー名PostgreSQL サーバーに接続しているユーザーの名前です。このユーザーは、Oracle から PostgreSQL へのデータの移行を担当します。
  2. 外部サーバー名Oracle 外部サーバーの名前です。移行プロセスでは、データが抽出されて PostgreSQL に移行されるサーバーになります。
  3. oracle_ユーザー名Oracle 側で Oracle テーブルを作成したユーザーの名前です。 Oracle テーブルにアクセスしてデータを抽出するには、適切な権限が必要です。
  4. パスワード指定されたパスワードですoracle_ユーザー名。 Oracle データベースへの接続を認証して確立するために必要です。

ステップ 4: 外部テーブルを作成する

ここで、Oracle テーブルに対応する外部テーブルを外部サーバー上に作成する必要があります。まず、次の構造と関連データを持つ Oracle テーブルを作成します。

CREATE TABLE ORACLE_TABLE ( ID NUMBER(11, 0) DEFAULT 1、C_BIN_FLOAT BINARY_FLOAT、C_BLOB BLOB、C_CHAR CHAR(20 CHAR)、C_CLOB CLOB、C_DATE DATE、C_INTEGER NUMBER(*, 0)、C_INT_D_TO_SEC INTERVAL DAY(2) TO SECOND( 6)、C_NVARCHAR2 NVARCHAR2(50)、CONSTRAINT PK_ORACLE_TABLE_ID 主キー (ID) USING INDEX);

このステートメントを dbForge Studio for Oracle で実行すると、次の結果が得られます。

次に、dbForge Studio for PostgreSQL に移動して、外部テーブルを作成しましょう。 Oracle テーブルと外部テーブルのテーブル構造と列のデータ型が一致している必要があることに注意してください。

CREATE FOREIGN TABLE external_table ( id NUMERIC, c_bin_float DOUBLE PRECISION, c_blob BYTEA, c_char CHAR(20), c_clob TEXT, c_date DATE, c_integer NUMERIC, c_int_d_to_sec INTERVAL, c_nvarchar2 VARCHAR ) SERVER external_oracle OPTIONS ("table" 'ORACLE_テーブル');

「ORACLE_TABLE」はOracle側で作成したテーブルの名前です。

外部テーブルからデータを取得するには、次の SELECT ステートメントを実行します。

SELECT * FROM 外部テーブル;

さらに、データを移行および同期するために、外部テーブルと並列する PostgreSQL テーブルを作成します。

CREATE TABLE PG_TABLE ( ID 数値、C_BIN_FLOAT 倍精度、C_BLOB バイト、C_CHAR char(20)、C_CLOB テキスト、C_DATE 日付、C_INTEGER 数値、C_INT_D_TO_SEC 間隔、C_NVARCHAR2 varchar、CONSTRAINT PK_PG_TABLE_ID PRIMARY KEY (ID) );

すべてのセットアップが完了したら、次を使用して Oracle から PostgreSQL テーブルへのデータの移行に進むことができます。PostgreSQL のデータ比較

ステップ 5: dbForge Data Compare for PostgreSQL を使用してデータを比較および同期する

dbForge Data Compare for PostgreSQL を起動し、クリックします。新しいデータの比較。の中に新しいデータの比較ウィザードが開くので、PostgreSQL ソース、ターゲット サーバー、およびデータベースを指定します。

次に、に行きます。マッピングウィザードのページをクリックして、カスタムクエリ。のカスタムクエリマッピングダイアログが開きます。下ソースオブジェクト、 選択するクエリ そして、外部テーブルの SELECT ステートメントを入力します。下対象オブジェクト、 クリックテーブルまたはビューそして、PG_TABLEテーブル。次に、クリックします地図その後近い

マッピングページで、比較キーを指定します。これを行うには、次を選択しますカスタムから比較キー列ドロップダウンリスト。次に、のオプションID列をクリックしてOK

データ比較を実行するには、をクリックします。比較

開いた .dcomp ドキュメントで、同期するデータベースを同期します。

の中にデータ同期ウィザード、同期スクリプトを管理するための出力オプションを選択し、同期する

プロセスを簡素化するために、dbForge Data Compare で使用できるコマンドライン インターフェイスを使用してデータ同期を自動化できます。

コマンドラインインターフェイスを介してデータの比較と同期を自動化する

で比較および同期のオプションを構成する場合、データ同期ウィザード、コマンドライン引数を使用してファイルを生成できます。これを行うには、コマンドラインを保存の左上隅にあるデータ同期ウィザード

コマンドライン実行ファイルの設定ウィンドウが開き、*.bat ファイルのテキストを管理するための設定を確認および構成できます。セキュリティ上の理由から、ファイルにはパスワード情報が含まれていないことに注意してください。したがって、ファイルを編集してパスワードを手動で入力できます。クリック保存ファイルを保存します。

結論

ご覧のとおり、データベース間のデータの移行は難しく、多くの変数が関係する場合があります。ただし、計画と具体的に探すべきもののリストがあり、移行に役立つように調整されたツールを使用すれば、このプロセスははるかに簡単かつスムーズになります。この記事では、Oracle から PostgreSQL データベースにデータを移行する方法の 1 つについて説明しました。ただし、他の方法もありますOracle の PostgreSQL への移行同じように。

より好みに合ったものを選択し、適切なツールと知識があれば移行プロセスがどれほど簡単になるかを確認してください。

References

Top Articles
Latest Posts
Article information

Author: Twana Towne Ret

Last Updated: 03/21/2023

Views: 5313

Rating: 4.3 / 5 (44 voted)

Reviews: 91% of readers found this page helpful

Author information

Name: Twana Towne Ret

Birthday: 1994-03-19

Address: Apt. 990 97439 Corwin Motorway, Port Eliseoburgh, NM 99144-2618

Phone: +5958753152963

Job: National Specialist

Hobby: Kayaking, Photography, Skydiving, Embroidery, Leather crafting, Orienteering, Cooking

Introduction: My name is Twana Towne Ret, I am a famous, talented, joyous, perfect, powerful, inquisitive, lovely person who loves writing and wants to share my knowledge and understanding with you.