Oracle から Azure Database for PostgreSQL フレキシブル サーバーへのスキーマ変換とは何ですか。

Visual Studio Code PostgreSQL 拡張機能の Oracle から Azure Database for PostgreSQL へのスキーマ変換機能は、既存の Oracle データベース スキーマ オブジェクトを PostgreSQL と互換性のあるスキーマに変換するのに役立ちます。 この機能はリレーショナル スキーマ用に設計されており、フレキシブル サーバー用に変換されたスキーマAzure Database for PostgreSQL生成されます。

このツールは、スキーマ変換を自動化するためのプロジェクト ベースのユーザー インターフェイスを提供します。 特定のオブジェクトを自動的に変換できない場合、ツールによってレビュー タスクとしてフラグが設定されます。これは、GitHub Copilot エージェント モードを使用して手動で解決できます。

Oracle から Azure Database for PostgreSQL スキーマへの変換アーキテクチャの図。

アーキテクチャ

スキーマ変換プロセスには、複数のコンポーネントが連携する必要があります。

  • ソース Oracle データベース: 変換するスキーマを含む既存の Oracle データベース。
  • Visual Studio Code PostgreSQL 拡張機能: 変換プロセスを管理するためのプライマリ インターフェイス。
  • Azure Database for PostgreSQL フレキシブル サーバー: 検証とテストに使用されるスクラッチ スキーマをホストします。
  • Microsoft Foundry: AI 駆動型スキーマ変換を実行する言語モデルを提供します。
  • スキーマ変換エージェント: 自動化された変換プロセスを処理する AI を利用したエージェント。

どのように機能するのか

スキーマ変換プロセスでは、自動化された変換と人間の監視を組み合わせたインテリジェントなマルチステージ アプローチが使用されます。

  • 接続と検出: このツールは Oracle データベースに接続し、すべてのスキーマ オブジェクトをカタログ化します。 構造、依存関係、複雑さを分析して変換計画を作成します。
  • AI を利用した変換: スキーマ変換エージェントは、Microsoft Foundry でホストされている言語モデルを使用して、Oracle 固有のコンストラクトを PostgreSQL と互換性のある同等の構造に変換します。 AI では、コンテキスト、リレーションシップ、プラットフォームのベスト プラクティスが考慮されます。
  • スクラッチ スキーマでの検証: ツールは、Azure Database for PostgreSQLフレキシブル サーバー上のスクラッチ スキーマ内のすべての変換されたオブジェクトをテストします。 この手順では、最終出力生成前の構文の正確性と互換性を確認します。
  • レビュー タスクの生成: このツールは、完全に自動化できないオブジェクト、またはレビュー タスクとして人間の判断を必要とするオブジェクトにフラグを設定します。 これらのオブジェクトには、複雑なビジネス ロジックや、手動による注意が必要な Oracle 固有の機能が含まれる場合があります。
  • ガイド付き解決: GitHub Copilot エージェント モードでは、レビュー タスクの完了を支援します。 コンテキスト対応の提案と Azure Database for PostgreSQL フレキシブル サーバーのベスト プラクティスが提供され、情報に基づいた意思決定を行うのに役立ちます。
  • 出力生成: このツールは、正常に検証されたオブジェクトを、ターゲット環境へのデプロイの準備が整った、整理された PostgreSQL .sql ファイルに変換します。

拡張機能をインストールする

Oracle から PostgreSQL へのスキーマ変換機能は、Visual Studio Codeの PostgreSQL 拡張機能に組み込まれています。 別の拡張機能をインストールする必要はありません。

インストール手順

  1. 拡張機能 Marketplace を開く: Visual Studio Code で、左側のアクティビティ バーで [拡張機能] アイコンを選択するか、キーボード ショートカット Ctrl+Shift+X (Windows/Linux) または Cmd+Shift+X (macOS) を使用します。
  2. 拡張機能を検索する: 拡張機能 Marketplace の検索ボックスに、「 PostgreSQL (または拡張機能 ID ms-ossdata.vscode-pgsql)」と入力して拡張機能を検索します。
  3. 拡張機能のインストール: 検索結果で、Microsoft によって発行されたPostgreSQLを見つけて、Install を選択します。 Marketplace ではいくつかの PostgreSQL 拡張機能を使用できるため、インストールする前にパブリッシャーがMicrosoftであることを確認します。
  4. Access Schema Conversion: 拡張機能をインストールすると、Visual Studio Code アクティビティ バーに象アイコンが表示されます。 アイコンを選択して PostgreSQL 拡張機能を開き、スキーマ変換機能にアクセスします。

