41 DBMS_CUBE_ADVISE

DBMS_CUBE_ADVISEには、ログ・ベースの高速リフレッシュおよびクエリー・リライトをサポートするキューブ・マテリアライズド・ビューを評価するためのサブプログラムが含まれています。

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

参照:

キューブ・マテリアライズド・ビューの詳細は、『Oracle OLAPユーザーズ・ガイド』を参照してください。

41.1 DBMS_CUBE_ADVISEのセキュリティ・モデル

MV_CUBE_ADVICEファンクションには、ADVISOR権限が必要です。

41.2 DBMS_CUBE_ADVISEサブプログラムの要約

この表は、DBMS_CUBE_ADVISEのサブプログラムについて説明しています。

表41-1 DBMS_CUBE_ADVISEサブプログラムの要約

サブプログラム 説明

MV_CUBE_ADVICEファンクション

キューブ・マテリアライズド・ビューのメタデータを評価し、制約、SQLディメンション・オブジェクトおよびマテリアライズド・ビュー・ログに関する推奨設定を生成します。これにより、クエリー・リライトおよび高速リフレッシュを広範に行うことができます。

SET_CNS_EXCEPTION_LOGプロシージャ

MV_CUBE_ADVICEで生成された、検証済の制約で使用される例外ログの名前を識別します。

TRACEプロシージャ

MV_CUBE_ADVICEの診断メッセージを表示または非表示にします。

41.2.1 MV_CUBE_ADVICEファンクション

このテーブル・ファンクションは、指定したキューブ・マテリアライズド・ビューのメタデータを評価します。推奨設定を生成し、SQL結果セットとして戻します。これらのSQL文を使用すると、制約、SQLディメンション・オブジェクトおよびマテリアライズド・ビュー・ログを作成でき、これにより、キューブ・マテリアライズド・ビューのクエリー・リライトの変換およびログ・ベースの高速リフレッシュを広範に使用できます。

構文

DBMS_CUBE_ADVISE.MV_CUBE_ADVICE (
          owner        IN  VARCHAR2  DEFAULT USER,
          mvname       IN  VARCHAR2,
          reqtype      IN  VARCHAR2  DEFAULT '0',
          validate     IN  NUMBER    DEFAULT 0)
     RETURN COAD_ADVICE_T  PIPELINED;

パラメータ

表41-2 MV_CUBE_ADVICEファンクションのパラメータ

パラメータ 説明

owner

キューブ・マテリアライズド・ビューの所有者。

mvname

キューブ(UNITS_CUBEなど)またはキューブ・マテリアライズド・ビュー(CB$UNITS_CUBEなど)の名前。

reqtype

生成するアドバイスのタイプ:

  • 0: 適用可能なすべてのアドバイス・タイプ

  • 1: 列のNOT NULL制約

  • 2: 主キー制約

  • 3: 外部キー制約

  • 4: リレーショナル・ディメンション・オブジェクト

  • 5: 主キーを持つキューブ・マテリアライズド・ビュー・ログ

validate

検証オプション:

  • 0: 制約を検証します。

  • 1: 制約を検証しません。

戻り値

COAD_ADVICE_Tタイプの表(COAD_ADVICE_RECタイプの行のセットで構成)。列の詳細は、表41-3を参照してください。

表41-3 MV_CUBE_ADVICEの戻り値

データ・タイプ 説明

OWNER

VARCHAR2(30)

APIOBJECTで識別されるディメンション・オブジェクトの所有者。

APIOBJECT

VARCHAR2(30)

マテリアライズド・ビュー機能で拡張されたキューブの名前(UNITS_CUBEなど)。

SQLOBJOWN

VARCHAR2(30)

SQLOBJECTで識別されるリレーショナル・オブジェクトの所有者。

SQLOBJECT

VARCHAR2(65)

マスター表(UNITS_FACTなど)またはキューブ・マテリアライズド・ビュー(CB$UNITS_CUBEなど)の名前。

ADVICETYPE

NUMBER(38,0)

推奨事項のタイプ:

  • 1: 外部キー列にNOT NULL制約を作成します。

  • 2: マスター表に主キー制約を作成します。

  • 3: マスター・ビューに主キー制約を作成します。

  • 4: マスター表に外部キー制約を作成します。

  • 5: マスター・ビューに外部キー制約を作成します。

  • 6: マスター・ディメンション表にリレーショナル・ディメンションを作成します。

  • 7: マテリアライズド・ビュー・ログを作成します。

  • 8: マテリアライズド・ビューをコンパイルします。

