Autonomous DatabaseでProxySQLを有効にして効率的な文ルーティングを使用

ProxySQLは、DMLおよび問合せの文をルーティングすることで、複数のAutonomous Databasesへの統合アクセスを可能にし、すべてのデータを1つのデータベースに物理的に統合する必要性を排除します。

トピック

Autonomous DatabaseでのProxySQLを使用した効率的な文のルーティングについて

Autonomous Database上のProxySQLを使用すると、複数のAutonomous Databaseインスタンスを使用でき、1つの場所に格納されたかのように、データに簡単にアクセスして分析できます。

ProxySQLは、複数のAutonomous Databasesを含む大規模な設定で作業する必要がある場合に使用できます。ProxySQLを使用すると、様々なデータベースへの統合アクセスが可能になり、データを1つの場所に物理的に移動する必要がなくなります。

ProxySQLを有効にすると、1つのAutonomous Databaseインスタンスをルーター・インスタンスとして指定し、1つ以上のAutonomous Databaseインスタンスがターゲット・インスタンスになります。ルーター・インスタンスには、文を1つ以上のターゲット・インスタンスに分散(マップ)する方法を決定するルーティング表が含まれます。ターゲット・インスタンスには、受入れ表が含まれます。受入れテーブルはルーティングテーブルに似ており、インスタンスがルーターからのステートメントリダイレクトを受け入れることを指定するエントリが含まれています。

選択したルーティング方法に応じて、ステートメントはルーターインスタンスから1つ以上のターゲットインスタンスに自動的にマップされます。アプリケーションはルーター・インスタンスに接続し、ルーター・インスタンスで実行し、Autonomous Databaseは文を1つ以上のターゲット・インスタンスにリダイレクトします。

1つの非常に大きなAutonomous Databaseを使用する場合と比較して、ProxySQLを有効にする利点の一部を次に示します:

  • ProxySQLは、ライフサイクル管理や管理タスクなどの操作のためのデータベースの自律性と独立性を提供します。たとえば、ProxySQLを使用すると、バックアップとリストアなどのデータベース操作、およびAutonomous Data Guardなどの機能は、各Autonomous Databaseインスタンスで個別に管理されます。

  • ProxySQLを使用すると、複数のAutonomous Databaseインスタンスにデータを分割して、非常に大規模なデータベースを効率的に管理できます。

ProxySQLの操作時に知っておく必要がある用語がいくつかあります。

ルーター・インスタンス: ProxySQLを有効にすると、ルーター・インスタンスが指定されます。ルーティング表は、文を1つ以上のターゲット・インスタンスに分散(マップ)する方法を決定します。指定されたルーティング方法に応じて、ルーターインスタンスからのステートメントは自動的に1つ以上のターゲットインスタンスにマッピングされます。

ターゲット・インスタンス: ターゲット・インスタンスは、ルーター・インスタンスでマッピングを作成するときに指定されます。各ターゲット・インスタンスに受入れ表が追加されます。

ルーティング表: ルーティング表には、文が自動的にルーティングされるインスタンスを指定するターゲット・マッピング・エントリが含まれます。

受入れ表: 受入れ表には、インスタンスがルーターからの文リダイレクトを受け入れることを指定するエントリが含まれます。

ProxySQLを使用するための要件

ProxySQLの要件は次のとおりです。

  • ProxySQLの有効化は、エラスティック・プールにあるAutonomous Databaseインスタンスでのみサポートされています。ルーター・インスタンスとすべてのターゲット・インスタンスは、同じエラスティック・プールのメンバーである必要があります。

  • ルーター・インスタンスとすべてのターゲット・インスタンスが同じリージョンにある必要があります。

  • ルーティングするオブジェクトのメタデータは、ルーター・インスタンスとターゲット・インスタンスで一致する必要があります。アプリケーション設計者は、ターゲット・インスタンスに存在するオブジェクトのメタデータもルーター・インスタンスに存在する必要があります。たとえば、ターゲット・インスタンスにEMPLOYEESという名前の表がある場合、ルーター・インスタンスにEMPLOYEESという名前の一致するメタデータを持つ表も必要です。ルーター・インスタンスの表は、空である必要はありません(メタデータのみ)。

