11 Oracle Active Data GuardでのIM列ストアのデプロイ

この章では、どのようにDatabase In-Memoryの機能がOracle Active Data Guard環境で動作するかを説明します。

この章のトピックは、次のとおりです:

11.1 Database In-MemoryおよびActive Data Guardについて

Oracle Database 12cリリース2 (12.2.0.1)以降、Oracle Database In-MemoryはOracle Engineered SystemsまたはOracle Cloud Platform as a Serviceを使用してOracle Active Data Guard環境内でサポートされています。

この項では、次の項目について説明します。

関連項目:

Oracle Active Data Guardの概要は、Oracle Data Guard概要および管理を参照してください。

11.1.1 Oracle Active Data GuardでのIM列ストアの目的

IM列ストアは、プライマリ・データベース上のみ、スタンバイ・データベース上のみ、またはプライマリおよびスタンバイ・データベースの両方で構成できます。

IM列ストアを両方のデータベースに対して構成する場合は、同一または異なるオブジェクト・セットをそれら2つのインスタンスに移入できます。この手法では、IM列ストアのサイズが効率的に増加します。

この項では、次の項目について説明します。

11.1.1.1 プライマリおよびスタンバイ・データベース内に同一のIM列ストア

最も単純なシナリオでは、プライマリおよびスタンバイ・データベースのどちらにも、同じサイズでIM列ストアが含まれます(必須ではない)。それらのIM列ストアには、同じオブジェクトが含まれています。

このシナリオの利点は、分析問合せにより、どちらのデータベース上のIM列ストアにもアクセスできることです。したがって、分析問合せをスタンバイ・データベースに指示し、プライマリ・データベースではリソースを消費しないようにすることができます。結果として、スタンバイ・データベースが分析ワークロードをサポートする一方で、プライマリ・データベースがトランザクション・ワークロードをサポートできます。

主な作業は、次のとおりです。

  • INMEMORY_SIZE初期化パラメータをプライマリおよびスタンバイ・データベース・インスタンスの両方で設定します。

  • 必ずスタンバイ・データベース・インスタンスでINMEMORY_ADG_ENABLED初期化パラメータがTRUE (デフォルト)に設定されるようにします。

  • それら2つのIM列ストアに移入されるすべてのオブジェクトに対して、INMEMORY属性を設定します。

オブジェクトのINMEMORY属性を変更した場合は、プライマリ・データベースにより、その変更内容がスタンバイ・データベースに伝えられます。たとえば、NO INMEMORY属性をsales表で設定した場合は、両方のIM列ストアでsalesが強制的に除去されます。

プライマリ・データベースでは、IM列ストアへの移入のために表の列のサブセットを有効にできます。異なる列に対して異なる圧縮レベルを指定することもできます。特定列の有効化には、ディクショナリ変更が含まれます。プライマリ・データベース上のDDLは、Oracle Active Data Guardデータベースに伝搬されます。

関連項目:

11.1.1.2 スタンバイ・データベース内のみにIM列ストア

このシナリオでは、IM列ストアは、スタンバイ・データベースには存在しますが、プライマリ・データベースには存在しません。

このシナリオでは、プライマリ・データベースは純粋なOLTPデータベースとして機能できます。IM列ストアのためにプライマリ・データベースで余分なメモリーは必要になりません。パフォーマンスを犠牲にすることやプライマリ・データベース上のリソースを消費することなく、分析レポート・アプリケーションをスタンバイ・データベースに向けることができます。

主な作業は、次のとおりです。

  • INMEMORY_SIZE初期化パラメータをスタンバイ・データベース・インスタンスでゼロ以外の値に設定し、プライマリ・データベース・インスタンスでは0に設定します。

  • 必ずスタンバイ・データベース・インスタンスでINMEMORY_ADG_ENABLED初期化パラメータがTRUE (デフォルト)に設定されるようにします。

  • スタンバイ・データベース内のIM列ストアに移入されるすべてのオブジェクトに対して、DISTRIBUTE FOR SERVICE句でINMEMORY属性を設定します。

    たとえば、プライマリ・データベースにログインし、INMEMORY属性をsh.sales表で設定した場合、IM列ストアはこのデータベースに存在しないため、この表はプライマリ・データベース上のIM列ストアに移入されません。ただし、スタンバイ・データベースでは、sh.sales表のINMEMORY属性が継承されます。この表は、スタンバイ・データベース内のIM列ストアに移入されます。