DISPOSITION

CLOB

推奨設定と競合し、SQLTEXTを実行する前に解決する必要のある既存の条件。

SQLTEXT

CLOB

推奨設定を実装するSQL文。

DROPTEXT

CLOB

SQLTEXTを元に戻すSQL文。

既存の条件によって、これらの文でスキーマを以前の状態に戻すことができない場合があります。

使用上の注意

このファンクションは、マテリアライズド・ビュー・アドバイザとしてAnalytic Workspace Managerで使用できます。これにより、推奨設定を含むSQLスクリプトが生成されます。

例に示すように、他の表と同様に戻される行を問い合せることができます。

MV_CUBE_ADVICEでは、コールのたびに一意のオブジェクト名が生成されます。ファンクションを1回実行し、結果を取得してから、これらのSQL文を操作する必要があります。

データベース・オブジェクトを削除するときには注意してください。すでに表にマテリアライズド・ビュー・ログがある場合は、表の名前はDROPTEXT列のSQL文DROP MATERIALIZED VIEW LOGで使用されるものと同じになります。マテリアライズド・ビュー・ログは、特にリモート・データ・レプリケーションで使用されている場合は、誤って削除しないようにしてください。

次の問合せでは、MV_CUBE_ADVICEで推奨されるSQL文が表示されます。UNITS_FACTUNITS_CUBEのマスター表であり、MV_CUBE_ADVICEは、主キー制約を追加するALTER TABLEコマンドを生成します。

また、CB$UNITS_CUBEキューブ・マテリアライズド・ビューをコンパイルするALTER MATERIALIZED VIEWコマンドも生成します。

SQL> SELECT apiobject, sqlobject, sqltext 
      FROM TABLE(dbms_cube_advise.mv_cube_advice('GLOBAL', 'CB$UNITS_CUBE'));

APIOBJECT    SQLOBJECT       SQLTEXT
------------ --------------- ---------------------------------------------
UNITS_CUBE   UNITS_FACT      alter table "GLOBAL"."UNITS_FACT" add constra
                             int "COAD_PK000208" PRIMARY KEY ("CHANNEL_ID"
                             , "ITEM_ID", "SHIP_TO_ID", "MONTH_ID") rely d
                             isable novalidate
 
UNITS_CUBE   CB$UNITS_CUBE   alter materialized view "GLOBAL"."CB$UNITS_CU
                             BE" compile

41.2.2 SET_CNS_EXCEPTION_LOGプロシージャ

このプロシージャは、MV_CUBE_ADVICEで生成された、検証済の制約で使用される例外ログの名前を識別します。

構文

DBMS_CUBE_ADVISE.SET_CNS_EXCEPTION_LOG (
       exceptlogtab     IN   VARCHAR2  DEFAULT user.EXCEPTIONS);

パラメータ

表41-4 SET_CNS_EXCEPTION_LOGプロシージャのパラメータ

パラメータ 説明

exceptlogtab

既存の例外ログの名前。

使用上の注意

例外ログを作成するには、SET_CNS_EXCEPTION_LOGを実行する前に、utlexcpt.sqlまたはutlexpt1.sqlスクリプトを使用します。

MV_CUBE_ADVICEvalidateパラメータを1に設定する必要があります。

utlexcpt.sqlスクリプトは、EXCEPTIONSという名前の表を作成し、SET_CNS_EXCEPTION_LOGプロシージャは、この表をMV_CUBE_ADVICEの例外ログとして識別します。ALTER TABLE文には、VALIDATE EXCEPTIONS INTO "GLOBAL"."EXCEPTIONS"句が追加されます。

SQL> @utlexcpt
Table created.
 
SQL> EXECUTE dbms_cube_advise.set_cns_exception_log;
PL/SQL procedure successfully completed.

SQL> SELECT apiobject, sqlobject, advicetype type, sqltext 
     FROM TABLE(
     dbms_cube_advise.mv_cube_advice('GLOBAL', 'CB$UNITS_CUBE', '2', 1));