スキーマ変換ワークフロー

このセクションでは、変換単位(スキーマ、テーブル、インデックス、ビュー、プロシージャ)、人による確認のためのレビュー タスク、スクラッチ データベースの検証、AI を活用したスキーマ変換エージェント、生成される PostgreSQL SQL アーティファクトなど、Oracle から Azure Database for PostgreSQL へのスキーマ変換ワークフロー全体を通して使用される主要な概念について説明します。 これらの概念を理解すると、変換結果の解釈、フラグ付き項目の優先順位付けと解決、Azure Database for PostgreSQL フレキシブル サーバーへのデプロイ用に変換されたファイルの準備を行うことができます。

スクラッチ データベース

スキーマ変換ツールは、一時的な検証環境としてAzure Database for PostgreSQLフレキシブル サーバーを使用します。 このツールは、そのサーバー内に 1 つ以上の スクラッチ スキーマを作成します。これは、変換されたオブジェクトを保持する有効期間の短い PostgreSQL スキーマであるため、運用データに影響を与えずにテストできます。

スクラッチ データベース内でスクラッチ スキーマを使用すると、ツールは次のことを確認できます。

  • 変換されたオブジェクトは構文的に正しいです。
  • オブジェクト間の依存関係は、正しい順序で解決されます。
  • オブジェクト定義は、ターゲット PostgreSQL バージョンとの互換性を維持します。
  • Azure Database for PostgreSQL のフレキシブル サーバー機能は正しく適用されます。

Note

ツールが必要に応じてスクラッチ スキーマ (CREATE プレフィックスで名前付き) を作成および削除できるように、接続ユーザーはスクラッチ データベースに対する_mig_scratch_特権を持っている必要があります。

タスクを確認する

このツールは、AI がオブジェクトを完全に変換できない場合、または結果を確認することを推奨する場合に、項目に手動レビューのフラグを設定します。 一般的なレビュー タスクは次のとおりです。

  • 手動調整が必要な複雑な PL/SQL プロシージャ。
  • 複数の PostgreSQL の代替手段を持つ Oracle 固有のデータ型。
  • Oracle 固有のロジックを含むカスタム関数。

タスクの優先順位と生成された出力フォルダーの確認の詳細については、「Oracle のタスクと出力フォルダーを確認して柔軟なサーバー スキーマ変換をAzure Database for PostgreSQLする」を参照してください。

GitHub Copilot エージェントモード

GitHub Copilot エージェント モードは、ガイド付きプロンプトを提供する統合Visual Studio Code機能で、タスクの確認を完了し、変換されたスキーマをアプリケーションの要件に合わせて調整するのに役立ちます。 エージェント モードのオファー:

  • スキーマの変更に関するコンテキスト対応の提案。
  • Azure Database for PostgreSQL フレキシブル サーバーのベスト プラクティスに関する推奨事項。
  • 複雑な変換のコード補完。
  • 既存の開発ワークフローとの統合。

Oracle の接続モード

スキーマ変換ツールでは、ソース Oracle データベースに接続するために 2 つの接続モード、シン・モードシック・モード、がサポートされています。 違いを理解することは、環境に適したモードを選択するのに役立ちます。

シンクライアントモード (デフォルト)

シン モードは、追加の Oracle クライアント ライブラリなしで Oracle Database に直接接続します。 このモードは既定であり、追加のセットアップは必要ありません。

  • Oracle インスタント クライアントのインストールは必要ありません。
  • Oracle Database 12.1 以降をサポートします。
  • ほとんどのスキーマ変換シナリオに適しています。
  • 標準の TCP/IP ネットワークを使用して接続します。

リッチクライアントモード