11.1.1.3 プライマリおよびスタンバイのIM列ストア内に異なるオブジェクト

最も柔軟性のあるシナリオは、IM列ストアをプライマリおよびスタンバイ・データベースに対して別々に構成するというものです。

このシナリオの利点は、各データベースで異なるワークロードを実行できるということです。たとえば、HRアプリケーションがプライマリ・データベースでレポートを実行する一方で、販売履歴アプリケーションがスタンバイ・データベースでレポートを実行します。したがって、どちらのデータベースも、分析レポートのすべての負荷に耐えることはありません。

主な作業は、次のとおりです。

  • スタンバイおよびプライマリ・データベース・インスタンスで、INMEMORY_SIZE初期化パラメータをゼロ以外の値に設定します。それらの値を同一にする必要はありません。

  • 必ずスタンバイ・データベース・インスタンスでINMEMORY_ADG_ENABLED初期化パラメータがTRUE (デフォルト)に設定されるようにします。

  • それら2つのIM列ストアに移入されるすべてのオブジェクトに対して、INMEMORY ... DISTRIBUTE FOR SERVICE句を設定します。サービスにより、オブジェクトを移入するインスタンスが指定されます。

サービス3つの構成

一般的な構成では、スタンバイのみ、プライマリのみ、およびプライマリとスタンバイという3つのサービスを作成します。たとえば、プライマリ・インスタンスでは最新月のsalesファクト表データが必要だが、スタンバイ・インスタンスでは前のsalesデータが必要だとします。両方のインスタンスに移入されたディメンション表が必要です。salesパーティションごとに、INMEMORY ... DISTRIBUTE FOR SERVICEを使用して、スタンバイまたはプライマリ・サービスのどちらかを指定します。ディメンション表ごとに、プライマリおよびスタンバイ・データベース・インスタンスを両方とも含むサービスを指定します。

注意:

サービス名がプライマリおよびスタンバイ・インスタンスの両方に対して定義されているかぎり、DISTRIBUTE FOR SERVICEで同じサービス名を指定して、プライマリおよびスタンバイ・データベースに同じ表を移入できます。

Oracle RACおよびOracle Active Data Guard

Oracle RACでは、移入のためのインスタンスを指定するFOR SERVICE句を、IMCUの分散を制御するDISTRIBUTE AUTO句またはDISTRIBUTE BY句と組み合せることができます。ただし、Oracle Active Data Guardでは、FOR SERVICE句は、指定されたオブジェクトを移入するプライマリまたはスタンバイ・インスタンスを指定します。DISTRIBUTE AUTOまたはDISTRIBUTE BYを使用してプライマリ・インスタンスとスタンバイ・インスタンスのでIMCUを分散することはできません。たとえば、IMCUの半分がプライマリ・インスタンス内に、IMCUのもう半分がスタンバイ・インスタンス内に存在するように、プライマリ・インスタンスとスタンバイ・インスタンスとの間でsales表の移入を分割することはできません。

11.1.2 IM列ストアはOracle Active Data Guardでどのように機能するか

Oracle Active Data Guard環境では、オブジェクトレベルのPRIORITY属性によって移入が管理されます。オブジェクトは、サービスがアクティブなデータベース・インスタンスにのみ移入されます。

移入は、PRIORITY値に応じて、オンデマンドまたは優先順位ベースのどちらかとなります。ロール変更またはスイッチオーバーがあった場合、データベースでは、サービスを新たにマップするデータベース・インスタンスのセットに従って、表が再移入されます。

注意:

スタンバイ・データベースでは、IMファスト・スタート、結合グループ、IM式の取得または複数インスタンスのREDO適用はサポートされていません。

次の図では、プライマリ・データベースからのREDOによるスタンバイ・データベースの更新の内部メカニズムを示します。

図11-1 スタンバイ・データベースの更新

図11-1の説明が続きます
「図11-1 スタンバイ・データベースの更新」の説明

