『Oracle Essbaseテクニカル・リファレンス』の「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ステートメントは、実行する操作のタイプを示す、createやalterなどの動詞で始まります。次に、操作対象のEssbase要素を示す、databaseやuserなどのアーティファクトを指定します。ステートメントの残りの部分では、文法的に正しいシーケンスに従ったステートメントの部品(トークン)を使用して、実行するアクションに関する詳細情報を示します。
文法要件の全体的な概要、およびMaxLステートメントの動詞/アーティファクトの構造については、『Oracle Essbaseテクニカル・リファレンス』のMaxL DDLの項を参照してください。
MaxLパーサーは、ステートメントの構成要素であるトークンの順序付けられた表現を認識し、これを必要とします。トークンとは、MaxLによって単一の読取り可能な単位として認識される、スペースで区切られた有効な文字のシーケンスのことです。トークンは次のいずれかです:
キーワードは、MaxLの語彙を構成している予約語です。これには、動詞やアーティファクトのほか、ステートメントを構成するために必要なその他の単語が含まれます。MaxLでのキーワードは、データには無関係です。逆に言えば、その他のMaxLトークン(名前など)はすべて定義する必要があります。
MaxLパーサーでは、『Oracle Essbaseテクニカル・リファレンス』のMaxLのトピックに図示されているように、MaxLキーワードやその他のトークンが文法的に正しい順序で配置されていることが要求されます。
図150は、『Oracle Essbaseテクニカル・リファレンス』にあるサンプルの構文図を示しています。この図にある小文字の単語のみがキーワードを表しています。他の要素は、名前のプレースホルダか、またはユーザーによって指定される値です。
MaxLでの名前は、データベースや、ユーザー、アプリケーション、フィルタなどのデータベース・アーティファクトを一意に識別するために使用されます。
一重引用符で囲まれている場合を除き、MaxLの名前は、英字またはアンダースコアで始まる文字列である必要があります。引用符で囲まれていない名前には、英字、数字およびアンダースコアのみを含めることができます。
名前を一重引用符で囲む場合は、名前に、スペースと次に示す任意の特殊文字を含めることができます:
. , ; : % $ " ' * + - = < > [ ] { } ( ) ? ! / \ | ~ ` # & @ ^
次のアプリケーション名は、一重引用符で囲む必要はありません:
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シェルのほとんどの機能を使用して操作を開始する方法について説明します。『Oracle Essbaseテクニカル・リファレンス』も参照してください。
この項では、Administration ServicesのMaxLスクリプト・エディタの使用については説明していません。Oracle Essbase Administration Services Online Helpを参照してください。
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.mshはC:\の中に存在する必要があります。
C:\> essmsh maxlscript.msh
MaxLスクリプトが現在のディレクトリ内に存在しない場合は、MaxLスクリプトへのパスを指定します。絶対パスまたは相対パスを使用できます。
$ essmsh ../Oracle/Middleware/EPMSystem11R1/products/Essbase/EssbaseServer/test.msh
UNIXシェルでは、ファイル読取りエラーを防ぐために、パスを一重引用符で囲んでください。
Windowsコマンド・プロンプトでは、スクリプトへのパスにスペースが含まれている場合、ファイル読取りエラーを防ぐために、パス全体とファイル名を二重引用符で囲む必要があります。
シェル・スクリプトprogram.shは、出力としてMaxLステートメントを生成する場合があります。シェル・スクリプト出力はessmsh -iにパイプされ、その出力が入力として使用されます。これにより、スクリプトの効果的な同時実行が可能になります。
次のWindowsバッチ・スクリプトは、その出力としてログイン・ステートメントとMaxL表示ステートメントを生成します。-iフラグを使用して、その出力を、入力としてessmsh(MaxLシェル)として使用できます。
echo login admin password on localhost; display privilege user;|essmsh -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
MaxLセッションの結果がawkによってテストされ、空のシステムにdisplay applicationを入力した場合に表示される、次のようなMaxLステータス・メッセージとのパターン照合が実行されます: Records returned: [0]。
Awkでは、まず文字列'Records returned: 'が照合され、次に'[0].'と等しいかどうかが確認されます。
$7(awkによって検出されたステータス文字列内の5番目のトークンを表す変数)が、'[0].'に等しい場合は、システム上にアプリケーションは存在しません。それ以外の場合は、$7が'[1].'またはシステム上に存在するアプリケーション数に等しくなります。
呼出しオプションの詳細と例については、『Oracle Essbaseテクニカル・リファレンス』を参照してください。呼出しに関する情報は、essmshの「manページ」にあります。manページを表示するには、オペレーティング・システムのコマンド・プロンプトでessmsh -h | moreと入力してください。
MaxL言語インタプリタでは、MaxLステートメントの解析を始める前に、Essbaseセッションに接続する必要があります。Essbaseへの接続を確立するには、MaxLシェルを使用します。
essmsh MAXL>login Fiona identified by sunflower on hostname;
MaxLシェルには、コマンドライン引数の処理、環境変数の処理、MaxLスクリプトのネストおよびシェルのエスケープが組み込まれています。これらの機能は、高度に自動化されたEssbaseの本番環境を作り出すために必要な柔軟性を備えています。
『Oracle Essbaseテクニカル・リファレンス』を参照してください。
DBAの場合、単一のスクリプトから多数の操作を実行するのではなく、自動化した個々のタスクをいくつかのMaxLスクリプトに保存する場合があります。あるMaxLスクリプトを別のMaxLスクリプトから参照する方法がわかっている場合、個々のピースをつなぎ合わせるのは簡単です。
出力をファイルにスプールして、MaxLセッションおよび関連メッセージのすべてまたはその一部のログ・ファイルを作成できます。
MaxLステートメントとその出力は、spoolコマンドを対話式セッションまたはスクリプトのいずれかで発行したときに、出力ファイルに記録されます。ただし、MaxLシェルのコマンドと出力は、対話式セッション中にスプールする場合のみ記録されます。MaxLシェルのコマンドと出力は、スクリプト・セッションから作成されたログ・ファイルでは無視されます。さらに、オペレーティング・システム・コマンドを含めた可能性のある出力は、対話式とスクリプトの両方のセッションのログ・ファイルで無視されます。
オペレーティング・システムのコマンドは、MaxLセッションから直接発行できます。オペレーティング・システムの出力は、MaxLシェル出力の一部になります。オペレーティング・システムは、コマンドの実行を終了したときに、制御をessmshに戻します。
MaxLシェルでは、コンピュータの名前、ユーザー名またはパスワードなどの、変更される可能性のあるデータや頻繁に参照されるデータのプレースホルダとして、変数を使用できます。変数は、MaxLスクリプトで、対話式セッション中に使用できます。MaxLスクリプトで変数を使用すると、ユーザー、データベースまたはホストごとにカスタマイズしたスクリプトを作成する必要がなくなります。変数は、環境変数(たとえば、Essbaseインストール・ディレクトリを参照先とする$ESSBASEPATH)、定位置パラメータ(たとえば、$1、$2、など)、およびローカルで定義したシェル変数である場合があります。変数は、参照するときは常に$(ドル符号)で開始します。
MaxL Perlモジュール(Essbase.pm)を使用すると、MaxL言語をPerlプログラムに埋め込むことができ、これにより、シェルよりも詳細にプログラムを制御できるようになります。
Essbase.pmはPerlmodディレクトリ内にあり、これによりPerlプログラマは、PerlスクリプトでMaxLステートメントを折り返せます。MaxLによるデータベース管理は、Perlプログラムと同じくらい効率的で柔軟なものになります。
Essbaseデータベースを管理するときには、MaxLを含むPerlにより、次の機能やその他のプログラム機能を活用できます:
Essbase.pmには、Perlを使用してMaxLステートメントを渡すことができるようにするメソッドが含まれています:
PerlメソッドをEssbaseで使用できるようにするには、PerlプログラムにEssbase.pmへの参照を組み込みます。各Perlスクリプトの一番上に次の行を配置します:
use Essbase;
Perlは、UNIXシェルやその他のプログラミング言語の知識がある場合は特に、学習は難しくありません。Perlをダウンロードして、より詳しく学習するには、包括的なPerlアーカイブ・ネットワークのWebサイト(http://www.cpan.org/)にアクセスしてください。
『Oracle Essbaseテクニカル・リファレンス』のMaxL DDLに関する項、およびEssbaseインストールのPERLMODディレクトリ内のREADMEファイルを参照してください。