ProxySQLを有効にするための推奨事項

ルーターおよびターゲットとして追加するインスタンスは、任意のAutonomous Databaseワークロード・タイプにできます。ルーティング(マッピング)表にエントリがある場合、それらのエントリで指定されたオブジェクトに対する文は、ターゲットのワークロード・タイプに関係なく、対応するターゲット・インスタンスにルーティングされます。Oracleでは、すべてのtheAutonomousデータベース・インスタンスでデータ・ウェアハウスのワークロード・タイプを使用することをお薦めします。

ProxySQLを有効にした自動文ルーティング

ProxySQLを使用すると、サポートされているルーティング方法のいずれかを使用して、ターゲット間で文を分散できます。

ノート

使用するルーティング方法(マッピング)に関係なく、ターゲット・インスタンスに配置されたオブジェクトのメタデータがルーター・インスタンスでも使用可能になるようにするのは、アプリケーション・スキーマ設計者の責任です。たとえば、ターゲット・インスタンスにEMPLOYEESという名前の表がある場合、ルーター・インスタンスにEMPLOYEESという名前の一致するメタデータを持つ表も必要です。ルーターインスタンス内のテーブルは空である必要はありません。
  • スキーマ・レベルのルーティング: スキーマのすべてのオブジェクトが単一のターゲット・インスタンスにマップされます。複数のスキーマを単一のターゲット・インスタンスにマッピングできます。ただし、1つのスキーマの文は複数のターゲット・インスタンス間でマップできません。つまり、同じスキーマをスキーマ・ルーティングとオブジェクト・ルーティングの両方に使用することはできません。

    スキーマ・レベルのルーティングを指定するには、object_nameパラメータの値を"*"に設定してDBMS_PROXY_SQL.ADD_MAPPINGプロシージャをコールします。


    proxysql-schema.pngの説明が続きます
    図プロキシSQL-schema.pngの説明

    この例では、スキーマAのオブジェクトのメタデータは、ターゲットAutonomous Database 1とルーター・インスタンスの両方に存在し、スキーマBのオブジェクトのメタデータは、ターゲットAutonomous Database 2とルーター・インスタンスの両方に存在します。

  • オブジェクト・レベルのルーティング: スキーマ内のオブジェクトは、複数のターゲット・インスタンス間でマップされます。

    オブジェクト・レベル・ルーティングを指定するには、object_nameパラメータを表名に設定してDBMS_PROXY_SQL.ADD_MAPPINGプロシージャをコールします。


    proxysql-object.pngの説明が続きます
    図プロキシSQL-object.pngの説明

    この例では、表Aのメタデータがターゲット1とルーター・インスタンスの両方に存在し、表Bのメタデータがターゲット2とルーター・インスタンスの両方に存在します。

  • ハイブリッド・ルーティング: スキーマ・レベルのルーティングとオブジェクト・レベルのルーティングの組合せを使用して、スキーマのオブジェクトがルーティングされます。


    proxysql-hybrid.pngの説明が続きます
    図プロキシSQL-hybrid.pngの説明

    この例では、スキーマAのメタデータはターゲットAutonomous Database 1とルーター・インスタンスの両方に存在し、表Bのメタデータ(スキーマB)はターゲットAutonomous Database 2とルーター・インスタンスの両方に存在します。

ProxySQLが有効な場合の自動文ルーティングによるサービス・マッピング

ルーティングテーブルがターゲットデータベースへのマッピングを示している場合、ルータデータベースに接続しているサービスと同じサービスがターゲットデータベースのデータアクセスに使用されます。