APIOBJECT    SQLOBJECT       TYPE SQLTEXT
------------ --------------- ---- ----------------------------------------------
UNITS_CUBE   UNITS_FACT         2 alter table "GLOBAL"."UNITS_FACT" add constrai
                                  nt "COAD_PK000219" PRIMARY KEY ("CHANNEL_ID",
                                  "ITEM_ID", "SHIP_TO_ID", "MONTH_ID") norely en
                                  able validate exceptions into "GLOBAL"."EXCEPT
                                  IONS"
 
UNITS_CUBE   CB$UNITS_CUBE      8 alter materialized view "GLOBAL"."CB$UNITS_CUB
                                  E" compile

41.2.3 TRACEプロシージャ

このプロシージャは、MV_CUBE_ADVICEファンクションのサーバー出力への診断メッセージを有効および無効にします。

構文

DBMS_CUBE_ADVISE.TRACE (
     diaglevel       IN  BINARY_INTEGER DEFAULT 0);

パラメータ

表41-5 TRACEプロシージャのパラメータ

パラメータ 説明

diaglevel

0はトレースを無効にし、1はトレースを有効にします。

次の例では、診断メッセージをサーバー出力に送ります。SQL*PlusのSERVEROUTPUT設定により、メッセージが表示されます。

SQL> SET SERVEROUT ON FORMAT WRAPPED
SQL> EXECUTE dbms_cube_advise.trace(1);
DBMS_COAD_DIAG: Changing diagLevel from [0] to [1]
 
PL/SQL procedure successfully completed.
 
SQL> SELECT sqlobject, sqltext, droptext 
     FROM TABLE(
     dbms_cube_advise.mv_cube_advice('GLOBAL', 'CB$UNITS_CUBE')) 
     WHERE apiobject='UNITS_CUBE';
 
SQLOBJECT       SQLTEXT                                  DROPTEXT
--------------- ---------------------------------------- ----------------------------------------
UNITS_FACT      alter table "GLOBAL"."UNITS_FACT" add co alter table "GLOBAL"."UNITS_FACT" drop c
                nstraint "COAD_PK000222" PRIMARY KEY ("C onstraint "COAD_PK000222" cascade
                HANNEL_ID", "ITEM_ID", "SHIP_TO_ID", "MO
                NTH_ID") rely disable novalidate
 
CB$UNITS_CUBE   alter materialized view "GLOBAL"."CB$UNI alter materialized view "GLOBAL"."CB$UNI
                TS_CUBE" compile                         TS_CUBE" compile
 
 
20070706 07:25:27.462780000 DBMS_COAD_DIAG NOTE: Parameter mvOwner  : GLOBAL
20070706 07:25:27.462922000 DBMS_COAD_DIAG NOTE: Parameter mvName   : CB$UNITS_CUBE
20070706 07:25:27.462967000 DBMS_COAD_DIAG NOTE: Parameter factTab  : .
20070706 07:25:27.463011000 DBMS_COAD_DIAG NOTE: Parameter cubeName : UNITS_CUBE
20070706 07:25:27.463053000 DBMS_COAD_DIAG NOTE: Parameter cnsState : rely disable novalidate
20070706 07:25:27.463094000 DBMS_COAD_DIAG NOTE: Parameter NNState  : disable novalidate
20070706 07:25:27.462368000 DBMS_COAD_DIAG NOTE: Begin NN:
20070706 07:25:27.833530000 DBMS_COAD_DIAG NOTE: End   NN:
20070706 07:25:27.833620000 DBMS_COAD_DIAG NOTE: Begin PK:
20070706 07:25:28.853418000 DBMS_COAD_DIAG NOTE: End   PK:
20070706 07:25:28.853550000 DBMS_COAD_DIAG NOTE: Begin FK:
20070706 07:25:28.853282000 DBMS_COAD_DIAG NOTE: End   FK:
20070706 07:25:28.853359000 DBMS_COAD_DIAG NOTE: Begin RD:
20070706 07:25:29.660471000 DBMS_COAD_DIAG NOTE: End   RD:
20070706 07:25:29.661363000 DBMS_COAD_DIAG NOTE: Begin CM:
20070706 07:25:29.665106000 DBMS_COAD_DIAG NOTE: End   CM:

SQL> EXECUTE dbms_cube_advise.trace(0);
DBMS_COAD_DIAG: Changing diagLevel from [1] to [0]
 
PL/SQL procedure successfully completed.