MaxLデータ定義言語の使用

この項の内容:

MaxL DDL言語

MaxLシェル

MaxL Perlモジュール

『Oracle Essbaseテクニカル・リファレンス』の「MaxL DDL」の項も参照してください。

MaxL DDL言語

MaxLデータ定義言語は、複雑な引数を含む一連のコマンドではなく、ステートメントを使用してEssbaseへの管理要求を行うためのインタフェースです。

MaxLを使用すると、Essbaseデータベースに対する管理操作を自動化できます。MaxLスクリプトは、カスタマイズおよび再利用が可能になるように変数を使用して記述できます。

EssbaseでMaxLステートメントを受け取って解析できるようにするには、MaxLシェル(essmsh)、Administration ServicesまたはカスタマイズされたPerlプログラム(Perlプログラムにステートメントを埋め込むことができるようにするMaxL Perlモジュールを使用)のいずれかを使用して、これらのステートメントをEssbaseサーバーに「渡す」必要があります。

ステートメントの概要

MaxL DDLスクリプトおよび対話的なセッションはすべて、ログインと一連のステートメントで構成されています。ステートメントは、それぞれがセミコロンで終了し、文法的なシーケンスに従ったキーワードや変数から成ります。ステートメントは英語の文に似ています。たとえば、次のようになります:

      create or replace user 
      user-name
       identified by 
      password
      ;
   

MaxLステートメントは、実行する操作のタイプを示す、createalterなどの動詞で始まります。次に、操作対象のEssbase要素を示す、databaseuserなどのアーティファクトを指定します。ステートメントの残りの部分では、文法的に正しいシーケンスに従ったステートメントの部品(トークン)を使用して、実行するアクションに関する詳細情報を示します。

文法要件の全体的な概要、およびMaxLステートメントの動詞/アーティファクトの構造については、『Oracle Essbaseテクニカル・リファレンス』のMaxL DDLの項を参照してください。

ステートメントの構成要素

MaxLパーサーは、ステートメントの構成要素であるトークンの順序付けられた表現を認識し、これを必要とします。トークンとは、MaxLによって単一の読取り可能な単位として認識される、スペースで区切られた有効な文字のシーケンスのことです。トークンは次のいずれかです:

  • キーワード

  • 名前

  • 文字列

  • 数字

キーワード

キーワードは、MaxLの語彙を構成している予約語です。これには、動詞やアーティファクトのほか、ステートメントを構成するために必要なその他の単語が含まれます。MaxLでのキーワードは、データには無関係です。逆に言えば、その他のMaxLトークン(名前など)はすべて定義する必要があります。

MaxLパーサーでは、『Oracle Essbaseテクニカル・リファレンス』のMaxLのトピックに図示されているように、MaxLキーワードやその他のトークンが文法的に正しい順序で配置されていることが要求されます。

図150は、『Oracle Essbaseテクニカル・リファレンス』にあるサンプルの構文図を示しています。この図にある小文字の単語のみがキーワードを表しています。他の要素は、名前のプレースホルダか、またはユーザーによって指定される値です。

図 150. MaxL構文図の例: Alter Filter

この図は、alter filter MaxLステートメントの構文図を示しています。

注:

キーワードでは大文字と小文字が区別されません。キーワードに小文字を使用するのは、文書作成上の規則です。『Oracle Essbaseテクニカル・リファレンス』のMaxL線路図の解釈方法に関する項を参照してください。

名前

MaxLでの名前は、データベースや、ユーザー、アプリケーション、フィルタなどのデータベース・アーティファクトを一意に識別するために使用されます。

名前のルール

一重引用符で囲まれている場合を除き、MaxLの名前は、英字またはアンダースコアで始まる文字列である必要があります。引用符で囲まれていない名前には、英字、数字およびアンダースコアのみを含めることができます。

名前を一重引用符で囲む場合は、名前に、スペースと次に示す任意の特殊文字を含めることができます:

      .
,
;
:
% 
$
"
'
*
+
-
=
<
>
[
]
{
}
(
)
?
!
 /
 \