たとえば、セッションがルーター・インスタンスのHIGHサービスに接続されている場合、ターゲット・インスタンスにルーティングされる文または文のフラグメントもHIGHサービスを使用します。同様に、ルーター・インスタンス上のMEDIUMサービスにセッションが接続されている場合、ターゲット・インスタンスにルーティングされる文はMEDIUMサービスを使用します。

ルーター・インスタンスでの接続に使用されるサービスがターゲット・インスタンスで使用できない場合、ターゲット・インスタンスにルーティングされる文または文のフラグメントはMEDIUMサービスを使用します(使用可能なサービスはAutonomous Databaseワークロード・タイプによって異なります)。

文のルーティングの有効化およびスキーマ・マッピングの定義

この項では、メイン・ルーターから1つ以上のターゲット・データベース・インスタンスへの自動文ルーティング用にProxySQLを設定する方法について説明します。

明細書ルーティングの有効化およびルーターからターゲット・インスタンスへのオブジェクト・マッピングの定義

文のルーティングを設定するには、ルーター・インスタンスでProxySQLを有効にし、文がターゲット・データベースにマップ(送信)されるスキーマを定義します。

自動明細書送付を有効にするための前提条件は次のとおりです。

  • ルーター・インスタンスに使用する予定のAutonomous Databaseインスタンスを作成するか、既存のAutonomous Databaseインスタンスをルーター・インスタンスとして識別します。

  • ターゲット・インスタンスを作成するか、既存のAutonomous Databaseインスタンスからターゲット・インスタンスを識別します。

  • ルーター・インスタンスと、問合せをリダイレクトするターゲット・インスタンスに、ルーターからターゲットにマッピングするオブジェクトと一致するメタデータがあることを確認します。

    使用するルーティング方法(マッピング)に関係なく、ターゲット・インスタンスに配置されたオブジェクトのメタデータもルーター・インスタンスで使用できるようにするのは、アプリケーション・スキーマ設計者の責任です。たとえば、ターゲット・インスタンスにEMPLOYEESという名前の表がある場合、ルーター・インスタンスにEMPLOYEESという名前の一致するメタデータを持つ表も必要です。ルーターインスタンス内のテーブルは空である必要はありません。

  • 使用可能な選択肢から、使用する文ルーティングのタイプ(スキーマ・レベル・ルーティング、オブジェクト・レベル・ルーティングまたはハイブリッド・ルーティング)を決定します。

自動取引明細書送付を有効にし、ターゲット・マッピング・エントリをルーティング表に追加するには:

  1. Autonomous Databaseインスタンスで、DBMS_PROXY_SQL.ENABLE_ROUTINGを実行して自動文ルーティングを有効にします。

    たとえば:

    BEGIN
       DBMS_PROXY_SQL.ENABLE_ROUTING;
    END;
    /

    DBMS_PROXY_SQL.ENABLE_ROUTINGを実行するインスタンスがルーター・インスタンスになります。これにより、自動取引明細書送付が有効になり、ルーティング表が作成されます。

    詳細は、ENABLE_ROUTINGプロシージャを参照してください。

  2. DBMS_PROXY_SQL.ADD_MAPPINGを実行して、ルーターからターゲットへのマッピングを定義します。これにより、問合せが自動的にルーティングされるターゲット・インスタンスを指定するエントリがルーティング表に作成されます。

    オブジェクト・レベルのルーティングを有効にする例:

    BEGIN
     DBMS_PROXY_SQL.ADD_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => 'INVENTORY',
        database_ocid  => 'TARGET1_DATABASE_OCID');
    END;
    /

    スキーマ・レベルのルーティングを有効にする例:

    BEGIN
     DBMS_PROXY_SQL.ADD_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => '*',
        database_ocid  => 'TARGET2_DATABASE_OCID');
    END;
    /

    データベースOCIDを取得するには、次の問合せを使用します。

    SELECT json_value(cloud_identity,'$.DATABASE_OCID') 
       FROM v$pdbs;
    

    object_ownerパラメータは、オブジェクトの所有者を指定します。

    object_nameパラメータは、オブジェクトを指定します。

    database_ocidパラメータは、ターゲット・インスタンスのOCIDを指定します。database_ocidパラメータ値は大文字にする必要があります。ターゲット・インスタンスのOCIDを確認するには、ADMINとしてターゲット・インスタンスに接続し、次の問合せを実行します。

    SELECT json_value(cloud_identity, '$.DATABASE_OCID') FROM v$pdbs;

    詳細は、テナンシ詳細の取得を参照してください。

    これにより、ルーティングテーブルにルーティングエントリが作成され、ターゲットインスタンスへのオブジェクトマッピングが定義されます。

    詳細は、ADD_MAPPINGプロシージャを参照してください。

  3. 必要に応じて、DBMS_PROXY_SQL.ADD_MAPPINGを実行して、追加のターゲット・マッピングを追加します。

    たとえば:

    BEGIN
     DBMS_PROXY_SQL.ADD_MAPPING ( 
        object_owner   => 'DW_USER_1',
        object_name    => 'CUSTOMERS',
        database_ocid  => 'TARGET3_DATABASE_OCID');
    END;
    /

