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データベースに伝搬されます。
関連項目:
-
CREATE TABLE
文の詳細は、『Oracle Database SQL言語リファレンス』を参照 -
INMEMORY_SIZE
およびINMEMORY_ADG_ENABLED
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照
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
表の移入を分割することはできません。
関連項目:
- 「オブジェクトレベルのサービス制御」
-
DISTRIBUTE FOR SERVICE
副句についてさらに学習するには、Oracle Database SQL言語リファレンスを参照
11.1.2 IM列ストアはOracle Active Data Guardでどのように機能するか
Oracle Active Data Guard環境では、オブジェクトレベルのPRIORITY
属性によって移入が管理されます。オブジェクトは、サービスがアクティブなデータベース・インスタンスにのみ移入されます。
移入は、PRIORITY
値に応じて、オンデマンドまたは優先順位ベースのどちらかとなります。ロール変更またはスイッチオーバーがあった場合、データベースでは、サービスを新たにマップするデータベース・インスタンスのセットに従って、表が再移入されます。
ノート:
スタンバイ・データベースでは、IMファスト・スタート、結合グループ、IM式の取得または複数インスタンスのREDO適用はサポートされていません。
次の図では、プライマリ・データベースからのREDOによるスタンバイ・データベースの更新の内部メカニズムを示します。
このプロセスは、次のとおりです。
-
プライマリ・データベースでREDOが生成されてから、そのREDOがスタンバイ・データベースに転送されます。
すべてのDML文に対してプライマリ・データベース上で生成されたREDOには、変更が
INMEMORY
オブジェクトに対するものであるかどうかを示すメタデータが含まれています。 -
スタンバイ・データベースにより、ディスクに格納されたデータ・ブロックにREDOが適用されます。
プライマリ・データベースで行われている操作から生成されたREDOがスタンバイ・データベースによって適用されるため、スタンバイ・データベースにより、それらのトランザクションの一貫性が保たれます。
-
INMEMORY
オブジェクトが変更される場合は、スタンバイ・データベースにより、プライマリ・データベースで行われるのと同様に、変更された行が無効になり、トランザクション・ジャーナルおよびスナップショット・メタデータ単位(SMU)を使用して変更が追跡されます。
再移入のメカニズムは、プライマリ・データベースと同じようにスタンバイ・データベースで機能します。十分な数のDMLがオブジェクト上で発生して内部しきい値に達すると、スタンバイ・データベースにより、そのオブジェクトがIM列ストアに再移入されます。
関連項目:
-
複数インスタンスのREDO適用についてさらに学習するには、Oracle Data Guard概要および管理を参照
11.2 Oracle Active Data Guard環境でのIM列ストアの構成
Oracle Active Data GuardでのIM列ストアの構成には、INMEMORY_SIZE
の設定、および移入されるオブジェクトに対する適切なINMEMORY
属性の設定が必要となります。
前提条件
次の要件を満たす必要があります。
-
スタンバイ・データベースは、Oracle Engineered System上で、またはOracle Cloud Platform as a Service内で実行する必要があります。
-
COMPATIBLE
初期化パラメータは、12.2.0
以上にする必要があります。 -
データベースごとに異なるオブジェクトを移入するには、適切なサービスを構成します。
Oracle Active Data Guard環境でIM列ストアを構成するには:
-
IM列ストアを含むデータベース・インスタンス上で
INMEMORY_SIZE
初期化パラメータを設定します。次のガイドラインに従ってください。
-
プライマリおよびスタンバイ・データベース上のIM列ストアを構成するには、両方のデータベース・インスタンス上で
INMEMORY_SIZE
を設定します。 -
スタンバイ・データベースのみでIM列ストアを構成するには、スタンバイ・データベース・インスタンス上で
INMEMORY_SIZE
を設定します。
-
-
必ずスタンバイ・データベース・インスタンスで
INMEMORY_ADG_ENABLED
初期化パラメータがTRUE
(デフォルト)に設定されるようにします。 -
プライマリ・データベースで、
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文をプライマリ・データベースから受信します。スタンバイ・データベース上で通常の方法で移入が行われます。たとえば、
sales
にINMEMORY
属性および優先順位NONE
が設定されている場合は、移入を行うためにその表に全体スキャンを実行する必要があります。 -
IM列ストアが両方のデータベースに存在し、これらのIM列ストアに異なるオブジェクトを含める必要がある場合は、プライマリ・データベースにログインし、オブジェクトごとに必要に応じて
INMEMORY ... DISTRIBUTE FOR SERVICE
を設定します。各DDL文で、サービスにより、オブジェクトを移入する必要があるインスタンスが指定されます。たとえば、スタンバイ・データベースでのみ
sales
を移入に使用できるようにするには、DDL文でスタンバイ専用サービスを指定します。両方のデータベースでproducts
を移入に使用できるようにするには、DDL文でスタンバイ/プライマリ・サービスを指定します。
-
関連項目:
-
DISTRIBUTE FOR SERVICE
副句についてさらに学習するには、Oracle Database SQL言語リファレンスを参照 -
INMEMORY_SIZE
およびINMEMORY_ADG_ENABLED
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照