|
 ~
`
#
&
@
^
   

注:

MaxLキーワードでもある任意の名前は、一重引用符で囲む必要があります。キーワードのリストは、『Oracle Essbaseテクニカル・リファレンス』を参照してください。

例:

次のアプリケーション名は、一重引用符で囲む必要はありません:

      Orange
Orange22
_Orange
   

次のアプリケーション名は、一重引用符で囲む必要があります:

      Orange County(because the name contains a space)
22Orange (because the name begins with a number)
variable (because the name is a MaxL keyword)
   
名前のタイプ

一部のEssbaseアーティファクトはシングル名を持っていますが、ダブルトリプルと呼ばれる、ネームスペースのネストを表す複合名が必要なものもあります。

シングル名は、システム全体にわたるコンテキストで意味を持つ場合があります。この名前が指すアーティファクトは、Essbaseに対してグローバルである可能性があるか、または特定のアプリケーションまたはデータベース・コンテキストを必要としません。たとえば、シングル名を持つアプリケーションは、別のアプリケーションまたはデータベースのコンテキストで考慮される必要がない場合があります。

ダブルはピリオドで接続された2つの名前であり、トリプルは2つのピリオドで接続された3つの名前です。ダブルとトリプルは、名前付きエンティティの継承されたネームスペースを示します。たとえば、データベースは通常、2つの名前を使用して識別されます。最初の名前でそのデータベースが存在するアプリケーションを識別し、2番目の名前がデータベース名になります。たとえば、次のようになります:

      Sample.Basic
   

データベース・アーティファクト(フィルタなど)は通常、トリプルの名前を使用して識別されます。最初の2つの名前でアプリケーションとデータベースを識別し、3番目の名前がアーティファクト名になります。そのため、フィルタ名は次のようになります:

      sample.basic.filter3
   

表162は、最も一般的なアーティファクトに必要な名前のタイプと、ステートメントで使用される名前の例を示しています。

表 162. アーティファクトの名前の要件

アーティファクト

名前

ユーザー

シングル

                     create user 
                     Fiona
                      identified by 'password';
                  

グループ

シングル

                     alter user Fiona add to group 
                     Managers
                     ;
                  

ホスト

シングル

                     drop replicated partition Samppart.Company from Sampeast.East at 
                     EastHost
                     ;
                  

アプリケーション

シングル

                     create application 
                     '&New App'
                     ;
                  

データベース

ダブル

                     display database 
                     '&New App'.testdb
                     ;
                  

計算

トリプル

                     drop calculation 
                     Sample.basic.'alloc.csc'
                     ;
                  

フィルタ

トリプル

                     display filter row 
                     sample.basic.filter1
                     ;
                  

関数(ローカル)

ダブル

                     drop function 
                     sample.'@COVARIANCE'
                     ;
                  

関数(グローバル)

シングル

                     create function 
                     '@JSUM'
                      as 'CalcFnc.sum'; 
                  

ロケーション別名

トリプル

                     drop location alias 
                     Main.Sales.EasternDB
                     ;
                  

役割

シングル

                     grant 
                     designer
                      on database Sample.basic to Fiona;
                  

代替変数

シングル

                     alter system add variable 
                     Current_month
                     ; 
alter system set variable 
                     Current_month
                      July;
                  

ディスク・ボリューム

シングル(定義する場合)、トリプル(表示する場合)

                     alter database AP.main1 add disk volume 
                     G
                     ;
alter database AP.main1 set disk volume 
                     G
                      partition_size 200mb;
display disk volume 
                     sample.basic.C
                     ;
                  

文字列

文字列は、MaxLステートメント内で、コメント、メンバー式、計算スクリプトおよびファイル参照のテキストを表すために使用されます。文字列は、任意の有効な文字で始めることができます。名前と同様に、空白または特殊文字を含む文字列は一重引用符で囲む必要があります。

有効な特殊文字のリストについては、名前のルールを参照してください。

表163は、文字列であるステートメント要素の例を示しています:

表 163. MaxLステートメント内の文字列の例

文字列のタイプ

パスワード

                     create user Fiona identified by 
                     sunflower
                     ;
                  

コメント

                     alter group Financial comment 
                     'Reports due July 31'
                     ;
                  

メンバー式

                     create filter sample.basic.filt1 read on 'Sales,
                     @ATTRIBUTE(Bottle)
                     '; 
create or replace replicated partition sampeast.east area 
                     '@IDESC(East), @IDESC(Qtr1)'
                      to samppart.company mapped globally '("Eastern Region")' to '(East)';
                  

計算の本文

                     execute calculation
 
                     '"Variance"=@VAR(Actual, Budget);
  "Variance %"=@VARPER(Actual, Budget);'
                     
on Sample.basic;
                  

ファイル参照

                     spool on to 
                     '/homes/fiona/out.txt'
                     ;
                  

数値

数値は、MaxLステートメント内で、Essbase内の特定のデータベース設定を変更するために使用します。たとえば、キャッシュやバッファのサイズを変更したり、ユーザーがパスワードの変更を求められるまでの経過日数などのシステム全体にわたる間隔を設定することができます。数値の設定を変更する場合、正の整数、正の実数および0を使用できます。小数点および科学記号を使用できます。

例:

      1000 
2.2 
645e-2
   

サイズの設定の場合は、数値の後に単位を付ける必要があります。数値と単位の間のスペースはオプションです。単位では大文字と小文字が区別されず、B/b (バイト)、KB/kb (キロバイト)、MB/mb (メガバイト)、GB/gb (ギガバイト)およびTB/tb (テラバイト)を含めることができます。単位を指定しない場合は、バイトと見なされます。

例:

      1000 b 
5.5GB 
645e-2 mb 
145 KB 
2,000e-3TB
   

ステートメントの分析

この項では、MaxLステートメントとその構成要素をテンプレート形式で図示することによって、ステートメントについて説明してきた内容を確認できるようにしています。次の各図の例に示すように、図では小文字の単語がキーワードであり、大文字の単語は適切な値で置き換えられます。

データベースの変更

図 151. データ・ファイルのキャッシュ・サイズを変更するMaxLステートメント

この図は、データ・ファイルのキャッシュ・サイズを変更するMaxLステートメントを示しています(set_data_file_cache_size文法を使用したalter database)。

例:

      alter database Sample.Basic set data_file_cache_size 32768KB;
   

権限の付与

図 152. ユーザーにアプリケーション権限を付与するMaxLステートメント

この図は、ユーザーにアプリケーション権限を付与するMaxLステートメントを示しています(application文法を使用したgrant)。

例:

      grant designer on application Sample to Fiona;
   

計算スクリプトの作成

図 153. 保管される計算を作成するMaxLステートメント

この図は、保管される計算を作成するMaxLステートメントを示しています(create calculation)。

例:

         create calculation sample.basic.varcalc
'"Variance"=@VAR(Actual, Budget);
"Variance %"=@VARPER(Actual, Budget);'
;
      

この項では、MaxLシェルのほとんどの機能を使用して操作を開始する方法について説明します。『Oracle Essbaseテクニカル・リファレンス』も参照してください。

この項では、Administration ServicesのMaxLスクリプト・エディタの使用については説明していません。Oracle Essbase Administration Services Online Helpを参照してください。

MaxLシェルの開始

MaxLシェルを起動して入力を取得する方法には、次のものがあります:

  • キーワードを使用した対話式入力

  • MaxLスクリプト・ファイルからの入力(コマンドラインで指定されたファイルからステートメントが読み取られる)

  • 別のプログラムの出力からMaxLシェルにパイプ接続された標準入力からの入力

MaxLシェルではまた、起動時にコマンドライン引数を受け入れられます。この機能は、任意の名前またはパスワードを表す位置パラメータに使用できます。

対話式入力の場合のシェルの起動

  MaxLステートメントをコマンドラインで対話式に入力するには、オペレーティング・システムのプロンプトでシェルを呼び出します。

例:

      essmsh
   

  呼出し時、ログイン後にMaxLステートメントを対話式に入力するには、-lフラグを使用します。

例:

         essmsh -l Admin password
...
49 - User logged in: [Admin].
      

  MaxLステートメントを対話式に入力し、対話式セッションで使用する変数を表すコマンドライン引数を指定するには、-aフラグを使用します。

例:

         essmsh -a Admin password Sample.Basic 
...
login $1 $2;

49 - User logged in: [admin].

alter database $3.$4 enable aggregate_missing;

72 - Database altered: ['sample'.'basic'].
      

この例では、$1$2$3および$4は定位置パラメータ変数であり、呼出し時にessmshの後に入力された引数が入力された順に表します。

ファイル入力の場合のシェルの起動

  MaxLスクリプト・ファイルからの入力を受け入れるようにMaxLシェルを呼び出すには、essmshの後に、現在のディレクトリ内のMaxLスクリプトの名前を入力するか、または別のディレクトリにあるMaxLスクリプトのフルパスとファイル名を入力します。

ファイル名のみを指定すると、MaxLシェルは、そのファイルが現在のディレクトリ(オペレーティング・システムのコマンド・プロンプトが、essmshが呼び出された時点で格納されているディレクトリ)内にあると見なします。次の呼出しの例では、ファイルmaxlscript.mshC:\の中に存在する必要があります。

      C:\> essmsh maxlscript.msh
   

MaxLスクリプトが現在のディレクトリ内に存在しない場合は、MaxLスクリプトへのパスを指定します。絶対パスまたは相対パスを使用できます。

例:

      $ essmsh ../Oracle/Middleware/EPMSystem11R1/products/Essbase/EssbaseServer/test.msh
   

注:

MaxLスクリプトは、特定の拡張子、つまりどの拡張子も、必要ありません。このドキュメントでは.mshを使用します。

UNIXシェルでは、ファイル読取りエラーを防ぐために、パスを一重引用符で囲んでください。

Windowsコマンド・プロンプトでは、スクリプトへのパスにスペースが含まれている場合、ファイル読取りエラーを防ぐために、パス全体とファイル名を二重引用符で囲む必要があります。

プログラム入力の場合のシェルの起動

  別のプログラムまたはプロセスの標準出力からの入力を受け入れるようにMaxLシェルを呼び出すには、-iフラグを使用します。

例:

         program.sh | essmsh -i
      

シェル・スクリプトprogram.shは、出力としてMaxLステートメントを生成する場合があります。シェル・スクリプト出力はessmsh -iにパイプされ、その出力が入力として使用されます。これにより、スクリプトの効果的な同時実行が可能になります。

Windowsの場合の-iを使用した呼出し例

次のWindowsバッチ・スクリプトは、その出力としてログイン・ステートメントとMaxL表示ステートメントを生成します。-iフラグを使用して、その出力を、入力としてessmsh(MaxLシェル)として使用できます。

      echo login admin password on localhost; display privilege user;|essmsh -i
   

管理者ユーザーがログインすると、すべてのユーザー権限が表示され、MaxLセッションが終了します。

UNIXの場合の-iを使用した呼出し例

次に示すシェル・スクリプトの部分では、display applicationステートメントで、アプリケーション数としてゼロが戻されるかどうかがテストされ、システム上にアプリケーションが存在しないことが確認されます。

      if [ $(echo "display application;" | 
essmsh -l admin password -i 2>&1 | 
awk '/Records returned/ {print $7}' ) != "[0]." ]
then
   print "This test requires that there be no applications."
   print "Quitting."
   exit 2
fi
   

説明:

  1. MaxLの構文が、UNIX echoコマンドの出力として、MaxLシェルの呼出しおよびログインにパイプされます。

  2. MaxLセッションの結果がawkによってテストされ、空のシステムにdisplay applicationを入力した場合に表示される、次のようなMaxLステータス・メッセージとのパターン照合が実行されます: Records returned: [0]

  3. Awkでは、まず文字列'Records returned: 'が照合され、次に'[0].'と等しいかどうかが確認されます。

  4. $7(awkによって検出されたステータス文字列内の5番目のトークンを表す変数)が、'[0].'に等しい場合は、システム上にアプリケーションは存在しません。それ以外の場合は、$7'[1].'またはシステム上に存在するアプリケーション数に等しくなります。

呼出しオプションの詳細と例については、『Oracle Essbaseテクニカル・リファレンス』を参照してください。呼出しに関する情報は、essmshの「manページ」にあります。manページを表示するには、オペレーティング・システムのコマンド・プロンプトでessmsh -h | moreと入力してください。

Essbaseへのログイン

MaxL言語インタプリタでは、MaxLステートメントの解析を始める前に、Essbaseセッションに接続する必要があります。Essbaseへの接続を確立するには、MaxLシェルを使用します。

  コマンド・シェルを開始した後でEssbaseにログオンするには、シェルのlogin文法を使用します。

例:

      essmsh
   
MAXL>login Fiona identified by sunflower on hostname;
   

ホスト名を指定しない場合は、localhostが使用されます。

  シェルを呼び出すときにログオンするには、-lオプションを使用します。呼出し時にlocalhost以外のサーバーにログオンするには、-sオプションを使用します。メッセージのレベルを設定するには、-mを使用します。

例:

         essmsh -l fiona sunflower -s myHost -m error
      

注:

シェルを終了しなくても、ログアウトおよびユーザーの変更を行うことができます。

ユーザーがMaxLシェル・セッションを介してEssbaseにログインし、ユーザーのログイン中にEssbaseを再起動すると、同じMaxLシェル・セッションを介した次回のログインは4秒遅れます。

MaxLシェル呼出しオプションの詳細は、『Oracle Essbaseテクニカル・リファレンス』を参照してください。

コマンド・シェルの機能

MaxLシェルには、コマンドライン引数の処理、環境変数の処理、MaxLスクリプトのネストおよびシェルのエスケープが組み込まれています。これらの機能は、高度に自動化されたEssbaseの本番環境を作り出すために必要な柔軟性を備えています。

『Oracle Essbaseテクニカル・リファレンス』を参照してください。

MaxLスクリプトのネスト

DBAの場合、単一のスクリプトから多数の操作を実行するのではなく、自動化した個々のタスクをいくつかのMaxLスクリプトに保存する場合があります。あるMaxLスクリプトを別のMaxLスクリプトから参照する方法がわかっている場合、個々のピースをつなぎ合わせるのは簡単です。

  現在のMaxLセッション内で他のMaxLスクリプトを参照または追加するには、次のMaxLシェル構文を使用します:

             msh <scriptfile>;
      

注:

mshはシェル・コマンドであるため、開始セッションに制限されます。したがって、新しいログイン・ステートメントを含むMaxLスクリプトは参照しないでください。

ファイルへの出力のスプール

出力をファイルにスプールして、MaxLセッションおよび関連メッセージのすべてまたはその一部のログ・ファイルを作成できます。

  MaxLセッションを記録するには:

  1. Essbaseにログオンします。たとえば、

                login fiona sunflower;
             
  2. 「spool on to <filename>」を使用して、出力のスプールを開始します。例:

                spool on to 'C:\\output\\display.txt';
             
  3. 記録するMaxLステートメントをすべて入力します。

  4. 「spool off」を使用して、出力のスプールを停止します。

MaxLステートメントとその出力は、spoolコマンドを対話式セッションまたはスクリプトのいずれかで発行したときに、出力ファイルに記録されます。ただし、MaxLシェルのコマンドと出力は、対話式セッション中にスプールする場合のみ記録されます。MaxLシェルのコマンドと出力は、スクリプト・セッションから作成されたログ・ファイルでは無視されます。さらに、オペレーティング・システム・コマンドを含めた可能性のある出力は、対話式とスクリプトの両方のセッションのログ・ファイルで無視されます。

オペレーティング・システムのコマンドの追加

オペレーティング・システムのコマンドは、MaxLセッションから直接発行できます。オペレーティング・システムの出力は、MaxLシェル出力の一部になります。オペレーティング・システムは、コマンドの実行を終了したときに、制御をessmshに戻します。

  MaxLセッションからオペレーティング・システムにエスケープするには、shellを使用します。

たとえば、MaxLスクリプトからUNIXのdateコマンドを実行するには、次を使用します:

         shell date;
      

  MaxLセッションからESSCMDにエスケープするには、一重引用符を使用します:

例:

         shell esscmd ‘../scripts/test.scr’;
      

変数を使用したMaxLスクリプトのカスタマイズ

MaxLシェルでは、コンピュータの名前、ユーザー名またはパスワードなどの、変更される可能性のあるデータや頻繁に参照されるデータのプレースホルダとして、変数を使用できます。変数は、MaxLスクリプトで、対話式セッション中に使用できます。MaxLスクリプトで変数を使用すると、ユーザー、データベースまたはホストごとにカスタマイズしたスクリプトを作成する必要がなくなります。変数は、環境変数(たとえば、Essbaseインストール・ディレクトリを参照先とする$ESSBASEPATH)、定位置パラメータ(たとえば、$1$2、など)、およびローカルで定義したシェル変数である場合があります。変数は、参照するときは常に$(ドル符号)で開始します。

MaxLシェルでの変数の使用の詳細は、『Oracle Essbaseテクニカル・リファレンス』を参照してください。

MaxLシェルの停止

MaxLセッションからログアウトしたり、シェルを終了せずに別のユーザーとしてログオンできます。MaxLスクリプトの末尾には、ログアウト・ステートメントを指定する必要があります。MaxLスクリプト・ファイルの末尾で終了したり、または別のプログラムの出力からのストリーム指向の入力を使用してセッションの後に終了する必要はありません。

  MaxLシェルを終了しないでログアウトするには、次のコマンドを入力します:

             logout;
      

  対話式モードの使用後にMaxLシェルを終了するには、次のコマンドを入力します:

             exit;
      

MaxL Perlモジュール

MaxL Perlモジュール(Essbase.pm)を使用すると、MaxL言語をPerlプログラムに埋め込むことができ、これにより、シェルよりも詳細にプログラムを制御できるようになります。

Essbase.pmPerlmodディレクトリ内にあり、これによりPerlプログラマは、PerlスクリプトでMaxLステートメントを折り返せます。MaxLによるデータベース管理は、Perlプログラムと同じくらい効率的で柔軟なものになります。

Essbaseデータベースを管理するときには、MaxLを含むPerlにより、次の機能やその他のプログラム機能を活用できます:

  • 条件付テスト

  • プロセス間通信

  • メッセージ処理

  • 電子メール通知

  • Webスクリプト

Essbase.pmには、Perlを使用してMaxLステートメントを渡すことができるようにするメソッドが含まれています:

  • connect ()は、Essbaseへの接続を確立します

  • do ()は、カッコで囲まれたMaxLステートメントを実行するようにPerlに指示します

  • pop_msg ()は、戻されたMaxLメッセージのスタック内を移動します

  • fetch_col ()fetch_desc ()およびfetch_row ()は、MaxL表示出力テーブルから情報を取得します

  • disconnect ()は、Essbaseへの接続を終了します

PerlメソッドをEssbaseで使用できるようにするには、PerlプログラムにEssbase.pmへの参照を組み込みます。各Perlスクリプトの一番上に次の行を配置します:

      use Essbase;
   

Perlは、UNIXシェルやその他のプログラミング言語の知識がある場合は特に、学習は難しくありません。Perlをダウンロードして、より詳しく学習するには、包括的なPerlアーカイブ・ネットワークのWebサイト(http://www.cpan.org/)にアクセスしてください。

『Oracle Essbaseテクニカル・リファレンス』のMaxL DDLに関する項、およびEssbaseインストールのPERLMODディレクトリ内のREADMEファイルを参照してください。