DBA_PROXY_SQL_MAPPINGSビューを問い合せて、ルーティング表のレコードをリストできます。詳細は、DBA_PROXY_SQL_MAPPINGSビューを参照してください。

ターゲット・インスタンスでの文書ルーティングの受入

ルーター・インスタンスからのマッピングを許可するには、ターゲット・インスタンスで文ルーティングを受け入れる必要があります。

ルーター・インスタンスからターゲット・インスタンスへの(accept)文のリダイレクトを許可するには:

  1. ターゲット・インスタンスで、DBMS_PROXY_SQL.ACCEPT_MAPPINGを実行します。

    たとえば:

    BEGIN
     DBMS_PROXY_SQL.ACCEPT_MAPPING ( 
        object_owner          => 'DW_USER',
        router_database_ocid  => 'ROUTER_DATABASE_OCID'); 
     END;
    /

    object_ownerは、ターゲットが文のルーティングを受け入れる所有者です。

    router_database_ocidは、ルーターのAutonomous DatabaseインスタンスのOCIDを指定します。これは、ターゲットが着信リダイレクトされた文リクエストを受け入れるインスタンスを指定します。

    受入れマッピングはオブジェクト所有者ごとに1つであるため、ルータインスタンス上の複数のオブジェクトマッピングに対応する受入れは1つだけ必要になる場合があります。

    DBMS_PROXY_SQL_ACCEPTED_MAPPINGSビューをステートメントして、受入れ表内のレコードをリストできます。詳細は、DBA_PROXY_SQL_ACCEPTED_MAPPINGSビューを参照してください。

    詳細は、ACCEPT_MAPPINGプロシージャを参照してください。

  2. ルーター・マッピングで複数のターゲットが指定されている場合は、各ターゲットでDBMS_PROXY_SQL.ACCEPT_MAPPINGを実行します。

    詳細は、ACCEPT_MAPPINGプロシージャを参照してください。

ProxySQLを使用した文の発行

自動文ルーティングを利用するには、ProxySQLによって管理されるルーター・インスタンスに接続し、文を送信する必要があります。

ProxySQLを有効にしてDML文を含む問合せを送信する場合、自動文ルーティングを利用するには、ルーター・インスタンスに接続する必要があります。

ターゲット・インスタンスへの文のルーティングの停止

ターゲットAutonomous Databaseで次のステップを実行して、ProxySQLルーターからのルーティングされた文の受入れを停止させます。

  1. ターゲット・インスタンスでDBMS_PROXY_SQL.REJECT_MAPPINGを実行して、指定した所有者の文ルーティングを拒否します。

    たとえば:

    BEGIN
     DBMS_PROXY_SQL.REJECT_MAPPING ( 
        object_owner          => 'DW_USER',
        router_database_ocid  => 'ROUTER_DATABASE_OCID');
     END;
    /

    object_ownerパラメータは、所有者名を指定します。

    router_database_ocidパラメータは、ルーター・インスタンスのOCIDを指定します。

    このプロシージャを実行するターゲットAutonomous Databaseインスタンスは、指定されたオブジェクト所有者の指定されたルーター・インスタンスからのルーティング・リクエストを要求しなくなりました。

  2. 必要に応じて、追加のターゲットでDBMS_PROXY_SQL.REJECT_MAPPINGを実行します。

詳細は、REJECT_MAPPINGプロシージャを参照してください。

ルーター・インスタンスからのスキーマまたはオブジェクト・マッピングの削除

ProxySQLによって管理されるルーター・データベースから特定のマッピングを削除するステップを示します。

  1. DBMS_PROXY_SQL.REMOVE_MAPPINGプロシージャを使用すると、指定したオブジェクトの前に追加したマッピング・エントリを削除できます。たとえば:

    表を含む例:

    BEGIN
     DBMS_PROXY_SQL.REMOVE_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => 'INVENTORY');
     END;
    /
    この例では、ルーティング表からINVENTORY表のマッピング・エントリを削除します。このプロシージャの実行後、INVENTORY表に対する問合せは、どのターゲットAutonomous Databaseにもルーティングされません。

    例: スキーマの場合:

    BEGIN
     DBMS_PROXY_SQL.REMOVE_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => '*');
     END;
    /
    この例では、ルーティング表からDW_USERスキーマのマッピング・エントリを削除します。このプロシージャを実行すると、DW_USERスキーマに対する問合せは、どのターゲットAutonomous Databaseにもルーティングされません。

    object_ownerパラメータでは、所有者を指定します。

    object_nameパラメータでは、表名を指定します。

    詳細は、REMOVE_MAPPINGプロシージャを参照してください。

取引明細書送付の無効化

ProxySQLを無効にして文を自動ルーティングするステップを示します。

ルーター・インスタンスでDBMS_PROXY_SQL.DISABLE_ROUTINGを実行して、ProxySQLを無効にし、ターゲット・インスタンスへの自動文ルーティングを無効にします。

たとえば:

BEGIN
 DBMS_PROXY_SQL.DISABLE_ROUTING;
END;
/

これにより、ProxySQLが無効になり、ルーターの自動文ルーティングが無効になります。

ProxySQLを無効にしても、ルーター・インスタンスのルーティング表にある文マッピング・エントリは削除されません。これは、ProxySQLを再度有効にし、ルーティング表に既存のエントリがある場合、自動文ルーティングによって、ルーティング表に指定されたとおりに文がターゲット・インスタンスにルーティングされることを意味します。ProxySQLを再度有効にする前に既存のルーティング表エントリを削除する場合は、プロシージャDBMS_PROXY_SQL.REMOVE_MAPPINGを使用します。

詳細は、DISABLE_ROUTINGプロシージャを参照してください。

ProxySQLノートによる自動文ルーティング

ProxySQLが有効な場合の自動文のルーティングに関する制限事項と重要なノートを示します。

  • ADMINユーザーには、ProxySQLを管理する権限があります。別のユーザーを有効にする場合は、次の権限を付与する必要があります。

    • DBMS_PROXY_SQLパッケージに対するEXECUTE権限。

    • DBA_PROXY_SQL_MAPPINGSビューに対するREAD権限。

    • DBA_PROXY_SQL_ACCEPTED_MAPPINGSビューに対するREAD権限。

  • 自動明細書送付は、次の場合にシームレスに再開されます。
    • ターゲットAutonomous Databaseインスタンスは、ローカルのAutonomous Data Guardスタンバイにフェイルオーバーします。

    • ターゲットAutonomous DatabaseインスタンスのローカルAutonomous Data Guardスタンバイへのスイッチオーバーを実行します。

    ただし、クロスリージョンAutonomous Data Guardスタンバイ・データベースへのフェイルオーバーまたはスイッチオーバー後、自動文のルーティングは停止します。