このプロセスは、次のとおりです。

  1. プライマリ・データベースでREDOが生成されてから、そのREDOがスタンバイ・データベースに転送されます。

    すべてのDML文に対してプライマリ・データベース上で生成されたREDOには、変更がINMEMORYオブジェクトに対するものであるかどうかを示すメタデータが含まれています。

  2. スタンバイ・データベースにより、ディスクに格納されたデータ・ブロックにREDOが適用されます。

    プライマリ・データベースで行われている操作から生成されたREDOがスタンバイ・データベースによって適用されるため、スタンバイ・データベースにより、それらのトランザクションの一貫性が保たれます。

  3. INMEMORYオブジェクトが変更される場合は、スタンバイ・データベースにより、プライマリ・データベースで行われるのと同様に、変更された行が無効になり、トランザクション・ジャーナルおよびスナップショット・メタデータ単位(SMU)を使用して変更が追跡されます。

再移入のメカニズムは、プライマリ・データベースと同じようにスタンバイ・データベースで機能します。十分な数のDMLがオブジェクト上で発生して内部しきい値に達すると、スタンバイ・データベースにより、そのオブジェクトがIM列ストアに再移入されます。

関連項目:

11.2 Oracle Active Data Guard環境でのIM列ストアの構成

Oracle Active Data GuardでのIM列ストアの構成には、INMEMORY_SIZEの設定、および移入されるオブジェクトに対する適切なINMEMORY属性の設定が必要となります。

この作業は、Oracle Active Data Guardの概要および手順について知識があることが前提となっています。

前提条件

次の要件を満たす必要があります。

  • スタンバイ・データベースは、Oracle Engineered System上で、またはOracle Cloud Platform as a Service内で実行する必要があります。

  • COMPATIBLE初期化パラメータは、12.2.0以上にする必要があります。

  • データベースごとに異なるオブジェクトを移入するには、適切なサービスを構成します。

Oracle Active Data Guard環境でIM列ストアを構成するには、次の手順を実行します。

  1. IM列ストアを含むデータベース・インスタンス上でINMEMORY_SIZE初期化パラメータを設定します。

    次のガイドラインに従ってください。

    • プライマリおよびスタンバイ・データベース上のIM列ストアを構成するには、両方のデータベース・インスタンス上でINMEMORY_SIZEを設定します。

    • スタンバイ・データベースのみでIM列ストアを構成するには、スタンバイ・データベース・インスタンス上でINMEMORY_SIZEを設定します。

  2. 必ずスタンバイ・データベース・インスタンスでINMEMORY_ADG_ENABLED初期化パラメータがTRUE (デフォルト)に設定されるようにします。

  3. プライマリ・データベースで、INMEMORY属性を使用してDDL文を実行します。

    作業は、IM列ストアが存在する場所、およびIM列ストアごとに異なるオブジェクトを移入するかどうかによって異なります。

    • IM列ストアが両方のデータベースに存在する場合は、プライマリ・データベースに接続し、INMEMORY属性をDISTRIBUTE FOR SERVICE句なしで設定します。たとえば、INMEMORY属性をsh.sales表に適用します。

      標準規則に従って各データベースで移入が行われます。たとえば、スタンバイ・データベース上のsalesの優先順位がNONEの場合は、salesの全体スキャンをトリガーするスタンバイ・データベースの問合せにより、この表がスタンバイIM列ストアに移入されます。

      注意:

      スタンバイ・データベース上のsalesの全体スキャンによって、この表がプライマリ・データベース内のIM列ストアに移入されることはありません。

    • IM列ストアがスタンバイ・データベースのみに存在する場合は、プライマリ・データベースにログインし、INMEMORY属性をDISTRIBUTE FOR SERVICE句なしで設定します。

      REDO転送中に、スタンバイ・データベースはこのDDL文をプライマリ・データベースから受信します。スタンバイ・データベース上で通常の方法で移入が行われます。たとえば、salesINMEMORY属性および優先順位NONEが設定されている場合は、移入を行うためにその表に全体スキャンを実行する必要があります。

    • IM列ストアが両方のデータベースに存在し、これらのIM列ストアに異なるオブジェクトを含める必要がある場合は、プライマリ・データベースにログインし、オブジェクトごとに必要に応じてINMEMORY ... DISTRIBUTE FOR SERVICEを設定します。

      各DDL文で、サービスにより、オブジェクトを移入する必要があるインスタンスが指定されます。たとえば、スタンバイ・データベースでのみsalesを移入に使用できるようにするには、DDL文でスタンバイ専用サービスを指定します。両方のデータベースでproductsを移入に使用できるようにするには、DDL文でスタンバイ/プライマリ・サービスを指定します。

関連項目: