機械翻訳について

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

ProxySQLを使用すると、DMLおよび問合せの文をルーティングすることで、複数のAutonomous Databaseへの統合アクセスが可能になり、すべてのデータを1つのデータベースに物理的に統合する必要がなくなります。

トピック

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

Autonomous Database上のProxySQLでは、複数のAutonomous Databaseインスタンスを使用でき、1つの場所に格納されたかのように、データへのアクセスおよび分析が容易になります。

ProxySQLは、複数のAutonomous Databaseを含む大規模な設定で作業する必要がある場合に使用できます。 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では、すべてのAutonomous Databaseインスタンスでデータ・ウェアハウスのワークロード・タイプを使用することをお薦めします。

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

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

ノート:

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

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


    proxysql-schema.pngの説明は以下のとおりです
    図proxysql-schema.pngの説明

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

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

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


    proxysql-object.pngの説明は以下のとおりです
    図proxysql-object.pngの説明

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

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


    proxysql-hybrid.pngの説明は以下のとおりです
    図proxysql-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スタンバイ・データベースへのフェイルオーバーまたはスイッチオーバー後に停止します。