シック モードでは、Oracle インスタント クライアント ライブラリを使用して Oracle Database に接続します。 スキーマ変換ツールは、Oracle ネットワーク構成に基づいてシック モードが必要な場合を検出し、それに自動的に切り替えます。

シック クライアント モードが必要な場合

ソース環境の Oracle ネットワーク構成ファイルを調べて、シック クライアント モードが必要かどうかを判断できます。 sqlnet.ora ファイル (通常は $ORACLE_HOME/network/admin/ にあります) で、次のパラメーターを探します。

パラメーター 厚みモードが必要であることを示します
SQLNET.CRYPTO_CHECKSUM_CLIENT ネイティブ ネットワーク暗号化の REQUIRED または REQUESTED に設定する
SQLNET.ENCRYPTION_CLIENT ネイティブ ネットワーク暗号化の REQUIRED または REQUESTED に設定する

これらのパラメーターのいずれかがソース Oracle 環境で構成されている場合は、シック クライアント モードが必要です。 スキーマ変換ツールは、この構成を検出し、シック モードに自動的に切り替えます。 変換を開始する前に、Visual Studio Codeが実行されているコンピューターに Oracle インスタント クライアントがインストールされていることを確認します。

Oracle インスタント クライアントのインストール

シック クライアント モードを使用するには、Visual Studio Codeとスキーマ変換ツールが実行されているコンピューターに Oracle インスタント クライアントをインストールします。 スキーマ変換は、 WindowsLinux でのみサポートされています。

  1. オペレーティング システム用 の Oracle の Web サイトから Oracle Instant Client Basic または Basic Light パッケージをダウンロードします。
  2. マシン上のディレクトリにパッケージを抽出します。
  3. インスタント クライアント ディレクトリをシステム PATH 環境変数に追加します。
    • Windows: PATH>、または PowerShell を使用して、インスタント クライアント ディレクトリを変数に追加します。
    • Linux: インスタント クライアント ディレクトリを PATH に追加し、ディレクトリを含むように LD_LIBRARY_PATH 環境変数を設定します。 libaio ライブラリがインストールされていることを確認します。
  4. Visual Studio Code再起動して、更新された環境変数を取得します。

Microsoft Foundry の認証

スキーマ変換ツールでは、Microsoft Foundry の言語モデルに接続するための 2 つの認証方法がサポートされています。

API キー認証

API キー認証では、デプロイ固有のキーを使用して要求を承認します。 この方法は簡単で、開発とテストのシナリオに適しています。

Microsoft Entra ID 認証

Microsoft Entra ID認証を使用すると、API キーを管理することなく、トークンベースの ID ドリブンアクセスMicrosoft Foundry にアクセスできます。 この方法は、一元化された ID 管理を使用する運用環境および組織に推奨されます。

Microsoft Entra ID 認証を使用するには:

  1. 必要なロールの割り当て: サインインしているユーザーまたはサービス プリンシパルに、デプロイ モデルをホストする Microsoft Foundry リソースの Foundry User ロール (旧称 Azure AI User) があることを確認します。 Azure portal の [アクセス制御 (IAM)] でロールを割り当てます。 詳細については、Microsoft Foundryロールベースのアクセス制御 を参照してください。
  2. Visual Studio Code で Azure にサインインする: コマンド パレット () から Ctrl+Shift+P コマンドを使用して、Microsoft Entra ID アカウントを使用して認証します。
  3. Entra ID認証の選択: Migration ウィザード言語モデルの構成手順で、認証方法として API キー ではなく Microsoft Entra ID を選択します。
  4. エンドポイントの作成: Microsoft Foundry エンドポイントの URL を入力します。 このツールは、サインインしたセッションから認証トークンを自動的に取得します。

Note

Microsoft Entra ID認証には、Visual Studio Codeの Azure Account 拡張機能が必要です。 拡張機能は、Microsoft Foundry リソースに適切なロールの割り当てを持つ ID でサインインする必要があります。

セキュリティとネットワーク

スキーマ変換機能を使用する場合は、Visual Studio Code 環境がソース Oracle データベースと、スクラッチ データベースとして使用する Azure Database for PostgreSQL フレキシブル サーバー インスタンスの両方に安全に接続できることを確認します。

