Oracle® Fusion Middleware Oracle Business Intelligence Enterprise Editionメタデータ・リポジトリ作成者ガイド 11g リリース1 (11.1.1) B63028-01 |
|
![]() 前 |
![]() 次 |
リポジトリで変数を使用して管理タスクを効率化したり、変化するデータ環境に合せてメタデータの内容を動的に変更できます。変数のクラスは、リポジトリ変数とセッション変数の2種類があります。
リポジトリ変数は、任意の時点で1つの値を持ちます。リポジトリ変数には、静的と動的の2種類があります。
セッション変数は、各ユーザーのログイン時に作成され、値が割り当てられます。セッション変数には、システムとシステム以外の2種類があります。
初期化ブロックは、動的リポジトリ変数、システム・セッション変数、およびシステム以外のセッション変数を初期化するために使用されます。
管理ツールで変数マネージャを使用して変数を定義できます。「変数マネージャ」ダイアログには2つのペインがあります。左ペインには変数および初期化ブロックが表示され、右ペインには左ペインで選択した項目の詳細が表示されます。リポジトリ変数、システム・セッション変数、およびシステム以外のセッション変数は疑問符アイコンで表されます。初期化ブロックのアイコンは「i」のラベルのついた立方体です。
注意: 変数にはオブジェクト権限が適用されないため、リポジトリ変数およびセッション変数の値は保護されていません。変数の名前を知られたり推測されたりすると、アンサーまたは論理SQL問合せの式でそれを使用できてしまいます。そのため、パスワードなどの機密データをセッション変数またはリポジトリ変数に設定しないでください。 |
この章の内容は次のとおりです。
リポジトリ変数は、任意の時点で1つの値を持ちます。リポジトリ変数は、管理ツールの式ビルダーでリテラルや定数がかわりに使用できます。Oracle BIサーバーは、リポジトリ変数の値をメタデータの変数自身に代入します。
この項の項目は次のとおりです。
静的リポジトリ変数の値は、「変数」ダイアログで初期化されます。この値は永続し、管理者が変更するまでその値は変わりません。
たとえば、時間帯を様々な日セグメントにグループ化する式を作成するとします。それらのセグメントの1つPrime Timeが午後5時 - 午後10時に相当する場合、次のようにCASE
文を作成できます。
CASE WHEN "Hour" >= 17 AND "Hour" < 23 THEN 'Prime Time' WHEN... ELSE...END
ここで、Hourは論理列で、たいてい日付と時刻関数Hour(<<timeExpr>>)
を使用してタイムスタンプ物理列にマップされています。
17 - 23の数字を定数としてこの式に入力するかわりに、「変数」ダイアログの「変数」タブを使用して、prime_begin
という名前の静的リポジトリ変数を設定し、それを17
の値に初期化してから、prime_end
という名前の変数を作成して、それを23
の値に初期化します。
静的リポジトリ変数は、数値または文字値のいずれかのデフォルト・イニシャライザが必要です。また、式ビルダーを使用して、Date、Time、TimeStampなどのデフォルト・イニシャライザとして定数を挿入できます。静的リポジトリ変数のデフォルト・イニシャライザとして他の値または式を使用することはできません。
以前のリリースの管理ツールでは、静的リポジトリ変数のデフォルト・イニシャライザの値に制限はありませんでした。そのため、リポジトリが以前のリリースからアップグレードされている場合、整合性チェッカーで次のような警告が表示される場合があります。
The variable, 'Current Month' does not have a constant default initializer.
このような警告が表示される場合、デフォルト・イニシャライザが定数値を持つように関連する静的リポジトリ変数を更新します。
動的リポジトリ変数は静的変数と同様に初期化しますが、その値は問合せから返されたデータでリフレッシュされます。動的リポジトリ変数を定義する場合、初期化ブロックを作成するかSQL問合せを含む既存の初期化ブロックを使用します。また、Oracle BIサーバーが問合せを実行して変数の値を定期的にリフレッシュするようにスケジュールを設定します。
動的リポジトリ変数の値が変更されると、その変数の値を参照するビジネス・モデルに関連付けられたすべてのキャッシュ・エントリは自動的にパージされます。
それぞれの問合せで複数の変数をリフレッシュできます(問合せの各列ごとに1つの変数)。これらの問合せはOracle BIサーバーで実行するようにスケジュールします。
動的リポジトリ変数は、論理表ソースのコンテンツを定義する際に有用です。たとえば、注文に関する情報に2つのソースがあるとします。1つのソースには最近の注文が含まれ、もう一方のソースには履歴データが含まれます。
「論理表ソース」ダイアログの「コンテンツ」タブで、これらのソースの内容を記述する必要があります。動的リポジトリ変数を使用しない場合、次のような式で最近のデータを含むソースの内容を記述します。
Orders.OrderDates."Order Date" >= TIMESTAMP '2001-06-02 00:00:00'
この内容の記述は、新しいデータが最近のソースに追加され、古いデータが履歴ソースに移動すると無効になります。最近のソースの新しい内容を正確に反映するには、その内容の部分の記述を手動で変更する必要があります。動的リポジトリ値は、それを自動的に実行するように設定できます。
もう一つのお薦めの動的リポジトリ変数の使用方法は、論理表ソースのWHERE
句フィルタで使用することです。これは、「論理表ソース」ダイアログの「コンテンツ」タブで定義します。
これらの変数は、一般的にはフィルタを設定してOracle BI Presentation Servicesで使用します。たとえば、動的リポジトリ変数CurrentMonthの値で列をフィルタするには、フィルタをCurrentMonthに設定します。
この項では、リポジトリ変数の作成方法について説明します。
リポジトリ変数を作成する手順は次のとおりです。
管理ツールで、「管理」を選択してから「変数」を選択します。
「変数マネージャ」ダイアログで、「アクション」→「新規」→「リポジトリ」→「変数」を選択します。
「変数」ダイアログで、変数名を入力します。
すべての変数名は一意にする必要があります。システム・セッション変数の名前は予約されており、他の変数の型で使用することはできません。
変数の型を選択します(「静的」または「動的」)。
「動的」を選択した場合、「初期化ブロック」リストを使用して、継続的に値のリフレッシュに使用する既存の初期化ブロックを選択します。
新しい初期化ブロックを作成するには、「新規」をクリックします。詳細は、「初期化ブロックの作成」を参照してください。
デフォルト・イニシャライザの値を追加するには、「デフォルトのイニシャライザ」ボックスに値を入力するか、「式ビルダー」ボタンをクリックして式ビルダーを使用します。
静的リポジトリ変数の場合、「デフォルトのイニシャライザ」ウィンドウで指定した値は永続します。この値は管理者が変更するまで変わりません。文字列を使用して変数を初期化する場合、文字列を一重引用符( ' )で囲みます。静的リポジトリ変数は、定数値のデフォルト・イニシャライザを持つ必要があります。
「OK」をクリックします。
リポジトリ変数を作成すると、式ビルダーで変数が使用できるようになります。式ビルダーで左ペインの「リポジトリ変数」フォルダをクリックすると、中央ペインにすべてのリポジトリ変数(静的変数と動的変数の両方)の名前が表示されます。
式でリポジトリ変数を使用するには、それを選択してダブルクリックします。式ビルダーはそれをアクティブなカーソル挿入ポイントの式に貼り付けます。
変数は、関数VALUEOF()
の引数として使用する必要があります。変数をダブルクリックしてそれを式に貼り付けると、自動的にそのように処理されます。
たとえば、次のCASE
文は前の例で説明したものと同じことをしています。ただし、変数は定数に置き換えられています。
CASE WHEN "Hour" >= VALUEOF("prime_begin")AND "Hour" < VALUEOF("prime_end") THEN 'Prime Time' WHEN ... ELSE...END
注意: 変数を使用して、列やその他のリポジトリ・オブジェクトを表すことはできません。 |
セッション変数は、初期化ブロックから値を取得するという点で動的リポジトリ変数と似ています。ただし、動的リポジトリ変数と異なり、セッション変数の初期化はスケジュールされません。ユーザーがセッションを開始すると、Oracle BIサーバーではセッション変数の新しいインスタンスを作成し、それを初期化します。
リポジトリ変数と異なり、セッション変数のインスタンスはOracle BIサーバー上のアクティブなセッションと同じ数だけあります。セッション変数の各インスタンスは、異なる値で初期化できます。
セッション変数は、主に、データベース表やLDAPサーバーなどの外部ソースに対してユーザーを認証する際に使用されます。ユーザーの認証が成功すると、セッション変数を使用してそのセッションのフィルタおよび権限を設定できます。セキュリティの設定時のセッション変数の使用の詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Enterprise Editionセキュリティ・ガイド』のセッション変数の管理に関する項を参照してください。
この項の項目は次のとおりです。
システム・セッション変数は、Oracle BIサーバーおよびOracle BI Presentation Servicesが特定の目的に使用するセッション変数です。システム・セッション変数には、他の種類の変数(静的または動的のリポジトリ変数およびシステム以外のセッション変数)に使用できない予約された名前があります。
Oracle BI Presentation Servicesでこれらの変数を使用する場合、名前の前にNQ_SESSION
を付けます。たとえば、列を変数LOGLEVEL
の値でフィルタするには、フィルタを変数NQ_SESSION.LOGLEVEL
に設定します。
表18-1に、使用可能なシステム・セッション変数を示します。
表18-1 システム・セッション変数
変数 | 説明 |
---|---|
ユーザーがログオン名として入力した値を保持します。この値は、一般には、ユーザーのLDAPプロファイルから移入されます。 |
|
プロキシ・ユーザーの名前を保持します。プロキシ・ユーザーは、他のユーザーとして務めることが認可されているユーザーです。 PROXYシステム・セッション変数の詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Enterprise Editionセキュリティ・ガイド』を参照してください。 |
|
ユーザーが属するグループが格納されます。以前のリリースとの互換性のためにのみ存在します。レガシー・グループは、自動的にアプリケーション・ロールにマップされます。 |
|
ユーザーが属するカタログ・グループ(プレゼンテーション・サービス・グループ)があれば、それを指定します。ただし、カタログ・グループよりアプリケーション・ロールを使用することをお薦めします。 |
|
ユーザーの一意のグローバル識別子(GUID)が格納されます。一般的には、ユーザーのLDAPプロファイルから移入されます。 |
|
ユーザーが属するアプリケーション・ロールが格納されます。 |
|
ユーザーが属するアプリケーション・ロールの一意のグローバル識別子(GUID)が格納されます。アプリケーション・ロールのGUIDは、アプリケーション・ロール名と同じです。 |
|
oracle.bi.server.impersonateUserやoracle.bi.server.manageRepositoriesなどのユーザーが保持する権限が格納されます。 |
|
Oracle BI Presentation Servicesで使用されます。これは、Oracle BI Presentation Servicesユーザー・インタフェースの挨拶でユーザーに表示される名前が格納されます。また、カタログ・オブジェクトの作成者フィールドも保存されます。この変数は、通常、ユーザーのLDAPプロファイルから移入されます。 |
|
Oracle BI Presentation Servicesで使用されます。これは、ユーザーがログインしたときに表示されるデフォルトのダッシュボードを特定します(ユーザーはログオン後にこのプリファレンスを上書きできます)。 |
|
このシステム・セッション変数は、管理ツールのユーザー・オブジェクトに定義されている変数を上書きします。(インストールで定義されている)管理ユーザーのログ・レベルが4に定義されており、リポジトリで定義されているセッション変数 |
|
Oracle BI Presentation Servicesで使用されます。同じリクエスト・キー(ブランク以外)を持つユーザーは、同じOracle BI Presentation Servicesキャッシュ・エントリを共有します。これによってOracle BI Presentation Servicesは、これらのユーザーがOracle BIサーバーで同一のコンテンツ・フィルタおよびセキュリティを持つことを認識します。Oracle BI Presentation Servicesキャッシュ・エントリを共有すると、Oracle BIサーバーとの間に発生する不要な通信を最小化できます。 |
|
Oracle BI Presentation Servicesユーザー・インタフェースのルック・アンド・フィールの特定の要素を決定します。ユーザーは、Oracle BI Presentation Servicesにログオンしたときにスタイルを選択して、ユーザー・インタフェースの一部の要素を変更できます。 |
|
ユーザーの説明が格納されます。一般的には、ユーザーのLDAPプロファイルから移入されます。 |
|
ユーザーのロケールが格納されます。一般的には、ユーザーのLDAPプロファイルから移入されます。 |
|
Oracle BIサーバー結果キャッシュ・ヒットの有効化または無効化に使用されます。この変数の有効値は0または1です。 |
|
Oracle BIサーバー結果キャッシュ・シードの有効化または無効化に使用されます。この変数の有効値は0または1です。 |
|
Oracle BIサーバー・サブリクエスト・キャッシュ・ヒットおよびシードの有効化または無効化に使用されます。この変数の有効値は0または1です。 |
|
問合せをSELECT_PHYSICAL問合せとして識別します。詳細は、「SELECT_PHYSICALの構文および使用上の注意」を参照してください。 |
|
Oracle BIサーバー計画キャッシュ・ヒットの有効化または無効化に使用されます。この変数の有効値は0または1です。 |
|
Oracle BIサーバー計画キャッシュ・シードの有効化または無効化に使用されます。この変数の有効値は0または1です。 |
|
ユーザーのタイム・ゾーンが格納されます。一般的には、ユーザーのLDAPプロファイルから移入されます。 |
システム・セッション変数と同じ手順を使用して、システム以外のセッション変数を定義します。
システム以外のセッション変数は、一般的にはユーザー・フィルタの設定に使用されます。たとえば、SalesRegionというシステム以外の変数を、ユーザーの販売地域の名前に初期化するように定義できます。
そこで、グループのすべてのメンバーにその地域に関連するデータの参照のみを許可するようにセキュリティ・フィルタを設定できます。
Oracle BI Presentation Servicesでこれらの変数を使用する場合、名前の前にNQ_SESSION
を付けます。たとえば、列を変数SalesRegion
の値でフィルタするには、フィルタを変数NQ_SESSION.SalesRegion
に設定します。
この項では、セッション変数の作成方法について説明します。
セッション変数を作成する手順は次のとおりです。
管理ツールで、「管理」を選択してから「変数」を選択します。
「変数マネージャ」ダイアログで、「アクション」→「新規」→「セッション」→「変数」を選択します。
「セッション変数」ダイアログで、変数名を入力します。
すべての変数名は一意にする必要があります。システム・セッション変数の名前は予約されており、他の変数の型で使用することはできません。
セッション変数の場合、次のオプションを選択できます。
ユーザーによる値の設定を可能にする。このオプションを設定すると、ODBCストアド・プロシージャNQSSetSessionValue()
をコールして(ユーザー・ログイン時に)初期化ブロックに値を移入した後にセッション変数が設定されます。たとえば、このオプションによって、管理者以外のユーザーがサンプル用にこの変数を設定できるようにすることができます。
セキュリティ・センシティブ。このオプションを選択すると、仮想プライベート・データベース(VPD)などの行レベル・データベース・セキュリティ戦略を使用する際に、その変数をセキュリティ・センシティブと識別します。フィルタ・キャッシュ表に一致すると、Oracle BIサーバーは論理リクエスト・プロジェクトション・リストで参照されるそれぞれの列または表の親データベース・オブジェクトを参照します。データベース・オブジェクトの「仮想プライベート・データベース」オプションが選択されていると、Oracle BIサーバーはセキュリティ・センシティブ変数のリストと見込みのキャッシュ・ヒットをマッチングします。キャッシュ・ヒットは、すべてのセキュリティ・センシティブ変数が含まれて一致しているキャッシュ・エントリでのみ発生します。
「初期化ブロック」リストを使用して、継続的に値のリフレッシュに使用する初期化ブロックを選択します。
新しい初期化ブロックを作成するには、「新規」をクリックします。詳細は、「初期化ブロックの作成」を参照してください。
デフォルト・イニシャライザの値を追加するには、「デフォルトのイニシャライザ」ボックスに値を入力するか、「式ビルダー」ボタンをクリックして式ビルダーを使用します。
「OK」をクリックします。
初期化ブロックは、動的リポジトリ変数、システム・セッション変数、およびシステム以外のセッション変数を初期化するために使用されます。たとえば、NQ_SYSTEM
初期化ブロックはシステム・セッション変数をリフレッシュするために使用されます。
この項の項目は次のとおりです。
初期化ブロックには、そのブロックに関連付けられた変数を初期化またはリフレッシュするために実行されるSQL文が含まれます。このSQL文は、「初期化ブロック」ダイアログの「接続プール」フィールドで指定された接続プールを使用してアクセスできる物理表を参照する必要があります。
初期化ブロックの問合せにデータベース固有のSQLを含める必要がある場合、その問合せのデータベース・タイプを選択できます。初期化ブロックをインスタンス化したときにそのデータベース・タイプのSQL初期化文字列が定義されていると、その文字列が使用されます。そうでなければ、デフォルトの初期化SQL文字列が使用されます。
注意: デフォルトでは、「初期化ブロック」ダイアログをオンライン・モードで編集用に開くと、初期化ブロック・オブジェクトは自動的にチェックアウトされます。初期化ブロックがチェックアウトされている間、設定されているリフレッシュ間隔に応じて、Oracle BIサーバーはこの初期化ブロックでリフレッシュされる動的変数の値をリフレッシュし続けることができます。初期化ブロックをチェックインすると、動的変数の値はデフォルトのイニシャライザで示された値にリセットされます。この処理を実行しない場合は、「チェックアウトを元に戻す」オプションを使用します。 |
この項の項目は次のとおりです。
動的リポジトリ変数の値は、「初期化ブロック」ダイアログの「デフォルトの初期化文字列」フィールドで定義された問合せによって設定されます。また、Oracle BIサーバーが実行する問合せおよび変数値の定期的なリフレッシュのスケジュールも設定します。Oracle BIサーバーを停止して再起動すると、サーバーは自動的にリポジトリ変数初期化ブロックのSQL文を実行して、リポジトリ変数を再度初期化します。
(インストール時に設定された)管理者アカウントのログ・レベルが2以上に設定されていると、Oracle BIサーバーはリポジトリ変数情報を取得するために発行されたすべてのSQL問合せをnqquery.logに記録します。管理者のログ・レベルを2に設定すると、最も有用な情報のレベルが提供されます。nqquery.logファイルは次の場所にあります。
ORACLE_INSTANCE\diagnostics\logs\OracleBIServerComponent\coreapplication_obisn
ユーザーレベルのログの詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Enterprise Editionシステム管理者ガイド』の問合せログの管理に関する項を参照してください。
動的リポジトリ変数と同様に、セッション変数も初期化ブロックからその値を取得します。動的リポジトリ変数と異なり、セッション変数はスケジュールされた時間の間隔で更新されません。そのかわり、ユーザーが新しいセッションを開始するたびに、Oracle BIサーバーはこれらの変数の新しいインスタンスを作成します。その値は、セッションの間変わりません。
セッション・ログイン時のセッション変数初期化ブロックの実行は、それに関連付けられたセッション変数が実際にセッション内でアクセスできるようになるまで遅延することができます。詳細は、「初期化ブロックの作成」を参照してください。
Identity Managerのユーザー・オブジェクトでログ・レベルが2以上に設定されている場合、または変数マネージャでLOGLEVEL
システム・セッション変数が2以上に設定されている場合、Oracle BIサーバーはセッション変数情報を取得するために発行されたすべてのSQL問合せをログに記録します。
nqquery.logファイルのデフォルトの場所は次のとおりです。
ORACLE_INSTANCE\diagnostics\logs\OracleBIServerComponent\coreapplication_obisn
ユーザーレベルのログの詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Enterprise Editionシステム管理者ガイド』の問合せログの管理に関する項を参照してください。
行単位の初期化オプションを使用して、セッション変数を動的に作成し、セッションの開始時にそれらの値を設定することができます。セッション変数の名前および値は、接続プールを介してアクセスする外部データベースに格納されます。変数は、「初期化ブロック」ダイアログで入力した初期化文字列からその値を受け取ります。
たとえば、RW_SESSION_VARS
という名前の表に含まれる値を使用してセッション変数を作成するとします。この表には次の3つの列が含まれます。
USERID
: ユーザーの一意のIDを表す値が含まれます。
NAME
: セッション変数名を表す値が含まれます。
VALUE
: セッション変数の値を表す値が含まれます。
表18-2に、この例の表を示します。
表18-2 サンプル・セッション変数データベース表
USERID | NAME | VALUE |
---|---|---|
JOHN |
LEVEL |
4 |
JOHN |
STATUS |
FULL-TIME |
JANE |
LEVEL |
8 |
JANE |
STATUS |
FULL-TIME |
JANE |
GRADE |
AAA |
行単位の初期化を使用するには、初期化ブロックを作成して「行単位の初期化」オプションを選択します(「初期化ブロックの作成」を参照)。この例では、初期化文字列に次のSQL文を指定します。
SELECT NAME, VALUE FROM RW_SESSION_VARS WHERE USERID='VALUEOF(NQ_SESSION.USERID)'
NQ_SESSION.USERID
は、別の初期化ブロックを使用してすでに初期化されているので注意してください。
次のセッション変数が作成されます。
JohnがOracle BIサーバーに接続すると、そのセッションには行単位の初期化からの2つのセッション変数が含まれます(LEVEL
: 値は4
、STATUS
: 値はFULL_TIME
)。
JaneがOracle BIサーバーに接続すると、そのセッションには行単位の初期化からの3つのセッション変数が含まれます(LEVEL
: 値は8
、STATUS
: 値はFULL-TIME
、GRADE
: 値はAAA
)。
行単位の初期化オプションを使用して、値リストを含む変数を初期化することもできます。SQLのIN
演算子を使用して、指定されたリストの値をテストできます。
たとえば、前の例の表の値を使用して、次のSQL文を入力して初期化文字列を取得します。
SELECT 'LIST_OF_USERS', USERID FROM RW_SESSION_VARS WHERE NAME='STATUS' AND VALUE='FULL-TIME'
このSQL文により、変数LIST_OF_USERS
に、JOHN
とJANE
の値を含むコロン区切りのリスト(JOHN:JANE
)が移入されます。次のWHERE
句に示すように、フィルタでこの変数を使用できます。
WHERE TABLE.USER_NAME = valueof(NQ_SESSION.LIST_OF_USERS)
変数LIST_OF_USERS
には、値リスト(1つ以上の値)が含まれます。論理WHERE
句は、次の文のような物理IN
句に展開されます。
WHERE TABLE.USER_NAME IN ('JOHN', 'JANE')
初期化ブロックの詳細は、「変数を含む初期化ブロックの使用について」を参照してください。
初期化ブロックを作成するには、次の項の手順を実行します。
リポジトリ変数では、開始日時の日、日付、および時刻、およびリフレッシュ間隔を指定できます。
名前およびスケジュールを初期化ブロックに割り当てる手順は次のとおりです。
管理ツールで、「管理」を選択してから「変数」を選択します。
「変数マネージャ」ダイアログの「アクション」メニューで、「新規」→「リポジトリ」 (または「セッション」)→「初期化ブロック」を選択します。
「リポジトリ変数初期化ブロック」または「セッション変数初期化ブロック」のダイアログで、ブロックの名前を入力します(NQ_SYSTEM
初期化ブロック名に制限されます)。
(リポジトリ初期化ブロックのみ)「スケジュール」エリアで、開始日付および時刻とリフレッシュ間隔を選択します。
(セッション初期化ブロックのみ)必要に応じて、次のオプションを選択します。
無効。このオプションを選択すると、初期化ブロックは無効になります。
変数マネージャで既存の初期化ブロックを右クリックして、「無効化」または「有効化」を選択することもできます。このオプションにより、初期化ブロック・ダイアログを開くことなく、このプロパティを変更できます。
遅延実行の許可。このオプションを選択すると、初期化ブロックの実行は関連付けられたセッション変数にセッション中に初めてアクセスできるようになるまで遅延されます。
このオプションを使用することで、セッション・ログオン・ステージ時にすべてのセッション変数初期化ブロックが実行されることはなくなり、ログオン時間が短くなります。セッション中に不要なセッション変数は、初期化ブロックが実行されません。そのため、これらの不要な初期化ブロックの実行に使用されるリソースが節約されます。
初期化ブロックの遅延実行は、すべての未実行の先行初期化ブロックの実行もトリガーします。関連付けられているすべての初期化ブロックの変数およびその未実行の先行部分は、遅延実行から返された値で更新されます。
注意: 「遅延実行の許可」オプションは、状況によっては使用できない場合があります。詳細は、「セッション変数初期化ブロックの実行を遅延できないケース」を参照してください。
認証のために必要。このオプションを選択すると、この初期化ブロックはユーザーのログインに成功する必要があります。つまり、初期化ブロックの実行に失敗すると、ユーザーはOracle Business Intelligenceへのアクセスが拒否されます。初期化ブロックで不正な資格証明が拒否された場合、またはデフォルトの初期化文字列にエラーがある場合は、実行が失敗する可能性があります。
単一のユーザー・セッション変数が初期化ブロックに関連付けられている場合、この要件は偽装を使用する内部プロセス(デリバーなど)には適用されません。その場合、信頼できる内部プロセスが、初期化ブロックの成否にかかわらず、接続できます。
次の手順は、データソースおよび接続プールを選択することです。
初期化ブロックのデータソース・タイプとして「データベース」を選択する場合、データベースから返されるSQL文の列の値は、初期化ブロックに関連付けられた変数に割り当てられます。セッション変数初期化ブロックでは、「LDAPサーバー」や「カスタム認証システム」も選択できます。
「データベース」をデータソース・タイプとして選択する初期化ブロックの専用接続プールを作成することをお薦めします。詳細は、「初期化ブロックの接続プールについて」を参照してください。
データソース・タイプとして「データベース」を選択した場合:
データソース・タイプとして「データベース」を選択し、「OBI EEサーバーの使用」オプションを選択しない場合、次のように処理されます。
変数のリフレッシュに使用されるSQL文は、「接続プール」フィールドで指定された接続プールを介してアクセスできる物理表を参照する必要があります。この表は、メタデータの物理レイヤーに含まれる必要はありません。実行時に、データベース・タイプの初期化文字列が定義されている場合、この文字列が使用されます。そうでない場合、そのデータベース・タイプのデフォルトの初期化SQLが使用されます。この文字列は上書きできます。
SQLを作成してそれを直接データベースに送信する場合(たとえば、初期化ブロックでデータベース固有のSQLを使用する場合など)、SQL文はOracle BIサーバーを迂回します。SQL文の列の順序および初期化ブロックに関連付けられた変数の順序により、どの列が各変数に割り当てられるかが決定されます。
[リポジトリ|セッション]変数初期化ブロック・データソースダイアログの「テスト」ボタンを使用して、このSQLをテストする必要があります。SQL文にエラーがある場合、データベースはエラー・メッセージを返します。詳細は、「初期化ブロックのテスト」を参照してください。
データソース・タイプとして「データベース」を選択し、「OBI EEサーバーの使用」オプションを選択する場合、次のように処理されます。
変数のリフレッシュに使用するSQL文は、特定のデータベース用に記述されている場合があります。ただし、そのSQL文はOracle BIサーバーで処理されるため、他のデータソースでも機能します。Oracle BIサーバーはデータソースで使用できない可能性がある関数(PI
など)を提供することもありますが、そのSQL文はOracle BIサーバーでサポートされる他のデータソース(ADF、SQL Server、OracleおよびXMLファイルなど)では機能します。「OBI EEサーバーの使用」オプションを選択すると、SQL文がOracle BIサーバーに送信され、元になるデータベースには直接送信されされないので、接続プールは不要です。
オンライン・モードの場合、[リポジトリ|セッション]変数初期化ブロック・データソースダイアログの「テスト」ボタンを使用してのみ、このSQL文をテストできます。SQL文にエラーがある場合、データベースはエラー・メッセージを返します。詳細は、「初期化ブロックのテスト」を参照してください。
初期化ブロックのデータソースおよび接続プールを選択する手順は次のとおりです。
管理ツールで、「管理」を選択してから「変数」を選択します。
「変数マネージャ」ダイアログで、編集する初期化ブロックをダブルクリックします。リポジトリ初期化ブロックまたはセッション初期化ブロックを編集できます。
「接続プール」フィールドの横の「データ・ソースの編集」をクリックします。
「データ・ソース・タイプ」リストで、次のタイプのいずれかを選択します。
データベース: リポジトリ変数およびセッション変数用。
LDAPサーバー: セッション変数用。
カスタム認証システム: セッション変数用。『Oracle Fusion Middleware Oracle Business Intelligence Enterprise Editionセキュリティ・ガイド』を参照してください。
データソース・タイプに「データベース」を選択している場合、次のいずれかの手順を実行します。
「デフォルトの初期化文字列」または「データベース固有のSQLの使用」を選択して、次の手順を実行します。
「接続プール」フィールドの横の「参照」をクリックして、ターゲット情報が存在するデータベースに関連付けられている接続プールを選択します。初期化文字列を入力する前に接続プールを選択していない場合、接続プールを選択するよう促すメッセージが表示されます。
「接続プールの選択」ダイアログで、接続プールを選択して「選択」をクリックします。初期化文字列を入力する前に接続プールを選択する必要があります。
デフォルトでは、物理レイヤーのデータベース・オブジェクトの下の最初の接続プールは選択できません。これにより、問合せに使用する接続プールと同じ接続プールを初期化ブロックで使用できないようになります。詳細は、「初期化ブロックの接続プールについて」を参照してください。
「オプション」ダイアログの「初期化ブロックに最初の接続プールを許可」を選択することで、最初の接続プールを選択可能にするよう動作を変更できますが、これはお薦めしません。詳細は、「プリファレンスの設定」を参照してください。
「データベース固有のSQLの使用」を選択した場合、「データベース」ペインでデータベースを開いて選択します。そこで、それに関連付けられた文字列を入力します。
それを選択しない場合、「デフォルトの初期化文字列」ボックスで変数の移入に必要なSQL初期化文字列を入力します。例は、「初期化文字列の例」を参照してください。
(オプション)「テスト」をクリックして、SQL文のデータソース接続をテストします。
「OK」をクリックして、「初期化ブロック」ダイアログに戻ります。
「OBI EEサーバーの使用」を選択して、次の手順を実行します。
ボックスで、変数の移入に必要なSQL初期化文字列を入力します。
ここで入力した文字列はOracle BIサーバーで処理されるため、Oracle BIサーバーでサポートされていれば、文字列は別のデータソースでも機能します。
たとえば、初期化ブロックでSQL Serverに固有の関数pi()
が使用されている場合がありますが、「OBI EEサーバーの使用」を選択すると、問合せはOracle BIサーバーによって適切なデータベース用に書き換えられます。つまり、SQL Serverバックエンド・データベースをOracleに変更すると、問合せは機能し続けます。
追加の例は、「初期化文字列の例」を参照してください。
「OK」をクリックして、「初期化ブロック」ダイアログに戻ります。
データソース・タイプに「LDAPサーバー」を選択している場合、次の手順を実行します。
「参照」をクリックして既存のLDAPサーバーを選択するか、「新規」をクリックして「LDAPサーバー」ダイアログの「一般」タブを開きLDAPサーバーを作成します。
「OK」をクリックして、「初期化ブロック」ダイアログに戻ります。
LDAPサーバー名とそれに関連付けられたドメイン識別子が「名前」および「ドメイン識別子」列に表示されます。
データソース・タイプに「カスタム認証システム」を選択している場合、次の手順を実行します。
「参照」をクリックして既存のカスタム認証システムを選択するか、「新規」を選択してそれを作成します。
「OK」をクリックして、「初期化ブロック」ダイアログに戻ります。
「OK」をクリックします。
この項では、次の初期化文字列の例について説明します。
例18-1 サイトでデリバーを使用する場合のSQL文字列
SELECT username, groupname, dbname, schemaname FROM users WHERE username=':USER' NQS_PASSWORD_CLAUSE(and pwd=':PASSWORD')NQS_PASSWORD_CLAUSE
このSQLのWHERE
句には、2つの制約が含まれます。
':USER'
(コロンと一重引用符に注目してください)は、ログイン時にユーザーが入力するIDです。
':PASSWORD'
(コロンと一重引用符に注目してください)はユーザーが入力するパスワードです。これは、USER
システム・セッション変数が使用される場合、常にともに存在するはずのシステム変数です。PASSWORD
変数を設定する必要はありません。この変数はデータベース接続プールで使用することで、ユーザーIDとそのユーザーのパスワードを使用するログインを通過させることができます。またこの変数はSQL文でも使用できます。
デリバーによる外部表認証を使用している場合、:PASSWORD
制約を構成するSQL文の一部をNQS_PASSWORD_CLAUSE
句の間に埋め込む必要があります。
ユーザーIDとパスワードが指定された表に存在する値と一致する場合にのみ、問合せはデータを返します。USER
およびPASSWORD
変数に正しい値を代入し、NQS_PASSWORD_CLAUSE
句を削除して、Oracle BIサーバーの外部でSQL文をテストする必要があります。
詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Enterprise Editionシステム管理者ガイド』を参照してください。
例18-2 サイトでデリバーを使用しない場合のSQL文字列
SELECT username, groupname, dbname, schemaname FROM users WHERE username=':USER' AND pwd=':PASSWORD'
このSQL文のWHERE
句には、2つの制約が含まれます。
':USER'
(コロンと一重引用符に注目してください)は、ログイン時にユーザーが入力するIDです。
':PASSWORD'
(コロンと一重引用符に注目してください)はユーザーが入力するパスワードです。これは、USER
システム・セッション変数が使用される場合、常にともに存在するはずのシステム変数です。PASSWORD
変数を設定する必要はありません。この変数はデータベース接続プールで使用することで、ユーザーIDとそのユーザーのパスワードを使用するログインを通過させることができます。またこの変数はSQL文でも使用できます。
ユーザーIDとパスワードが指定された表に存在する値と一致する場合にのみ、問合せはデータを返します。USER
およびPASSWORD
変数に正しい値を代入して、Oracle BIサーバーの外部でSQL文をテストする必要があります。
例18-3 複数のデータソースから表を結合するSQL文 - 'OBI EE Server'設定を使用する場合
select WUSER.name, wuser_detail.email from "db-11g/orcl"."NAME"."WUSER', "sqlexpress"."master"."dbo"."wuser_detail" where username=:USER:
前述の初期化ブロックの問合せの例では、異なるデータソース(SQLServer、Oracle、XML Filesなど)からの複数の表の結合問合せを使用しています。「OBI EEサーバーの使用」オプションを選択すると、問合せがBIサーバーによって指定されたデータソース用に書き換えられるので、この問合せは機能します。
「テスト」ボタンを使用して、またはOracle BI ClientユーティリティなどのSQLツールを使用して、SQL文をテストする必要があります。SQLツールを使用する場合、同じDSNまたは指定された接続プール内のDSNと同一に設定されたDSNを使用してください。
オンライン・モードでは、初期化ブロック・テストは:USER
と:PASSWORD
をユーザー名とパスワードに使用するように設定された接続プールが機能しません。オフライン・モードでは、:USER
と:PASSWORD
を移入できるように「変数の値の設定」ダイアログが表示されます。
初期化ブロックをテストする手順は次のとおりです(オプション)。
管理ツールで、「管理」を選択してから「変数」を選択します。
「変数マネージャ」ダイアログで、初期化ブロックをダブルクリックします。
「リポジトリ変数初期化ブロック」または「セッション変数初期化ブロック」のダイアログで、「データ・ソースの編集」をクリックします。
[リポジトリ|セッション]変数初期化ブロック・データソースダイアログで、「テスト」をクリックします。
注意: オフライン・モードで「OBI EEサーバーの使用」オプションが選択されていると、「テスト」ボタンは無効になります。
「変数の値の設定」ダイアログで、情報が正しいか確認し、「OK」をクリックします。
表からのデータの表示ダイアログで、問合せの行数と開始行を入力して、「問合せ」をクリックします。
「結果」ダイアログには、変数とその値がリストされます。
次の手順は、変数と初期化ブロックを関連付けることです。
デフォルトのイニシャライザのSQLのSELECT
文には、複数の列を含めることができます。SQL文の列の順序および初期化ブロックに関連付けられた変数の順序により、各変数に関連付けられる列値が決定されます。そのため、変数を初期化ブロックに関連付けると、最初の列で返された値は、リストの最初の変数に割り当てられます。
リポジトリ変数初期化ブロックでは、リポジトリをオンライン・モードで開いたときに、「初期化ブロック」ダイアログの「デフォルトの初期化文字列」フィールドに表示される値は、Oracle BIサーバーに認識されているその変数の現在の値になります。関連付けられる変数の数は、取得される列数とは異なります。列より変数の方が少ない場合、余分な列の値は無視されます。列より変数の方が多い場合、余分な変数はリフレッシュされません(いかなる値でも、元の値が保持されます)。初期化ブロックを使用して、任意の正しいSQLを実行できます(データベースの書込み、データベース構造の変更なども含みます)。ただし、データベースにより接続プールに関連付けられたユーザーIDでこれらのアクションを実行することが許可されていることが前提になります。
Oracle BIサーバーを停止して再起動すると、サーバーは自動的にリポジトリ変数初期化ブロックのSQL文を実行し、リポジトリ変数を再度初期化します。
セッション変数初期化ブロックでは、「行単位の初期化」を選択できます。「行単位の初期化」オプションを選択すると、「キャッシュの使用」オプションが自動的に選択されます。「キャッシュの使用」オプションが選択されることで、Oracle BIサーバーは問合せの結果をメイン・メモリー・キャッシュに保存することになります。詳細は、「行単位の初期化について」を参照してください。
Oracle BIサーバーは、後続セッション用にキャッシュされた結果を使用します。これにより、セッションの起動時間を短縮できます。ただし、キャッシュされた結果には最新のセッション変数の値が含まれていない場合があります。各新規セッションでセッション変数の最新セットとそれぞれに対応する値が必要な場合、このオプションを選択解除する必要があります。
「変数を含む初期化ブロックの使用について」を参照してください。
変数を初期化ブロックに関連付ける手順は次のとおりです。
管理ツールで、「管理」を選択してから「変数」を選択します。
「変数マネージャ」ダイアログで、編集する初期化ブロックをダブルクリックします。リポジトリ初期化ブロックまたはセッション初期化ブロックを編集できます。
「データ・ターゲットの編集」をクリックします。
[リポジトリ|セッション]変数初期化ブロック変数ターゲットダイアログで、次のいずれかの手順を実行します。
次のいずれかを実行して、変数を初期化ブロックに関連付けます。
「新規」をクリックして、「変数」ダイアログで新しい変数を作成します。変数の作成の詳細は、「リポジトリ変数の作成」または「セッション変数の作成を参照してください。
「リンク」をクリックして、既存の変数と初期化ブロックを関連付けます。「参照」ダイアログで、この初期化ブロックでリフレッシュする変数を選択して「OK」をクリックします。
注意: 「カスタム認証システム」データソース・タイプの場合(セッション変数のみ)、変数USER が必要です。 |
「行単位の初期化」を選択します。このオプションは、セッション変数初期化ブロック専用です。詳細は、「行単位の初期化について」を参照してください。「行単位の初期化」を選択すると、「キャッシュの使用」オプションが使用可能になります。
変数を並べ替えるには、変数を選択して「上へ」または「下へをクリックします。
変数とこのブロックとの関連付けを削除するには、変数を選択して「削除」をクリックします。
「OK」をクリックします。
次の手順は実行優先度を確立することです。
リポジトリに複数の初期化ブロックがある場合、ブロックを初期化する順序を設定できます(優先度の確立)。
まず、最後に実行するブロックを開き、その前に実行する初期化ブロックを追加します。たとえば、リポジトリにAとBという2つの初期化ブロックがあるとします。初期化ブロックBを開き、ブロックBの前にブロックAを実行することを指定します。そうすると、ブロックAは自身の単独での実行に加えて、ブロックBのスケジュールに応じても実行されるようになります。
実行優先度を確立する手順は次のとおりです。
管理ツールで、「管理」を選択してから「変数」を選択します。
「変数マネージャ」ダイアログで、最後に初期化する初期化ブロックをダブルクリックします。
「リポジトリ変数初期化ブロック」または「セッション変数初期化ブロック」のダイアログで、「実行優先度の編集」をクリックします。
[リポジトリ|セッション]変数初期化ブロック実行プリファレンスダイアログで、「追加」をクリックします。
選択されていない初期化ブロックがある場合にのみ「追加」を使用できます。
「参照」ダイアログで、開いたブロックの前に初期化する必要があるブロックを選択して、「OKをクリックします。
ブロックを削除するには、[リポジトリ|セッション]変数初期化ブロック実行プリファレンスダイアログで削除するブロックを選択して、「削除」をクリックします。
「OK」をクリックします。
初期化ブロックを必須にするには、「リポジトリ変数初期化ブロック」または「セッション変数初期化ブロック」のダイアログで、「認証のために必要」オプションを選択します。
「OK」をクリックします。
注意: 初期化ブロックで「OBI EEサーバーの使用」オプションを選択すると、次のような状態になります。
|
セッション変数初期化ブロックの実行は、場合によっては遅延できないことがあります(行単位の初期化が使用されている場合や「認証のために必要」オプションが選択されている場合など)。セッション変数初期化ブロックの実行が遅延できない場合、その理由を説明するメッセージが表示されます。詳細は、「名前およびスケジュールの初期化ブロックへの割当て」を参照してください。
セッション変数初期化ブロックの実行を遅延できないシナリオは、次のとおりです。
セッション変数初期化ブロック変数ターゲットダイアログで「行単位の初期化」オプションが選択されています。
メッセージ例: 初期化ブロック'A_blk'は、行単位の初期化を使用しているため、その実行を遅延することはできません。
「セッション変数初期化ブロック」ダイアログで「認証のために必要」オプションが選択されています。
メッセージ例: 初期化ブロック'A_blk'は、認証に必要であるため、その実行を遅延することはできません。
「データ・ソース・タイプ」が「データベース」ではありません。
メッセージ例: 初期化ブロック'A_blk'には接続プールがないため、その実行を遅延することはできません。
PROXY
またはUSER
という名前のセッション変数で初期化ブロックが使用されています。
メッセージ例: 初期化ブロック'A_blk'は、セッション変数'PROXY'によって使用されているため、その実行を遅延することはできません。
「セッション変数」ダイアログで「セキュリティ・センシティブ」オプションが選択されているセッション変数で初期化ブロックが使用されています。
メッセージ例: 初期化ブロック'A_blk'はセキュリティ・センシティブなセッション変数'A'で使用されているため、その実行を遅延することはできません。
その初期化ブロックが、「遅延実行の許可」オプションが選択されていない別の初期化ブロックの先行ブロックです。
メッセージ例: 初期化ブロック'A_blk'の後の初期化ブロックの1つにAllow deferred executionフラグが設定されていません。初期化ブロック'B_blk'の後の初期化ブロックの1つにAllow deferred executionフラグが設定されていません。
管理ツールの変数マネージャを使用して、初期化ブロックを有効化および無効化できます。
初期化ブロックを有効化または無効化する手順は次のとおりです。
管理ツールで、「管理」を選択してから「変数」を選択します。変数マネージャが表示されます。
左ペインの「リポジトリ」または「セッション」の下で「初期化ブロック」を選択します。選択する場所は、有効化または無効化の対象がリポジトリ初期化ブロックかセッション初期化ブロックかにより異なります。
右ペインで、有効化または無効化する初期化ブロックを右クリックします。
右クリック・メニューから「有効化」または「無効化」を選択します。
変数マネージャを閉じてリポジトリを保存します。