85 DBMS_INMEMORY_ADMIN
DBMS_INMEMORY_ADMIN
は、インメモリー・ファスト・スタート(IMファスト・スタート)領域およびインメモリー式(IM式)を管理するためのインタフェースを提供します。
この章のトピックは、次のとおりです:
参照:
Oracle Database In-Memory機能についてさらに学習するには、『Oracle Database In-Memoryガイド』を参照してください。
85.1 DBMS_INMEMORY_ADMINの概要
このパッケージは、インメモリー式(IM式)およびインメモリー・ファスト・スタート(IMファスト・スタート)領域を管理するためのインタフェースを提供します。
IM式
分析的な問合せには、多くの場合、実行中にCPUおよびメモリーを大量に消費する複雑な式や計算が含まれています。IME_CAPTURE_EXPRESSIONS
を使用して、これらのうち頻繁に使用される(ホットな)式を特定し、IME_POPULATE_EXPRESSIONS
を使用してIM列ストアに移入します。IM式を使用することにより、データベースで同じ計算が繰返し実行されることがなくなり、パフォーマンスが向上します。
データベースでは、IM式がシステム生成の仮想列として示されます。IM仮想列の名前はSYS_IME
で始まります。DBMS_INMEMORY_ADMIN.IME_DROP_ALL_EXPRESSIONS
およびDBMS_INMEMORY.IME_DROP_EXPRESSIONS
を使用して、既存のSYS_IME
列を削除することもできます。
DBA_IM_EXPRESSIONS
ビューには、INMEMORY
属性を持つSYS_IME
列が表示されます。IME_CAPTURE_EXPRESSIONS
プロシージャの使用後は、このビューを問い合せて、データベースの異なる表に追加されたホットな式を確認できます。
参照:
IM式についてさらに学習するには、『Oracle Database In-Memoryガイド』を参照してください。
IMファスト・スタート領域
IMファスト・スタート領域に格納されるデータにより、データベースの再起動時にIM列ストアの移入が最適化されます。データベースでは、列データを圧縮またはフォーマットすることなく持続記憶域から直接読み取るため、データベース・インスタンスの再起動時には移入がより高速で行われます。
IM列ストアに対してIMファスト・スタートを有効にする場合、IMファスト・スタート領域のASSM表領域を指定する必要があります。表領域には、SYSDBIMFS_LOGSEG$
という名前のSecureFiles LOBのデータが格納されます。SYSAUX
表領域にはメタデータが格納されます。データがIM列ストアに移入または再移入されると、データベースにより自動的にデータがIMファスト・スタート領域に書き込まれます。手動で書込みを実行することはできません。オブジェクトをNO INMEMORY
として指定すると、データベースによりそのオブジェクトがIMファスト・スタート領域から削除されます。
IMファスト・スタート領域が不足すると、データベースにより自動的に最も古い15%のセグメントが削除され、列データの保存が継続されます。使用可能な領域がなくなると、IMファスト・スタート領域への書込みが停止します。
参照:
IM式についてさらに学習するには、『Oracle Database In-Memoryガイド』を参照してください。
自動インメモリー
自動インメモリーは、アクセス・トラッキングと列統計情報を使用して、IM列ストアのオブジェクトを管理します。IM列ストアがいっぱいになり、より頻繁にアクセスされる他のセグメントがIM列ストアへの移入から利点を得られる場合、IM列ストアでは、非アクティブなセグメントが削除されます。ただし、IM列ストアがすべてのINMEMORY
セグメントを保持するように構成されている場合は、自動インメモリーは何のアクションも実行されません。
デフォルトでは、自動インメモリーは過去31日間の使用統計情報をチェックします。現在の設定を変更するには、DBMS_INMEMORY_ADMIN.AIM_SET_PARAMETER
にAIM_STATWINDOW_DAYS
パラメータを指定します。
参照:
自動インメモリーについてさらに学習するには、Oracle Database In-Memoryガイドを参照してください
85.3 DBMS_INMEMORY_ADMINの操作上のノート
DBMS_INMEMORY_ADMIN
ファスト・スタート操作は、失敗するまたは中断される場合があります。
失敗または中断シナリオでは、次のルールによって使用できるサブプログラムが決定されます。
-
FASTSTART_ENABLE
が成功しなかった場合、許可される操作はFASTSTART_ENABLE
の再実行のみです。 -
FASTSTART_MIGRATE_STORAGE
が成功しなかった場合、許可される操作はFASTSTART_MIGRATE_STORAGE
の再実行のみです。 -
FASTSTART_DISABLE
が成功しなかった場合は、すべてのDBMS_INMEMORY_ADMIN
操作が許可されます。
85.4 DBMS_INMEMORY_ADMINサブプログラムの要約
この表は、DBMS_INMEMORY_ADMIN
サブプログラムを示し、簡単に説明しています。
表85-1 DBMS_INMEMORY_ADMINパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
このプロシージャは、自動インメモリーを制御するパラメータの現在の値を取得します。 |
|
このプロシージャは、自動インメモリーの実行環境をカスタマイズします |
|
このプロシージャは、インメモリー・ファスト・スタート(IMファスト・スタート)機能を無効にします。 |
|
このプロシージャは、IMファスト・スタートを有効にし、表領域を割り当てます。 |
|
このプロシージャは、すべてのIMファスト・スタート・データおよびメタデータを既存の表領域から指定された新しい表領域に移動します。 |
|
このファンクションは、現在IMファスト・スタートに指定されている表領域の名前を戻します。 |
|
このプロシージャは、指定された時間間隔でデータベース内の最も頻繁にアクセスされている(最もホットな)式を20個取得します。 |
|
このプロシージャは、現在の式取得ウィンドウの終了を示します。 |
|
このプロシージャは、データベース内の |
|
このプロシージャは、式取得ウィンドウの現在の取得状態および最後に加えられた変更のタイムスタンプを戻します。 |
|
このプロシージャは、式取得ウィンドウの開始を示します。 |
|
このプロシージャは、最後に起動された |
85.4.1 AIM_GET_PARAMETERプロシージャ
構文
DBMS_INMEMORY_ADMIN.AIM_GET_PARAMETER(
parameter IN NUMBER,
value OUT NUMBER);
パラメータ
パラメータ | 説明 |
---|---|
parameter |
自動インメモリーを制御する事前定義された定数を指定します。 有効な定数は、スライディング統計情報ウィンドウで日数を指定する |
value |
|
例85-1 統計情報ウィンドウの日数の取得
次のコードは、統計情報ウィンドウの日数を画面に出力します。
VARIABLE b_statwin NUMBER
BEGIN
DBMS_INMEMORY_ADMIN.AIM_GET_PARAMETER(DBMS_INMEMORY_ADMIN.AIM_STATWINDOW_DAYS, :b_statwin);
END;
/
PRINT b_statwin
出力例は次のように表示されます。
B_STATWIN
---------
14
参照:
AIM_GET_PARAMETER
の使用方法を学習するには、『Oracle Database In-Memoryガイド』を参照してください
85.4.2 AIM_SET_PARAMETERプロシージャ
構文
DBMS_INMEMORY_ADMIN.AIM_SET_PARAMETER(
parameter IN NUMBER,
value IN NUMBER);
パラメータ
パラメータ | 説明 |
---|---|
parameter |
自動インメモリーを制御する事前定義された定数を指定します。 有効な定数は、スライディング統計情報ウィンドウで日数を指定する |
value |
|
例85-2 統計情報ウィンドウの日数の設定
次の例では、ウィンドウの現在の日数を取得し、14に設定した後、値を画面に出力します。
VARIABLE b_statwin NUMBER
BEGIN
DBMS_INMEMORY_ADMIN.AIM_GET_PARAMETER(DBMS_INMEMORY_ADMIN.AIM_STATWINDOW_DAYS, :b_statwin);
END;
/
PRINT b_statwin
BEGIN
DBMS_INMEMORY_ADMIN.AIM_SET_PARAMETER(DBMS_INMEMORY_ADMIN.AIM_STATWINDOW_DAYS, 14);
END;
/
BEGIN
DBMS_INMEMORY_ADMIN.AIM_GET_PARAMETER(DBMS_INMEMORY_ADMIN.AIM_STATWINDOW_DAYS, :b_statwin);
END;
/
PRINT b_statwin
出力例は次のように表示されます。
B_STATWIN
----------
31
B_STATWIN
----------
14
参照:
AIM_GET_PARAMETER
の使用方法を学習するには、『Oracle Database In-Memoryガイド』を参照してください
85.4.3 FASTSTART_DISABLEプロシージャ
このプロシージャは、インメモリー・ファスト・スタート(IMファスト・スタート)機能を無効にします。
構文
DBMS_INMEMORY_ADMIN.FASTSTART_DISABLE();
セキュリティ・モデル
このプロシージャを実行するには、管理者権限が必要です。
使用上のノート
プロシージャを実行すると、データベースにより次のアクションが実行されます。
-
すべてのIMファスト・スタート操作が完了するまで待機します。
-
IMファスト・スタート機能を無効にし、次の操作を実行します。
-
IMファスト・スタート領域を消去します。
-
SYSAUX
表領域に格納されているIMファスト・スタート・メタデータを削除します。 -
IMファスト・スタート表領域を解放します(ただし、削除はしません)。
-
このプロシージャは、IM列ストアの同時操作を中断したり、操作に影響することはありません。
例
次のPL/SQLプログラムは、IMファスト・スタート機能を無効にします。
EXEC DBMS_INMEMORY_ADMIN.FASTSTART_DISABLE;
次の問合せは、IMファスト・スタート表領域のLOBが削除されたことを示しています(サンプル出力も示されています)。
COL OWNER FORMAT a5
COL SEGMENT_NAME FORMAT a20
SELECT l.OWNER, l.SEGMENT_NAME, SUM(s.BYTES)/1024/1024 MB
FROM DBA_LOBS l, DBA_SEGMENTS s
WHERE l.SEGMENT_NAME = s.SEGMENT_NAME
AND l.TABLESPACE_NAME = 'FS_TBS'
GROUP BY l.OWNER, l.SEGMENT_NAME;
no rows selected
85.4.4 FASTSTART_ENABLEプロシージャ
このプロシージャは、インメモリー・ファスト・スタート(IMファスト・スタート)を有効にし、IMファスト・スタート(ファスト・スタート)領域の表領域を指定します。
構文
DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE(
tbs_name IN VARCHAR2,
nologging IN BOOLEAN DEFAULT TRUE);
パラメータ
表85-2 FASTSTART_ENABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ファスト・スタート領域のASSM表領域の名前。 |
|
ファスト・スタート領域に対して作成されたLOBのロギング・モード。
|
セキュリティ・モデル
このプロシージャを実行するには、管理者権限が必要です。
使用上のノート
IMファスト・スタートを有効にするには、FASTSTART_ENABLE
で指定されたASSM表領域が存在し、SYSAUX
表領域がオンラインになっている必要があります。個々のPDBまたは非CDBについて存在するファスト・スタート表領域は1つだけです。指定された表領域にはIM列ストアのデータを格納するための十分な領域があり、ファスト・スタート領域として指定される前に他のデータはまったく含まれていないことが必要です。表領域のサイズは、INMEMORY_SIZE
初期化パラメータのサイズの2倍以上に設定することをお薦めします。
データベースでは、IM列ストアが移入されるまで、ディスク上にファスト・スタート領域が作成されません。移入後、列データがファスト・スタート領域に定期的に保存されます(トランザクション・ジャーナルなどのメタデータは保存されません)。これは、ディスク上でSYSDBIMFS_LOBSEG$
セグメントとして表されます。データベースでは、SYSAUX
表領域にファスト・スタート・メタデータを格納します。Oracle Real Application Clusters (Oracle RAC)環境では、すべてのノード間でIMファスト・スタート・データが共有されます。
ノート:
IMファスト・スタートは、スタンバイ・データベース・インスタンスではサポートされていません。
メモリー内へのIMCUの初期ローディングが高コストでCPUバウンドである一方、IM FastStart表領域では断続的なI/Oが求められます。データベースは、列データを定期的にIMファスト・スタート領域に書き込みます。データベース・インスタンスを再起動する必要がある場合、Oracle DatabaseではIMCUを最初から再構築するのではなく、IMファスト・スタート領域から直接列データを読み取ります。列データの圧縮およびフォーマットは不要です。
例
この例では、fs_tbs
をASSM表領域として作成してから、FASTSTART_ENABLE
を使用してこの表領域をIMファスト・スタート領域として指定します。
CREATE TABLESPACE fs_tbs
DATAFILE 'fs_tbs.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
EXEC DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE('fs_tbs');
次の問合せは、IMファスト・スタートLOBが作成されたことを示しています(サンプル出力も示されています)。
COL OWNER FORMAT a5
COL SEGMENT_NAME FORMAT a20
SELECT l.OWNER, l.SEGMENT_NAME, SUM(s.BYTES)/1024/1024 MB
FROM DBA_LOBS l, DBA_SEGMENTS s
WHERE l.SEGMENT_NAME = s.SEGMENT_NAME
AND l.TABLESPACE_NAME = 'FS_TBS'
GROUP BY l.OWNER, l.SEGMENT_NAME;
OWNER SEGMENT_NAME MB
----- -------------------- ----------
SYS SYSDBIMFS_LOBSEG$ .125
85.4.5 FASTSTART_MIGRATE_STORAGEプロシージャ
このプロシージャは、インメモリー・ファスト・スタート(IMファスト・スタート)データを現在の表領域から新しい表領域に移動してカタログ化します。
構文
DBMS_INMEMORY_ADMIN.FASTSTART_MIGRATE_STORAGE(
tbs_name IN VARCHAR2 );
パラメータ
表85-3 FASTSTART_MIGRATE_STORAGEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
IMファスト・スタート領域の新しいASSM表領域の名前。 |
セキュリティ・モデル
このプロシージャを実行するには、DBA権限が必要です。
使用上のノート
プロシージャを実行すると、データベースにより次のアクションが実行されます。
-
すべてのIMファスト・スタート操作が完了するまで待機します。
-
IMファスト・スタート機能を無効にします。
-
IMファスト・スタートのデータおよびメタデータを新しい表領域にコピーし、古い表領域はそのままにします。
-
IMファスト・スタート機能を再度有効にします。
例
次のプログラムは、IMファスト・スタート表領域が存在する場合はその名前を取得し、結果を出力します(サンプル出力も示されています)。
VARIABLE b_fstbs VARCHAR2(20)
BEGIN
:b_fstbs := DBMS_INMEMORY_ADMIN.GET_FASTSTART_TABLESPACE;
END;
/
PRINT b_fstbs
B_FSTBS
-----------------------------
FS_TBS
次の文は、fs_tbs2
という名前の新しい表領域を作成し、その表領域にIMファスト・スタート領域を移行します。
CREATE TABLESPACE fs_tbs2
DATAFILE 'fs_tbs2.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
EXEC DBMS_INMEMORY_ADMIN.FASTSTART_MIGRATE_STORAGE('fs_tbs2');
次のプログラムは、現在のIMファスト・スタート表領域の名前を出力します(サンプル出力も示されています)。
BEGIN
:b_fstbs := DBMS_INMEMORY_ADMIN.GET_FASTSTART_TABLESPACE;
END;
/
PRINT b_fstbs
B_FSTBS
-----------------------------
FS_TBS2
85.4.6 GET_FASTSTART_TABLESPACEファンクション
このファンクションは、インメモリー・ファスト・スタート(IMファスト・スタート)に割り当てられた表領域を戻します。機能が無効な場合、ファンクションはNOT ENABLED
を戻します。
構文
DBMS_INMEMORY_ADMIN.GET_FASTSTART_TABLESPACE();
セキュリティ・モデル
このファンクションを実行するには、DBA権限が必要です。
例
このプログラムは、IMファスト・スタート表領域が存在する場合はその名前を取得し、結果を出力します。
VARIABLE b_fstbs VARCHAR2(20)
BEGIN
:b_fstbs := DBMS_INMEMORY_ADMIN.GET_FASTSTART_TABLESPACE;
END;
/
PRINT b_fstbs
B_FSTBS
-----------------------------
NOT ENABLED
85.4.7 IME_CAPTURE_EXPRESSIONSプロシージャ
このプロシージャは、指定された時間間隔でデータベース内の最も頻繁にアクセスされている(最もホットな)式を20個取得します。
構文
DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS(
snapshot IN VARCHAR2);
パラメータ
表85-4 IME_CAPTURE_EXPRESSIONSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
式統計が考慮される時間間隔を定義するスナップショットを指定します。 次に示すいずれかの値を指定できます。
|
使用上のノート
このプロシージャを起動すると、データベースでは式統計ストア(ESS)を問い合せて、少なくとも一部がIM列ストアに移入されている表の式のみを考慮します。データベースにより、最もホットな20個の式がそれぞれの表に、文字列SYS_IME
という接頭辞が付いた非表示の仮想列として追加され、デフォルトのINMEMORY
列圧縮句が適用されます。前の呼出し時に追加されたSYS_IME
列が、最新の上位20件のリスト内になくなると、データベースにより、それらがNO INMEMORY
としてマークされます。
ノート:
スタンバイ・データベースでIME_CAPTURE_EXPRESSIONS
プロシージャを実行しても効果はありません。
属性がINMEMORY
かNO INMEMORY
かに関係なく、表のSYS_IME
列の最大数は50個です。表の上限に達すると、データベースにより、新しいSYS_IME
列は追加されなくなります。新しい式のために領域を空けるには、IME_DROP_ALL_EXPRESSIONSプロシージャまたはIME_DROP_EXPRESSIONSプロシージャを使用して、SYS_IME
列を手動で削除する必要があります。
各表に対する50個の式の制限(INMEMORY
およびNO INMEMORY
式の両方を含む)は、データベースに対する20個の式の制限(INMEMORY
式のみを含む)とは異なります。たとえば、IM列ストアに20個の表が移入された場合、各表に、INMEMORY
属性を持つ1つのSYS_IME
列と、NO INMEMORY
属性を持つ49個のSYS_IME
列が含まれている可能性があります。
IM式および仮想列は、インメモリー式単位(IMEU)と呼ばれるインメモリー構造に格納されます。すべてのIMEUは、圧縮特性の継承元である親インメモリー圧縮ユニット(IMCU)にリンクされています。
ESS情報は、データ・ディクショナリに格納され、DBA_EXPRESSION_STATISTICS
ビューで公開されます。このビューには、オプティマイザがESSで収集したメタデータが表示されます。IM式は、SYS_IME
という文字列で接頭辞が付けられ、DBA_IM_EXPRESSIONS
ビューで、システム生成の仮想列として公開されます。
例85-3 ユーザー定義ウィンドウでの式の取得
この例では、WINDOW
取得モードの使用方法を示しています。式取得ウィンドウをオープンしたりクローズして、このウィンドウ内でデータベースが追跡したすべての式を取得します。次のステップを実行します。
-
式取得ウィンドウをオープンし、式を生成して、ウィンドウをクローズします。
EXEC DBMS_INMEMORY_ADMIN.IME_OPEN_CAPTURE_WINDOW(); -- Generate expressions for the database to track EXEC DBMS_INMEMORY_ADMIN.IME_CLOSE_CAPTURE_WINDOW();
-
DBA_EXPRESSION_STATICS
を問い合せます(出力例も示します)。COL OWNER FORMAT A6 COL TABLE_NAME FORMAT A9 COL COUNT FORMAT 99999 COL CREATED FORMAT A10 COL EXPRESSION_TEXT FORMAT A29 SELECT OWNER, TABLE_NAME, EVALUATION_COUNT AS COUNT, CREATED, EXPRESSION_TEXT FROM DBA_EXPRESSION_STATISTICS WHERE SNAPSHOT = 'WINDOW' AND OWNER = 'SH'; OWNER TABLE_NAM COUNT CREATED EXPRESSION_TEXT ------ --------- ------ ---------- ------------------------- SH SALES 4702 09-OCT-17 "QUANTITY_SOLD" SH SALES 4702 09-OCT-17 "QUANTITY_SOLD"*"AMOUNT_SOLD" SH SALES 4702 09-OCT-17 "PROD_ID" SH SALES 4702 09-OCT-17 "CUST_ID" SH SALES 4702 09-OCT-17 "CHANNEL_ID" SH SALES 4702 09-OCT-17 "AMOUNT_SOLD"
前述の問合せにより、ESSで追跡された列と、
sh
スキーマでこの問合せのウィンドウ内で取得された式の両方が表示されます。最新のウィンドウで、データベースは1つの式QUANTITY_SOLD*AMOUNT_SOLD
を取得しました。 -
IME_CAPTURE_EXPRESSIONS
を使用して、データベースが現在のウィンドウのすべての式を考慮して実体化するようにします。EXEC DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS('WINDOW');
-
DBA_IM_EXPRESSIONS
を問い合せます(出力例も示します)。COL OWNER FORMAT a6 COL TABLE_NAME FORMAT a9 COL COLUMN_NAME FORMAT a25 SET LONG 50 SET LINESIZE 150 SELECT OWNER, TABLE_NAME, COLUMN_NAME, SQL_EXPRESSION FROM DBA_IM_EXPRESSIONS; OWNER TABLE_NAM COLUMN_NAME SQL_EXPRESSION ------ --------- ------------------------- ----------------------------- SH SALES SYS_IME000100000025201B "QUANTITY_SOLD"*"AMOUNT_SOLD"
前述の出力は、表に追加され、
IME_CAPTURE_EXPRESSIONS
の最後の呼出しとしてINMEMORY
というマークが付けられたすべての仮想列を示しています。データベースでは、表の各IMCUが再移入されときに、取得された式がIM列ストアに段階的に移入されます。 -
次のプロシージャを実行して、取得されたすべてのIM式の移入を明示的に強制します。
EXEC DBMS_INMEMORY_ADMIN.IME_POPULATE_EXPRESSIONS();
特定の表からIM式を移入するには、
DBMS_INMEMORY.REPOPULATE
プロシージャのforce
パラメータをTRUE
に設定して実行します。
例85-4 過去の式の取得
次のプログラムは、過去24時間に追跡された式を取得します。
EXEC DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS('CURRENT');
85.4.8 IME_CLOSE_CAPTURE_WINDOWプロシージャ
このプロシージャは、現在の式取得ウィンドウの終了を示します。
構文
DBMS_INMEMORY_ADMIN.IME_CLOSE_CAPTURE_WINDOW();
使用上のノート
このプロシージャの呼出し時に、オプティマイザは収集されたすべての統計をディスクに保存し、そのウィンドウで追跡される式を制限します。データベースでは、このウィンドウで取得された統計が保持され、新しい式取得ウィンドウがオープンすると、前のウィンドウで取得された統計がパージされます。
例85-5 例
この例では、式取得ウィンドウをオープンし、IME_CAPTURE_EXPRESSIONS('WINDOW')
を発行して、データベースで現在のウィンドウのすべての式が考慮され、実体化されるようにします。最後に、この例では、ウィンドウをクローズします。
EXEC DBMS_INMEMORY_ADMIN.IME_OPEN_CAPTURE_WINDOW();
-- Generate expressions so that the database can track them
EXEC DBMS_INMEMORY_ADMIN.IME_CLOSE_CAPTURE_WINDOW();
EXEC DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS('WINDOW');
85.4.9 IME_DROP_ALL_EXPRESSIONSプロシージャ
このプロシージャは、データベース内のSYS_IME
式仮想列をすべて削除します。
構文
DBMS_INMEMORY_ADMIN.IME_DROP_ALL_EXPRESSIONS();
使用上のノート
IME_DROP_ALL_EXPRESSIONS
プロシージャは、INMEMORY
属性の有無に関係なく、すべての表からすべてのSYS_IME
列を削除します。事実上、このプロシージャは、データベース規模のリセット・ボタンの役割を果たします。
IME_DROP_ALL_EXPRESSIONS
を使用すると、SYS_IME
列があるセグメントのすべてのIMEUおよびIMCUの削除がトリガーされます。たとえば、移入された50個の表にそれぞれ1つのSYS_IME
列がある場合は、IME_DROP_ALL_EXPRESSIONS
によって、IM列ストアから50個すべての表が削除されます。これらのセグメントを再度移入するには、DBMS_INMEMORY.POPULATE
プロシージャを使用するか、表の全体スキャンを実行する必要があります。
85.4.10 IME_GET_CAPTURE_STATEプロシージャ
このプロシージャは、式取得ウィンドウの現在の取得状態および最後に加えられた変更のタイムスタンプを戻します。
構文
DBMS_INMEMORY_ADMIN.IME_GET_CAPTURE_STATE(
p_capture_state OUT VARCHAR2,
p_last_modified OUT TIMESTAMP);
パラメータ
パラメータ | 説明 |
---|---|
p_capture_state |
式取得ウィンドウの現在の状態を示します。 状態の種類は次のとおりです:
|
p_last_modified |
最後のアクションのタイムスタンプを示します。 |
使用上のノート
このプロシージャは、IME_OPEN_CAPTURE_WINDOWプロシージャとIME_CLOSE_CAPTURE_WINDOWプロシージャのコールが競合するのを回避する場合に役立ちます。たとえば、現在、式取得ウィンドウの状態がOPEN
の場合は、別のウィンドウを開くことができず、ウィンドウの状態がCLOSED
の場合は、ウィンドウをクローズできません。
例85-6 式取得ウィンドウの状態の決定
この例では、式取得ウィンドウをオープンし、その取得状態を決定します。
EXEC DBMS_INMEMORY_ADMIN.IME_OPEN_CAPTURE_WINDOW();
VARIABLE b_state VARCHAR2(25)
VARIABLE b_time VARCHAR2(10)
EXECUTE DBMS_INMEMORY_ADMIN.IME_GET_CAPTURE_STATE(:b_state, :b_time)
PRINT b_state b_time
次のサンプル出力は、式取得ウィンドウが現在オープンしていることを示しています。
B_STATE
--------------------------------------------------
OPEN
B_TIME
--------------------------------------------------
09-OCT-17
85.4.11 IME_OPEN_CAPTURE_WINDOWプロシージャ
このプロシージャは、式取得ウィンドウの開始を示します。
構文
DBMS_INMEMORY_ADMIN.IME_OPEN_CAPTURE_WINDOW();
セキュリティ・モデル
このプロシージャを実行するには、管理者権限が必要です。
使用上のノート
このプロシージャの呼出し時に、オプティマイザは、新しいウィンドウのスナップショットを開始して、このウィンドウ内で発生する式の追跡を開始します。式取得ウィンドウは、Oracle RACデータベースのすべてのインスタンスでグローバルです。
競合するアクションは許可されません。たとえば、Oracle RACデータベースで、時間t0にインスタンス1で式取得ウィンドウをオープンし、このウィンドウをクローズする前に、時間t1にインスタンス2で別の式取得ウィンドウをオープンしようとすると、アクションが競合します。現在の取得状態を取得し、プロシージャの呼出しが競合する可能性を減らすには、IME_GET_CAPTURE_STATEプロシージャを使用します。
例
次のプログラムは、式取得ウィンドウをオープンします。
EXEC DBMS_INMEMORY_ADMIN.IME_OPEN_CAPTURE_WINDOW();
85.4.12 IME_POPULATE_EXPRESSIONSプロシージャ
このプロシージャは、最後に起動されたDBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS
で取得された式を強制的に移入します。
構文
DBMS_INMEMORY_ADMIN.IME_POPULATE_EXPRESSIONS();
使用上のノート
このプロシージャを起動しない場合、データベースでは、SYS_IME
列の親IMCUが再移入されたときに、これらの列を段階的に再移入します。表が再移入されない場合、IME_CAPTURE_EXPRESSIONS
プロシージャによって取得された新しいSYS_IME
列は移入されません。IME_POPULATE_EXPRESSIONS
は、移入を強制的に実行することで、この問題を解決します。
プロシージャは、内部的に、INMEMORY
属性を持つSYS_IME
列を含むすべての表に対して、DBMS_INMEMORY.REPOPULATE
を起動します。指定された表サブセット内のSYS_IME
列を移入するには、IME_POPULATE_EXPRESSIONS
ではなくDBMS_INMEMORY.REPOPULATE
を使用します。