Microsoftでは、プライベート エンドポイントを使用して Microsoft Foundry リソースに接続することをお勧めします。 詳細については、Microsoft Foundry のプライベート リンクを構成するを参照してください。

Microsoft Foundry 接続のセキュリティ保護の詳細については、「Microsoft Foundry の Azure Direct Models のデータ、プライバシー、セキュリティ」 を参照してください。

Visual Studio Codeがプライベート エンドポイントに接続する方法の図。

Important

顧客の検証責任: スキーマ変換に使用されるのと同じ AI エンジンが、検証とレビューにも役立ちます。 AI システムは、独自のミスを確認することがあります。 データ損失、機能回帰、またはセキュリティの問題を防ぐために、運用環境にデプロイする前に、変換されたすべてのオブジェクトとレビュー タスクの解決を個別に検証します。 コントロールの一部として、Foundry コンテンツ フィルターを有効にして、有害な出力や望ましくない出力を減らすことを検討してください。 ガイダンスについては、 Foundry でのコンテンツ フィルター処理に関するページを参照してください。

スキーマ変換機能を使用する理由

Oracle スキーマを Azure Database for PostgreSQL に変換すると、移行と最新化が効率化されます。 変換を自動化し、スクラッチ データベースの結果を検証し、デプロイの準備ができている AI 支援レビューと Azure 最適化出力を提供することで、手動の労力とリスクを軽減します。

  • 自動変換: 互換性のあるスキーマ オブジェクトを自動的に変換することで、手動での作業を減らします。
  • AI を利用した変換: コンテキストに対応した変換の決定にMicrosoft Foundry でホストされている言語モデルを使用します。
  • 検証優先アプローチ: スクラッチ スキーマを使用して、変換されたオブジェクトが正しく動作することを確認します。
  • Integrated workflow: Visual Studio Code開発環境内で動作します。
  • 柔軟な Oracle 接続: Oracle データベースに接続するためのシン クライアント モードとシック クライアント モードの両方をサポートします。
  • 複数の認証オプション: Microsoft Foundry での API キー認証と Microsoft Entra ID 認証をサポートします。
  • レビューと絞り込み: 手動レビュー タスクの明確なガイダンスを提供します。
  • Azure 向けに最適化: Azure Database for PostgreSQL フレキシブル サーバー用に設計されています。

サポートされているスキーマ オブジェクト

変換ツールは、データ定義要素、スキーマ レベルのコンポーネント、手続き型コードなど、さまざまな Oracle スキーマおよびコード オブジェクトをサポートしています。 多くの一般的なオブジェクトを自動的に変換できますが、Oracle 固有の特定の機能または独自の拡張機能のマッピングを手動で確認またはカスタマイズすることが必要になる場合があります。 サポートされているオブジェクトと既知の制限事項の詳細な一覧については、この記事のセクションを参照してください。

変換の生成方法

スキーマ変換ツールは、AI を利用した翻訳と自動検証を組み合わせて、信頼性の高い結果を提供します。 Foundry モデルMicrosoft Oracle DDL を PostgreSQL に変換します。 次に、このツールは、変換された各オブジェクトをターゲット Azure Database for PostgreSQLフレキシブル サーバーのスクラッチ スキーマに対してコンパイルし、静的分析を実行し、一般的な問題に対して自動修正を適用します。 パイプラインの残りのステージ (ソース解析、メタデータ抽出、スクリプト生成) は、予測可能なルールベースのステップとして実行されます。

PL/pgSQL ルーチンの場合、ツールは、スクラッチ データベースで plpgsql_check 拡張機能を使用する本文セマンティクス チェックを追加します。 このチェックで、プレーン コンパイルでキャッチされない欠陥が検出されると、ツールはそのルーチンを破棄し、出力に書き込む代わりに AI 修正ループを通じて送信します。 詳細については、「plpgsql_checkを 使用して変換された PL/pgSQL を検証する」を参照してください。

このアプローチでは、AI を使用して、最も価値を高め、ワークフローの残りの部分を確定的かつ検証可能な状態に保ちます。 完全に検証できないオブジェクトにはレビュー タスクのフラグが設定されるため、変換されたスキーマを適用する前に対処できます。 実用的な PostgreSQL に相当するものがない Oracle の機能については、柔軟なサーバー スキーマ変換の制限をAzure Database for PostgreSQLする Oracle を参照してください。

データベース スキーマ オブジェクト

変換ツールでは、次の Oracle データベース オブジェクトがサポートされています。

  • テーブル: テーブル定義、列の仕様、およびテーブル レベルの制約。
  • 制約: 主キー、外部キー、一意制約、および check 制約。
  • インデックス: B ツリー インデックス、一意のインデックス、複合インデックス。
  • シーケンス: 値を自動作成するための Oracle シーケンス オブジェクト。
  • トリガー: 行レベルおよびステートメント レベルのトリガー。
  • ビュー: 標準データベース ビュー。
  • 具体化されたビュー: Oracle の具体化されたビューと更新ロジック。
  • スキーマ: スキーマ レベルのオブジェクトと組織。
  • シノニム: パブリックシノニムとプライベートシノニム (制限あり)。

Oracle コード オブジェクト

変換ツールでは、次の Oracle コードコンストラクトがサポートされています。

  • トリガー: 複雑なトリガー ロジックとイベント処理。
  • パッケージ: Oracle パッケージの仕様と本体。
  • 関数: 複雑なロジックを持つユーザー定義関数。
  • ストアド プロシージャ: Oracle ストアド プロシージャとパラメーターの処理。
  • 型とコレクション: Oracle オブジェクト型、 TYPE BODY メンバー メソッド、 VARRAY、入れ子になったテーブル、および SUBTYPE 宣言。

パッケージ変換

Oracle パッケージには直接 PostgreSQL と同等のものがないため、ツールはパッケージの各部分を、呼び出し可能なサーフェスを保持する PostgreSQL コンストラクトに変換します。

  • 定数: ツールは、パブリック パッケージ定数を getter 関数 IMMUTABLE 変換します。
  • コレクションとカーソル: 入れ子になったテーブルと VARRAY は配列ドメインになり、 VARRAY も長さの制約を取得します。 文字列キーを持つ連想配列はドメイン jsonb になり、 REF CURSORrefcursorになります。
  • パッケージの状態: パブリック パッケージ変数は、Oracle パッケージのセッション状態をエミュレートするセッション設定によってサポートされるゲッターとセッターのペアになります。
  • 例外: ユーザーが宣言した例外は、 SQLSTATE 値を返す関数になります。 たとえば、 -20001 で初期化された例外は、 U0001にマップされます。
  • 仕様専用パッケージ: 本文のないパッケージは、呼び出し時にエラーを発生させるスタブに変換されるため、呼び出し可能なサーフェスは引き続き存在します。

階層型クエリ

Oracle 階層クエリは、一般的なテーブル式 WITH RECURSIVE PostgreSQL に変換されます。 ツールは、 CONNECT BYPRIOR を再帰メンバー結合に変換し、アンカー メンバーに START WITH し、 LEVEL を深度カウンターに変換します。 また、 SYS_CONNECT_BY_PATHCONNECT_BY_ROOTORDER SIBLINGS BY、および NOCYCLEも変換します。 変換後、生成されたオブジェクトが予期される再帰図形を持っていることを確認し、そうでない場合は変換を再試行します。

トランザクション制御

PRAGMA AUTONOMOUS_TRANSACTIONを使用するルーチンは、元の Oracle オブジェクト クラスを保持するため、関数は関数のままであり、SELECTまたは式で使用する既存の呼び出し元は動作し続けます。 自律的な作業は、 dblink 拡張機能を介して個別の接続で実行されるため、ターゲット サーバーで dblink を使用できることを確認します。 このプラグマなしで明示的な COMMIT または ROLLBACK を使用するルーチンは、PostgreSQL でトランザクション制御が許可されるため、プロシージャに変換されます。

変換された PL/pgSQL をplpgsql_checkで検証する

PostgreSQL では、PL/pgSQL ルーチン本体を作成するときに完全には検証されません。 CREATE FUNCTION は、本文が解析することを確認しますが、本文が参照するテーブル、列、変数は解決されません。 存在しない列を読み取るルーチンは正常に作成され、初回実行時にのみ失敗します。 移行では、デプロイがクリーンに見えるため、変換の欠陥が運用環境のインシデントに変わります。

スキーマ変換ツールは、 plpgsql_check 拡張機能とのギャップを埋めます。 変換されたルーチンがスクラッチ データベースでコンパイルされると、ツールはそれに対して本文セマンティクスチェックを実行します。 チェックで本物の欠陥が検出されると、ツールはルーチンを破棄し、それを AI 修正ループに返します。このループによって修復され、再度コンパイルされます。 渡されたルーチンのみが変換出力に書き込まれます。

この検証は、変換されたルーチンをデプロイする前に信頼できる主な理由です。 plpgsql_checkは、オプションの追加ではなく、変換環境の必須の部分として扱います。

チェックの実行場所

チェックは、変換中にツールによって作成されるスクラッチ データベース上で完全に実行されます。 ターゲット データベースは実行時に plpgsql_check を必要とせず、ツールが生成するものは何も依存しません。 拡張機能は変換時品質ゲートであり、ランタイムの依存関係ではありません。

拡張機能が使用できない場合の動作

チェックはフェールオープンです。 plpgsql_check許可リストに登録されていないか、スクラッチ データベースをホストするサーバーで使用できない場合、ツールはチェックをスキップし、変換を続行します。 スキーマ変換レポートにはエラーも警告も表示されないため、拡張機能のない実行は、実行と同じように見えます。

ルーチンは引き続きコンパイルされるため、構文エラーは引き続きキャッチされます。 失われるのは、本文の検証が深いことです。そのため、未解決の列やテーブル参照などの欠陥は、生成された出力に到達し、実行時に後で表示される可能性があります。 変換結果に依存する前に、拡張機能が使用可能であることを確認します。

チェックを使用可能にする

plpgsql_checkは、PostgreSQL 14 以降Azure Database for PostgreSQLフレキシブル サーバーでサポートされています。 拡張機能を許可リストし、 shared_preload_librariesに追加し、変換する前にサーバーを再起動します。 その後、このツールによって、この拡張機能がスクラッチ データベースにインストールされます。 完全な手順については、柔軟なサーバー スキーマ変換をAzure Database for PostgreSQLする Oracle のベスト プラクティスに関するページを参照してください。

サポートされている Oracle のバージョン

このセクションでは、スキーマ変換の自動化をサポートするデータベース エンジンのバージョンの概要と、互換性に関する考慮事項について説明します。 最良の結果を得るには、サポートされている Oracle リリースと PostgreSQL リリースを使用してください。 非運用環境のテスト環境で変換を検証し、サポートされている各メジャー リリースの最新のマイナー パッチを使用します。 お使いの環境でサポートされていないバージョンを使用している場合、または Oracle 独自の機能が含まれている場合は、デプロイ前に追加の手動マッピングまたはレビューを実行することが必要になる場合があります。

次の Oracle データベース バージョンでは、スキーマ変換がサポートされています。

  • Oracle 21c
  • Oracle 19c
  • Oracle 18c
  • Oracle 12.2
  • Oracle 12.1

フィードバックとサポート

スキーマ変換機能または PostgreSQL 拡張機能に関連するバグ、機能要求、および問題については、Visual Studio Codeの組み込みのフィードバック ツールを使用してください。 このツールには、次の 2 つの方法でアクセスできます。

[ヘルプ] メニュー

ヘルプ>レポートの問題に移動します。

コマンド パレット

  1. Ctrl+Shift+P (Windows/Linux) または Cmd+Shift+P (macOS) を使用してコマンド パレットを開きます。
  2. コマンド PGSQL: Report Issue を実行します。

問題を作成したり、フィードバックを提供したりするときは、タイトルにプレフィックスとして Schema Conversion: を含めます。 このプレフィックスは、開発チームがスキーマ変換関連のフィードバックをすばやく特定し、優先順位を付けるのに役立ちます。 このフィードバック メカニズムは、開発チームがスキーマ変換機能を継続的に改善し、Oracle から Azure Database for PostgreSQL への移行プロジェクト中に発生する問題に対処するのに役立ちます。