プラグイン開発者は、スナップショット・タイプごとに構成関連機能をエンタープライズ構成管理に統合する作業において、次の手順に従う必要があります。
収集される構成データは、ある収集から次の収集までの間に、あらゆる点で変更されることのないようにしてください(ただし、管理者が明示的な操作を行った場合を除きます)。管理者の明示的な操作によって変更される可能性はあるが、そのような操作がなければ変更されないデータのみを構成データとして収集する必要があります。
ターゲット型定義の一部として確立された構成収集メトリックと一致するように、収集表を定義するエンタープライズ構成管理に固有のメタデータ・ファイルを定義します。
詳細は、「構成収集表の定義」を参照してください。
指定のターゲット型に対するスナップショット・タイプに名前を付けます(名前は管理エージェント側で指定されるCollectionItem名と一致する必要があります)。
詳細は、「構成管理スナップショット・メタデータ要素の概要」を参照してください。
プラグインのデプロイ時に、エンタープライズ構成管理を使用してメタデータを登録します。これにより、エンタープライズ構成管理フレームワークに基づくあらゆる制約に従うスナップショット・データの表が作成されます。また、データ表をエンタープライズ構成管理メタデータ表に登録します。
詳細は、「構成管理フレームワークへのメタデータの登録」を参照してください。
標準管理エージェントの収集メカニズムと統合します。CollectionItemおよび対応するメトリックは、どちらも管理エージェントで定義される必要があります。 
詳細は、「標準収集メトリックおよびRAWメトリックの変更」を参照してください。
定義済みの構成収集データが管理エージェントによって管理リポジトリに戻されていることを検証します。
詳細は、「構成収集データのテスト」および「トラブルシューティング」を参照してください。
構成収集のメタデータは、プラグインにパッケージ化されている次の3つのメタデータ・ファイルで定義されます。
このファイルは、収集した構成データを格納する管理リポジトリ内の表を定義します。また、EDKには構成メタデータ・ファイルの例が含まれます。
\samples\plugins\HostSample\stage\oms\metadata\snapshotlive\demo_hostsample_ecmdef.xml
詳細は、「構成収集表の定義」を参照してください。
各構成データ項目は、ターゲット・タイプ・メタデータ・ファイル内の他のメトリックとともに定義されるメトリックとして収集されます。また、EDKにはターゲット・タイプ・メタデータ・ファイルの例が含まれます。
\samples\plugins\HostSample\stage\oms\metadata\targetType\demo_hostsample.xml
詳細は、「ターゲット・タイプ・メタデータ・ファイルの作成」を参照してください。
各メトリックに対して構成データが収集される頻度は、デフォルト収集メタデータ・ファイルで定義されます。各メトリックのメトリック・アラート・イベント条件とそのようなアラートの表示メッセージも、このファイルで定義されます。また、EDKにはデフォルト収集メタデータ・ファイルの例が含まれます。
\samples\plugins\HostSample\stage\oms\metadata\default_collection\demo_hostsample.xml
詳細は、「デフォルトの収集ファイルの作成」を参照してください。
この項では、構成スナップショット表の作成方法について説明します。Oracleホームのターゲット・タイプ定義がEnterprise Managerフレームワークに追加されていると仮定します。
構成データを格納するメタデータおよび表を定義し、管理エージェントでデータを収集するメトリックを定義することができます。
ターゲット・タイプ・メタデータ・ファイルで定義される各エンタープライズ構成管理メトリックは、構成メタデータXMLファイルによって定義される表に対応しています。ターゲット・タイプ・メタデータ・ファイルの詳細は、「ターゲット・メタデータ・ファイルの作成」を参照してください。
表には、データベース内の外部キー制約に類似した親子関係があることがあります。すべての親表の行に対して子表の行にn数があり、すべての子表の行には正確に1つの親表の行があります。実際にエンタープライズ構成管理では表をツリーにできます。そこでは各表に最大1つの親表があります。1つの構成はこれら一連のツリーから構成されており、その場合、繰り返される表はありません。
データベースからすると、表には、祖先表のすべてのキー列が含まれる必要があります。(内部的には、各エンタープライズ構成管理表にはRAW(16)型のECM_SNAPSHOT_ID列が含まれ、、指定の行が属するスナップショットを識別します。)
収集表のメタデータは、最低限、次を指定する必要があります。
表名、列名、列タイプ、および表の間の階層関係(存在する場合)。
キー列(表の中で行を一意に識別する列)。キーを正確に指定する必要があります。Enterprise Manager UI、比較および履歴は、キー列を広範囲に使用します。
Enterprise Managerの一般UIに表示されるUI表示名。
図7-1に、構成表のOracleホーム・エンティティ関連図(ERD)を示します。
図7-1 フレームワークへの関連を持つOracleホームERD

構成メタデータXMLファイルは、METADATAタグで始まります。METADATAタグは、ターゲット・タイプとスナップショット・タイプの関係を確立し、UI表示名を定義します。
<METADATAS>
  <METADATA SNAP_TYPE="oracle_home_config" TARGET_TYPE="oracle_home" VER="1">
       <METADATA_UI_NAME>Oracle Home Configuration</METADATA_UI_NAME>
       CONFIGURATION COLLECTION TABLE DEFINITIONS
  </METADATA>
<METADATAS>
構成収集表の定義は、METADATAタグ内でカプセル化されます。
構成メタデータXMLの要素の詳細は、「構成管理スナップショット・メタデータ要素の概要」を参照してください。構成XMLファイルを制御するXMLスキーマ定義(XSD)の詳細は、拡張開発キット(EDK)の仕様を参照してください。
EM_ECM_OH_HOME_INFO表には、Oracleソフトウェアのインストールに関連したプロパティが格納されます。この表のメタデータは、次のとおりです。
<TABLE NAME="EM_ECM_OH_HOME_INFO" SINGLE_ROW="Y"> <UI_NAME>Home Info</UI_NAME> <COLUMN NAME="HOME_LOCATION" TYPE="STRING" TYPE_FORMAT="1024">Install Location</COLUMN> <COLUMN NAME="OUI_HOME_NAME" TYPE="STRING" TYPE_FORMAT="256" >OUI Home Name</COLUMN> <COLUMN NAME="OUI_HOME_GUID" TYPE="STRING" TYPE_FORMAT="32" >OUI Home GUID</COLUMN> <COLUMN NAME="HOME_TYPE" TYPE="STRING" TYPE_FORMAT="1" >Home Type</COLUMN> <COLUMN NAME="HOME_POINTER" TYPE="STRING" TYPE_FORMAT="1024">Home Pointer</COLUMN> <COLUMN NAME="IS_CLONABLE" TYPE="NUMBER" TYPE_FORMAT="1" >Is Clonable</COLUMN> <COLUMN NAME="IS_CRS" TYPE="NUMBER" TYPE_FORMAT="1" >Is CRS</COLUMN> <COLUMN NAME="ARU_ID" TYPE="NUMBER" TYPE_FORMAT="10" >ARU ID of the Oracle Home</COLUMN> <COLUMN NAME="HOME_SIZE" TYPE="NUMBER" TYPE_FORMAT="10" >Size of Oracle Home (KB)</COLUMN> </TABLE>
対応するデータベース表は次のとおりです。
| COLUMN_NAME | DATA_TYPE | COLUMN_WIDTH | KEY | 
|---|---|---|---|
| ECM_SNAPSHOT_ID | RAW | 16 | PK | 
| HOME_LOCATION | VARCHAR2 | 1024 | |
| OUI_HOME_NAME | VARCHAR2 | 256 | |
| OUI_HOME_GUID | VARCHAR2 | 32 | |
| HOME_TYPE | VARCHAR2 | 1 | |
| HOME_POINTER | VARCHAR2 | 1024 | |
| IS_CLONABLE | NUMBER | 1 | |
| IS_CRS | NUMBER | 1 | |
| ARU_ID | NUMBER | 10 | |
| HOME_SIZE (単位: KB) | NUMBER | 10 | 
この表の場合、主キーはECM_SNAPSHOT_IDから構成されています。メタデータの例のSINGLE_ROW="Y"属性は、各スナップショットが、この表では多くとも1つの行しか持たず、したがって、この表の他のいかなる列もキーとしてマークする必要がないことを示します。つまり、スナップショットを識別するECM_SNAPSHOT_ID列は表の唯一のキー列になります。
EM_ECM_OH_DEP_HOMES表には、指定のOracleホームが依存するOracleホーム・ディレクトリの場所が格納されます。このデータは、Oracleホーム間の依存のアソシエーションを形成するために使用されます。この表のメタデータは、次のとおりです。
<TABLE NAME="EM_ECM_OH_DEP_HOMES"> <UI_NAME>Dependee Oracle Homes</UI_NAME> <COLUMN NAME="DEP_HOME_LOCATION" TYPE="STRING" TYPE_FORMAT="1024" IS_KEY="Y">Dependee Home Location</COLUMN> </TABLE>
対応するデータベース表は次のとおりです。
| COLUMN_NAME | DATA_TYPE | COLUMN_WIDTH | KEY | 
|---|---|---|---|
| ECM_SNAPSHOT_ID | RAW | 16 | PK | 
| DEP_HOME_LOCATION | VARCHAR2 | 1024 | PK | 
この表の主キーは、ECM_SNAPSHOT_IDとDEP_HOME_LOCATIONから構成されています。
注意:
メタデータ・ファイルでは、キー列(および常にキーの一部となるECM_SNAPSHOT_ID)はIS_KEY="Y"でマークされます。
EM_ECM_OH_COMPONENT表には、Oracleホーム・ディレクトリにあるOracleソフトウェア・コンポーネントの情報が格納されます。この表のメタデータは、次のとおりです。
<TABLE NAME="EM_ECM_OH_COMPONENT"> <UI_NAME>Components installed in Oracle Home</UI_NAME> <COLUMN NAME="COMPONENT_NAME" TYPE="STRING" TYPE_FORMAT="128" IS_KEY="Y">Component Name</COLUMN> <COLUMN NAME="COMPONENT_VERSION" TYPE="STRING" TYPE_FORMAT="64" IS_KEY="Y">Base Version of Component</COLUMN> <COLUMN NAME="CURRENT_VERSION" TYPE="STRING" TYPE_FORMAT="64" >Current Version of the Component</COLUMN> <COLUMN NAME="INSTALL_TIME" TYPE="TIMESTAMP" >Install Time</COLUMN> <COLUMN NAME="IS_TOP_LEVEL" TYPE="NUMBER" TYPE_FORMAT="1" >Is it a top level Component</COLUMN> <COLUMN NAME="EXTERNAL_NAME" TYPE="STRING" TYPE_FORMAT="128" >External name</COLUMN> <COLUMN NAME="DESCRIPTION" TYPE="STRING" TYPE_FORMAT="1024" >Description</COLUMN> <COLUMN NAME="LANGUAGES" TYPE="STRING" TYPE_FORMAT="1024" >Languages</COLUMN> <COLUMN NAME="INSTALLED_LOCATION" TYPE="STRING" TYPE_FORMAT="1024" >Installed Location</COLUMN> <COLUMN NAME="INSTALLER_VERSION" TYPE="STRING" TYPE_FORMAT="64" >Installer Version</COLUMN> <COLUMN NAME="MIN_DEINSTALLER_VERSION" TYPE="STRING" TYPE_FORMAT="64" >Minimum Deinstaller Version</COLUMN>
注意:
このメタデータは、このTABLEタグの一部として含まれる次の表(EM_ECM_OH_COMP_INST_TYPE表)の親表であるため、TABLE閉じタグが(まだ)ありません。
対応するデータベース表は次のとおりです。
| COLUMN_NAME | DATA_TYPE | COLUMN_WIDTH | KEY | 
|---|---|---|---|
| ECM_SNAPSHOT_ID | RAW | 16 | PK | 
| COMPONENT_NAME | VARCHAR2 | 128 | PK | 
| COMPONENT_VERSION | VARCHAR2 | 64 | PK | 
| CURRENT_VERSION | VARCHAR2 | 64 | |
| INSTALL_TIME | DATE | - | |
| IS_TOP_LEVEL | NUMBER | 1 | |
| EXTERNAL_NAME | VARCHAR2 | 128 | |
| DESCRIPTION | VARCHAR2 | 1024 | |
| LANGUAGES | VARCHAR2 | 1024 | |
| INSTALLED_LOCATION | VARCHAR2 | 1024 | |
| INSTALLER_VERSION | VARCHAR2 | 64 | |
| MIN_DEINSTALLER_VERSION | VARCHAR2 | 64 | 
この表の主キーは、ECM_SNAPSHOT_ID、COMPONENT_NAMEおよびCOMPONENT_VERSIONから構成されています。
EM_ECM_OH_COMP_INST_TYPE表には、Oracleソフトウェア・コンポーネントのインストールのタイプが格納されます(Oracle Universal Installer (OUI)のみ)。これは、EM_ECM_OH_COMPONENT表の子表です。この表のメタデータは、次のとおりです。
<TABLE NAME="EM_ECM_OH_COMP_INST_TYPE"> <UI_NAME>Install Types of Components</UI_NAME> <COLUMN NAME="NAME_ID" TYPE="STRING" TYPE_FORMAT="128" IS_KEY="Y">Install Type Name ID</COLUMN> <COLUMN NAME="INSTALL_TYPE_NAME" TYPE="STRING" TYPE_FORMAT="128" >Install Type Name</COLUMN> <COLUMN NAME="DESC_ID" TYPE="STRING" TYPE_FORMAT="128" >Install Type Description ID</COLUMN> </TABLE> </TABLE>
注意:
余分な</TABLE>閉じタグは、EM_ECM_OH_COMPONENT親表のためのものです。
対応するデータベース表は次のとおりです。
| COLUMN_NAME | DATA_TYPE | COLUMN_WIDTH | KEY | 
|---|---|---|---|
| ECM_SNAPSHOT_ID | RAW | 16 | PK | 
| COMPONENT_NAME | VARCHAR2 | 128 | PK | 
| COMPONENT_VERSION | VARCHAR2 | 64 | PK | 
| NAME_ID | VARCHAR2 | 128 | PK | 
| INSTALL_TYPE_NAME | VARCHAR2 | 128 | |
| DESC_ID | VARCHAR2 | 128 | 
この表の場合、主キーはECM_SNAPSHOT_ID、COMPONENT_NAME、COMPONENT_VERSIONおよびNAME_IDから構成されています。
注意:
COMPONENT_NAMEおよびCOMPONENT_VERSIONはここにリストされていませんが、親表のキー列から継承されます。これらの列の値は、ECM_SNAPSHOT_ID、COMPONENT_NAMEおよびCOMPONENT_VERSIONの値が同一であるEM_ECM_OH_COMPONENTの行に一致している必要があります。
構成メタデータXMLファイルを作成する場合、次のことに注意してください。
それぞれの表定義では、その名前と、少なくとも1つの列仕様を指定する必要があります。
例: 表定義
<TABLE NAME="..." ...> Optional UI name Column definitions Optional Indexes definitions: starting 12c PS1 platform release Optional Child Table definitions </TABLE>
表7-1 に、TABLE要素の属性を示します。
表名は指定のスナップショット・タイプに固有である必要があります。複数のスナップショット・タイプで共有することはできません。Enterprise Managerの内部名はEM_で始めることができますが、プラグインおよびアドオンの場合、表名を大文字のプラグイン・タグ(プラグインIDの3番目の部分)で始め、後にアンダースコアを続けることをお薦めします。たとえば、プラグインoracle.sysman.xyzの場合は、XYZ_CONFIGのように、XYZ_で始まる表名を定義します。
それぞれの列定義では、少なくともその名前とタイプを指定する必要があります。
<COLUMN NAME="..." TYPE="..." ...>...</COLUMN>
表7-1 に、COLUMN要素の属性を示します。
列のタイプは、STRING、NUMBER、TIMESTAMP、RAWのいずれかです。TYPE_FORMATはオプションです。その意味はタイプの値から導出されます。STRINGの場合、それは最大の文字列長です。NUMBERの場合、Oracleデータベースに関する精度とスケールです(たとえば、TYPE_FORMAT="4, 9")。
TABLEタグをネスティングすることによって、表の間の親子関係を指定します。
表とビューの名前は25文字までです。
表と列の順序は重要です。UI表示には、その順序が反映されます。インポートとエクスポートの操作では、順序は変わりません。削除操作(表データに対する)は、逆の順序で行われます。子行は、親行の前に削除されます。
COLUMNタグには、列のUI表示名が含まれます。
表には、表の中で行を一意に識別するキー列が必要です。キー列の合計サイズが大きくなりすぎないようにしてください(4,000が最大ですが、それよりずっと小さいサイズでも構いません)。
すべての祖先表のキー列は子表によって継承されると自動的に仮定され、子表の仕様では繰り返されません。
ただし、表は、1つの親行当たりの行が1だけであるか、表が最上表で、1つのスナップショット当たりの行が1つだけの場合、キーを必要としません。キーのない表では、SINGLE_ROW="Y"属性を指定する必要があります。これは、デフォルトでは"N"に設定されています。
構成メタデータの主要な要素の詳細は、「構成管理スナップショット・メタデータ要素の概要」を参照してください。
表7-1 には、構成管理を定義する主要な要素を記述しています。
表7-1 構成メタデータXMLファイルの主要な要素
| 要素 | 説明 | 
|---|---|
| 
 | 構成メタデータXMLファイルは、METADATASタグで始まります。 <METADATAS> One or more snapshot specifications </METADATAS> スナップショットの指定は | 
| 
 | スナップショットの指定は 
 | 
| 
 | 表名と少なくとも1つの列を指定します。次の属性があります。 
 | 
| 
 | それぞれの列定義は、 
 | 
| 
 | 導出された関連付け、コンプライアンス・ルール、レポート、またはその他の、ECM_SNAPSHOT_ID以外の列に基づく表行へのアクセスにおけるパフォーマンスが重要な問合せで表が使用されている場合、オプションの索引が便利です。 オプションの索引定義要素<INDEXES>では、1つ以上の<INDEX>要素を指定し、各<INDEX>要素には名前と列を指定する必要があります。 <INDEXES>
    <INDEX NAME="..." COLUMNS="..." />
    <INDEX NAME="..." COLUMNS="..." />
    …
</INDEXES>
 | 
注意:
事前定義されたECM_METADATA_ID列は、常に各索引の最後の列として追加されます。
次の例は、oracle_home_configスナップショットの構成メタデータXMLファイルを示しています。すべての*_IGNORE属性は、ファイル内で指定されていないため、デフォルト値(N)を保持します。 
例: 構成メタデータXMLファイル
<METADATAS>
  <METADATA SNAP_TYPE="oracle_home_config" TARGET_TYPE="oracle_home" VER="1"
  <METADATA_UI_NAME>Oracle Home Configuration</METADATA_UI_NAME>
  <TABLE NAME="EM_ECM_OH_HOME_INFO" SINGLE_ROW="Y">
    <UI_NAME>Home Info</UI_NAME>
    <COLUMN NAME="HOME_LOCATION" TYPE="STRING" TYPE_FORMAT="1024">Install Location</COLUMN>
    <COLUMN NAME="OUI_HOME_NAME" TYPE="STRING" TYPE_FORMAT="256">OUI Home Name</COLUMN>
    <COLUMN NAME="OUI_HOME_GUID" TYPE="STRING" TYPE_FORMAT="32">OUI Home GUID</COLUMN>
    <COLUMN NAME="HOME_TYPE" TYPE="STRING" TYPE_FORMAT="1">Home Type</COLUMN>
    <COLUMN NAME="HOME_POINTER" TYPE="STRING" TYPE_FORMAT="1024">Home Pointer</COLUMN>
    <COLUMN NAME="IS_CLONABLE" TYPE="NUMBER" TYPE_FORMAT="1">Is Clonable</COLUMN>
    <COLUMN NAME="IS_CRS" TYPE="NUMBER" TYPE_FORMAT="1">Is CRS</COLUMN>
    <COLUMN NAME="ARU_ID" TYPE="NUMBER" TYPE_FORMAT="10">ARU ID of the Oracle Home</COLUMN>
    <COLUMN NAME="HOME_SIZE" TYPE="NUMBER" TYPE_FORMAT="10">Size of Oracle Home (KB)</COLUMN>
  </TABLE>
  <TABLE NAME="EM_ECM_OH_DEP_HOMES">
    <UI_NAME>Dependee Oracle Homes</UI_NAME>
    <COLUMN NAME="DEP_HOME_LOCATION" TYPE="STRING" TYPE_FORMAT="1024" IS_KEY="Y">Dependee Home Location</COLUMN>
  </TABLE>
  <TABLE NAME="EM_ECM_OH_COMPONENT">
    <UI_NAME>Components installed in Oracle Home</UI_NAME>
    <COLUMN NAME="COMPONENT_NAME" TYPE="STRING" TYPE_FORMAT="128" IS_KEY="Y">Component Name</COLUMN>
    <COLUMN NAME="COMPONENT_VERSION" TYPE="STRING" TYPE_FORMAT="64" IS_KEY="Y">Base Version of Component</COLUMN>
    <COLUMN NAME="CURRENT_VERSION" TYPE="STRING" TYPE_FORMAT="64">Current Version of the Component</COLUMN>
    <COLUMN NAME="INSTALL_TIME" TYPE="TIMESTAMP" >Install Time</COLUMN>
    <COLUMN NAME="IS_TOP_LEVEL" TYPE="NUMBER" TYPE_FORMAT="1">Is a top level Component</COLUMN>
    <COLUMN NAME="EXTERNAL_NAME" TYPE="STRING" TYPE_FORMAT="128">External name</COLUMN>
    <COLUMN NAME="DESCRIPTION" TYPE="STRING" TYPE_FORMAT="1024">Description</COLUMN>
    <COLUMN NAME="LANGUAGES" TYPE="STRING" TYPE_FORMAT="1024" >Languages</COLUMN>
    <COLUMN NAME="INSTALLED_LOCATION" TYPE="STRING" TYPE_FORMAT="1024">Installed Location</COLUMN>
    <COLUMN NAME="INSTALLER_VERSION" TYPE="STRING" TYPE_FORMAT="64">Installer Version</COLUMN>
    <COLUMN NAME="MIN_DEINSTALLER_VERSION" TYPE="STRING" TYPE_FORMAT="64">Minimum Deinstaller Version</COLUMN>
      <TABLE NAME="EM_ECM_OH_COMP_INST_TYPE">
        <UI_NAME>Install Types of Components</UI_NAME>
        <COLUMN NAME="NAME_ID" TYPE="STRING" TYPE_FORMAT="128" IS_KEY="Y">Install Type Name ID</COLUMN>
        <COLUMN NAME="INSTALL_TYPE_NAME" TYPE="STRING" TYPE_FORMAT="128" >Install Type Name</COLUMN>
        <COLUMN NAME="DESC_ID" TYPE="STRING" TYPE_FORMAT="128">Install Type Description</COLUMN>
      </TABLE>
  </TABLE>
  </METADATA>
</METADATAS>
注意:
このファイルの情報を使用して、ターゲット・タイプのメタデータ・ファイルにメトリックを定義します。詳細は、「標準収集メトリックおよびRAWメトリックの変更」を参照してください。
構成メタデータXMLファイルを完成させたら、プラグイン・ステージング・ディレクトリ内の次のディレクトリにファイルを保存します。
oms/metadata/snapshotlive
プラグイン・ステージング・ディレクトリに保存した構成メタデータ・ファイルは、プラグイン・デプロイメント時に自動登録できます。
プラグイン・ステージング・ディレクトリまたはプラグイン・デプロイメントの詳細は、「プラグインの検証、パッケージ化およびデプロイ」を参照してください。
構成メタデータXMLファイルが完了したら、構成管理フレームワークに登録する必要があります。構成メタデータXMLファイルは、プラグイン・ステージ・ディレクトリのoms/metadata/snapshotliveディレクトリに配置する必要があります。プラグインのインストールまたはアップグレード時に登録は自動的に実行され、必要なスキーマ・オブジェクトが作成されて構成メタデータが構成管理フレームワークに登録されます。プラグイン・ステージング・ディレクトリおよび登録の詳細は、「プラグインの検証、パッケージ化およびデプロイ」を参照してください。 
XML専用プラグインの開発時に登録サービスを手動で実行するには、次のコマンドを入力します。
emctl register oms metadata -sysman_pwdsysman password-pluginIdplugin ID-service LiveSnapshotRegistration -filesnapshot metadata XML file
注意: このコマンドを実行する前に、管理リポジトリにプラグインをインポートする必要があります。
plugin IDは、スナップショット・メタデータ・ターゲット・タイプが属しているプラグインのIDです。LiveSnapshotRegistrationは、構成管理スキーマ・オブジェクトを作成および更新し、構成メタデータを登録するメタデータ・サービスです。 
このコマンドは、開発環境内のSYSMAN資格証明を使用して、スナップショット構成ファイル(snapshot metadata XML file)を登録します。
構成管理は、追加ファイルを生成するためにオプションで実行できる次のユーティリティを提供します。
EDK_DIR/bin/empdk generate_metadata_resource -stage_dirplugin_stage-service LiveSnapshotRegistration -input_dirinput directory[-out_diroutput directory] [-file_extensionlist of file extensions/suffixes] [-debugdebug file name]
詳細は次のとおりです。
EDK_DIR: EDKパッケージが解凍されるディレクトリ(詳細は、「拡張開発キット(EDK)のインストール」を参照してください)。
plugin_stage: プラグインのステージング・ディレクトリ(詳細は、「プラグインのステージング」を参照してください)。
input directory: 構成メタデータXMLファイルを含むディレクトリ。
output directory: 生成されたリソース・ファイルを含むディレクトリ。指定されていない場合、リソース・ファイルは現在のディレクトリに生成されます。
list of file extensions/suffixes: リソース・ファイルのファイル拡張子または接尾辞のカンマ区切りリスト。指定されていない場合、サポートされるすべてのリソース・ファイルは出力ディレクトリに生成されます。
debug file name: デバッグ情報を含んだファイル。指定されていない場合、デバッグ・ログ・ファイル(createplugin.logtime)が出力ディレクトリに作成され、警告およびエラー・メッセージのみを格納します。
入力ディレクトリ内の各構成メタデータXMLファイルの場合、指定したリソース・ファイルは、ファイル名ecm_metadata_xml_file_nameを接頭辞に持ち、対応する次のサポートされる接尾辞を持つ出力ディレクトリに生成されます。
	.dlf 
file_name.dlfは、スナップショット・タイプ名、表名および列名の翻訳用ファイルです。生成されたDLFファイルとその翻訳済バージョンは、プラグインのplugin_stage/oms/rsc/ecmディレクトリに配置されます。
_metrix.xml、_collection.xml
file_name_metric.xmlおよびfile_name_collection.xmlは管理エージェント側統合の開始テンプレートとして使用できます。詳細は、「標準収集メトリックおよびRAWメトリックの変更」を参照してください。
データ・ロード形式(DLF)翻訳ファイルは、プラグイン・メタデータ・ファイル内の表示文字列がUIにエンド・ユーザーの言語で表示されるよう、その国際化をサポートするために使用されます。通常は、元の(英語などの) DLFファイルを翻訳者に提供し、翻訳者が他のロケール用に同様のファイルを作成します。このようなファイルはすべて、プラグインのインストール時に管理リポジトリにロードされます。
注意:
DLFファイルの生成はオプションであり、必要になるのは翻訳が必要な場合のみです。
スナップショット・タイプ名、表および列名の翻訳用にDLFファイルを生成するには、次のコマンドを実行します。
$ORACLE_HOME/emcore/pdk/partner/bin/empdk generate_metadata_resource -stage_dirstaging directory-service LiveSnapshotRegistration -input_dirinput directory containing snapshot metadata XML file-file_extensionextension to use for generated DLF files-out_diroutput directory to which to generate the DLF files[-debugdebug output file]
生成されたDLFファイルと対応する翻訳版は、プラグインの次のディレクトリに配置する必要があります。
plugin_stage/oms/rsc/ecm
各DLFファイルに次の内容を手動で追加する必要があります。
<table xml:lang="en" name="MGMT_MESSAGES"> <lookup-key> <column name="MESSAGE_ID"/> <column name="SUBSYSTEM"/> <column name="LANGUAGE_CODE"/> <column name="COUNTRY_CODE"/> </lookup-key> <columns> <column name="MESSAGE_ID" type="string" maxsize="256"/> <column name="SUBSYSTEM" type="string" maxsize="64"/> <column name="LANGUAGE_CODE" type="string" language="%l"/> <column name="COUNTRY_CODE" type="string" language="%Cs"/> <column name="MESSAGE" type="string" maxsize="1000" translate="yes"/> </columns> <dataset> GENERATED FILE CONTENT </dataset> </table>
注意:
顧客にメタデータの新しいバージョンをリリースするたびに、整数のメタデータ・バージョン(VER属性)を増分する必要があります。バージョンは、ECM XMLメタデータ・ファイル(METADATA要素内のVER属性)および対応するエージェント収集ファイル内で増分する必要があります。
VER属性の詳細は、表7-1を参照してください。
既存のスナップショット・メタデータをアップグレードする場合、次の変更がサポートされます。
新規表
新しい非キー列(これらは以前の既存の列の後に表示される必要があります)
新しい索引リスト(以前のあらゆる索引を上書きします)
STRING型列の長さの増加
UI_IGNORE、COMPARE_IGNORE、COMPARE_UI_IGNORE、HISTORY_IGNORE、HISTORY_UI_IGNOREおよびUI_NAMEの各属性の値
注意:
キー列は追加、削除不可
STRING以外の列書式は変更不可
STRING列の長さは増加のみ可能
新規表は、既存の表の親として追加不可
表または列は既存のスナップショット・メタデータから削除不可
次のメタデータを例にとります。
例: オリジナルのメタデータ定義
<METADATAS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <METADATA VER="1"
    SNAP_TYPE="sn_dbconfig"
    TARGET_TYPE="sn_oracle_database"
    UI_IGNORE="Y"
    HISTORY_IGNORE="N"
    COMPARE_IGNORE="Y"
    COLLECTION_GROUP="COL_GRP_0">
  <METADATA_UI_NAME>Database Configuration</METADATA_UI_NAME>
  <TABLE NAME="TABLESPACES" DATA_SOURCE="R">
    <UI_NAME>Tablespaces</UI_NAME>
    <COLUMN NAME="TABLESPACE_NAME" TYPE="STRING" TYPE_FORMAT="30"
      IS_KEY="Y">Tablespace Name</COLUMN>
    <COLUMN NAME="SIZE" TYPE="NUMBER">Size</COLUMN>
    <COLUMN NAME="STATUS" TYPE="STRING" TYPE_FORMAT="10">Status</COLUMN>
    <TABLE NAME="DATAFILES">
      <UI_NAME>Datafiles</UI_NAME>
      <COLUMN NAME="FILE_NAME" TYPE="STRING" TYPE_FORMAT="1024" 
        IS_KEY="Y">File Name</COLUMN>
      <COLUMN NAME="FILE_SIZE" TYPE="NUMBER" HISTORY_IGNORE="Y">Size</COLUMN>
      <COLUMN NAME="STATUS" TYPE="STRING" TYPE_FORMAT="9">Status</COLUMN>
    </TABLE>
  </TABLE>
 </METADATA>
</METADATAS>
次の例は、前述の例で説明したメタデータ定義に対するアップグレードを示しています。変更箇所は太字で強調表示されています。
例: アップグレードされたメタデータ定義
<METADATAS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <METADATA VER="2" SNAP_TYPE="sn_dbconfig" TARGET_TYPE="sn_oracle_database" UI_IGNORE="Y" HISTORY_IGNORE="N" COMPARE_IGNORE="Y" COLLECTION_GROUP="COL_GRP_0"> <METADATA_UI_NAME>Database Configuration</METADATA_UI_NAME> <TABLE NAME="TABLESPACES" DATA_SOURCE="R"> <UI_NAME>Tablespaces</UI_NAME> <COLUMN NAME="TABLESPACE_NAME" TYPE="STRING" TYPE_FORMAT="30" IS_KEY="Y">Tablespace Name</COLUMN> <COLUMN NAME="SIZE" TYPE="NUMBER">Size</COLUMN> <COLUMN NAME="STATUS" TYPE="STRING" TYPE_FORMAT="10">Status</COLUMN> <TABLE NAME="DATAFILES"> <UI_NAME>Datafiles</UI_NAME> <COLUMN NAME="FILE_NAME" TYPE="STRING" TYPE_FORMAT="1024" IS_KEY="Y">File Name</COLUMN> <COLUMN NAME="FILE_SIZE" TYPE="NUMBER" HISTORY_IGNORE="Y">Size</COLUMN> <COLUMN NAME="STATUS" TYPE="STRING" TYPE_FORMAT="10">Status</COLUMN><COLUMN NAME="DESC" TYPE="STRING" TYPE_FORMAT="128">Status</COLUMN></TABLE> </TABLE><TABLE NAME="TABLESPACES_1" DATA_SOURCE="R" ><UI_NAME>Tablespaces_1</UI_NAME><COLUMN NAME="TABLESPACE_NAME" TYPE="STRING" TYPE_FORMAT="30"IS_KEY="Y">Tablespace Name</COLUMN><COLUMN NAME="SIZE" TYPE="NUMBER">Size</COLUMN><COLUMN NAME="STATUS" TYPE="STRING" TYPE_FORMAT="10">Status</COLUMN><COLUMN NAME="NOTES" TYPE="STRING" TYPE_FORMAT="128">Status</COLUMN><TABLE NAME="DATAFILES_1"><UI_NAME>Datafiles_1</UI_NAME><COLUMN NAME="FILE_NAME" TYPE="STRING" TYPE_FORMAT="1024"IS_KEY="Y">File Name</COLUMN><COLUMN NAME="FILE_SIZE" TYPE="NUMBER" HISTORY_IGNORE="Y">Size</COLUMN><COLUMN NAME="STATUS" TYPE="STRING" TYPE_FORMAT="10">Status</COLUMN></TABLE></TABLE></METADATA> </METADATAS>
古いリリースのEnterprise Managerでは、METADATA要素でDROP_EXISTING_DATA属性を使用できましたが、もうサポートされていないため削除する必要があります。
ECMメタデータに非下位互換性の変更を持たせる必要がある場合は、新しいスナップショット・タイプを作成する必要があります(これは古いスナップショット・タイプとは互換性がありません)。ECMは下位互換性のある変更のみをサポートしています。
エンタープライズ構成管理データは、通常のメトリック、収集、および管理エージェントのメカニズムで収集されます。このデータは、次の変更とともに通常のRAWメトリックを介して収集されます。
構成スナップショット情報を収集するすべてのMetricおよびCollectionItemタグにCONFIG="TRUE"属性を追加します。
CollectionItem NAME属性がスナップショット・タイプ名(たとえば、oracle_home_config)と同じであることを確認します。
データ収集のスケジュールには、1日当たり1回を超える頻度の間隔を指定しないでください。
注意:
いかなるRAWメトリック表記述子にも、ECM_SNAPSHOT_IDを列として含めないようにします。
子表に祖先キー列が含まれる場合、階層的な一連の表を一度に1つずつ移入することができます。収集時に階層関係を表現する必要はありません。収集項目では、親表を、対応する子表の前にリストする必要があります。
次の例は、「構成管理スナップショット・メタデータ要素の概要」の構成メタデータXMLファイルの例で定義したEM_ECM_OH_HOME_INFO表の、ターゲット・タイプ・メタデータXMLファイルにおけるメトリック定義を示しています。太字フォントで強調表示した情報は、構成メタデータXMLファイルによって提供されます。
注意:
これは単なる例であり、状況によっては構成固有でない追加の管理エージェント属性が必要になる場合もあります。
ターゲット・タイプ・メタデータXMLファイルの詳細は、「ターゲット・タイプ・メタデータ・ファイルの作成」を参照してください。
例: メトリックの定義
<Metric NAME="EM_ECM_OH_HOME_INFO" TYPE="RAW" CONFIG="TRUE"> <Display> <Label NLSID="…">Home Info</Label> </Display> <TableDescriptor TABLE_NAME="EM_ECM_OH_HOME_INFO"> <ColumnDescriptor NAME="HomeLocation" COLUMN_NAME="HOME_LOCATION" TYPE="S"> <Display> <Label NLSID="…">Install Location</Label> </Display> </ColumnDescriptor> <ColumnDescriptor NAME="OuiHomeName" COLUMN_NAME="OUI_HOME_NAME" TYPE="S"> <Display> <Label NLSID="…">OUI Home Name</Label> </Display> </ColumnDescriptor> <ColumnDescriptor NAME="OuiHomeGuid" COLUMN_NAME="OUI_HOME_GUID" TYPE="S"> <Display> <Label NLSID="…">OUI Home GUID</Label> </Display> </ColumnDescriptor> <ColumnDescriptor NAME="HomeType" COLUMN_NAME="HOME_TYPE" TYPE="S"> <Display> <Label NLSID="…">Home Type</Label> </Display> </ColumnDescriptor> <ColumnDescriptor NAME="HomePointer" COLUMN_NAME="HOME_POINTER" TYPE="S"> <Display> <Label NLSID="…">Home Pointer</Label> </Display> </ColumnDescriptor> <ColumnDescriptor NAME="IsClonable" COLUMN_NAME="IS_CLONABLE" TYPE="N"> <Display> <Label NLSID="…">Is Clonable</Label> </Display> </ColumnDescriptor> <ColumnDescriptor NAME="IsCrs" COLUMN_NAME="IS_CRS" TYPE="N"> <Display> <Label NLSID="…">Is CRS</Label> </Display> </ColumnDescriptor> <ColumnDescriptor NAME="AruId" COLUMN_NAME="ARU_ID" TYPE="N"> <Display> <Label NLSID="…">ARU ID of the Oracle Home</Label> </Display> </ColumnDescriptor> <ColumnDescriptor NAME="HomeSize" COLUMN_NAME="HOME_SIZE" TYPE="N"> <Display> <Label NLSID="…">Size of Oracle Home (KB)</Label> </Display> </ColumnDescriptor> </TableDescriptor> <!-- TODO : EDIT: Edit the QueryDescriptor Element Template as required --> <QueryDescriptor FETCHLET_ID="" AGENT_MODE=""> <Property NAME="" SCOPE=""></Property> </QueryDescriptor> </Metric>
次の例は、前述の例で定義したメトリックのデフォルトの収集メタデータ・ファイルにおけるメトリック収集の定義を示しています。太字フォントで強調表示した情報は、「構成管理スナップショット・メタデータ要素の概要」の構成メタデータXMLファイルの例で提供されています。
デフォルトの収集メタデータ・ファイルの詳細は、「デフォルトの収集ファイルの作成」を参照してください。
例: メトリック収集の定義
<CollectionItem NAME="oracle_home_config_test" CONFIG="TRUE">
        <Schedule OFFSET_TYPE="INCREMENTAL">
          <!-- Configuration Collection is done at most once every 24 Hours -->
            <IntervalSchedule INTERVAL="24" TIME_UNIT="Hr" />
        </Schedule>
        <MetricColl NAME="EM_ECM_OH_HOME_INFO" />
        <MetricColl NAME="EM_ECM_OH_DEP_HOMES" />
        <MetricColl NAME="EM_ECM_OH_CRS_NODES" />
        <MetricColl NAME="EM_ECM_OH_CLONE_PROPS" />
        <MetricColl NAME="EM_ECM_OH_COMPONENT" />
        <MetricColl NAME="EM_ECM_OH_COMP_INST_TYPE" />
        <MetricColl NAME="EM_ECM_OH_COMP_DEP_RULE" />
    </CollectionItem>
プラグインの場合、oparファイル内のomsディレクトリとagentディレクトリの両方で、メタデータ・ファイルとdefault_collection XMLファイルを忘れずに含めてください。
構成収集に関する問題がある場合、次の操作を行います。
スナップショット・タイプがMGMT_ECM_SNAPSHOT_METADATA表に登録されていることを確認します。
select * from mgmt_ecm_snapshot_metadata where target_type =your_target_typeand snapshot_type =your_snapshot_type;
2つの行が表示されるはずです。そうでない場合、次のディレクトリにあるMRSの通常のログ・ファイルで、登録時にエラーがなかったか確認します。
$ORACLE_HOME/cfgtoollogs/pluginca
対応するメトリックを定義して、収集が開始され、データが蓄積していることを検証します。UIで最新の収集を見ている場合、まずメタデータのUI_IGNOREフラグが、チェックしているデータのYでないことを確認してください。収集が発生していない場合、次の事項を確認します。
収集項目名がスナップショット・タイプと同じで、収集項目とそのすべてのメトリックの両方に対してCONFIG="TRUE"が指定されていることを確認します。
詳細は、「標準収集メトリックおよびRAWメトリックの変更」を参照してください。
メトリックがRAWメトリックとして定義されており、表記述子がECM表に対応していることを確認します。
収集が管理リポジトリに到着しているが、最新のものとしては未更新かどうかを確認します。
MGMT_ECM_GEN_SNAPSHOT表で、ターゲットとスナップショット・タイプのis_currentステータスを確認します。行がない場合、収集は実行されていません。IS_CURRENTフラグはYに設定され、データの最新のスナップショットであることを示しているはずです。内部の目的のために行のIS_CURRENT値が他の値に設定されている可能性もあります。たとえば、値がYの行がなく、IS_CURRENT値がTとDになっている場合、スナップショットの読込みが開始されているが完了していないことを示します。
エージェント・ターゲット・タイプ・メタデータ・ファイルとdefault_collection XMLファイルでMETA_VERの値を確認します。
開発中に新しいメトリックまたは収集項目を追加した場合、これらの新しいエントリの登録を成功させるために、これらのファイルでMETA_VERの増加が必要になることがあります。META_VER値に関して、Enterprise Management開発用の最新の指示を確認します。
たとえば、開発時に変更を登録するために、バージョンを増やす必要があることがあります。1リリース当たりバージョンを1つのみ増やす必要があります。したがって、コードをマージする場合、現在のリリースについてすでに増分したときは、META_VERを以前と同じにする必要が生じることがあります。
収集から見た場合、新しいターゲット・タイプ・メタデータ・ファイルとdefault_collection XMLファイルの両方を正常に登録し、最新のファイルを使用してエージェントを再起動してください。次のコマンドを使用すると、ターゲット・タイプ・メタデータ・ファイルおよびdefault_collection XMLファイルを登録できます。
emctl register oms metadata -service targetType -filetarget type XML filename[-core | -pluginIdPlugin Id] [ sysman_pwd "sysman password"]
emctl register oms metadata -service default_collection -filedefault collection XML filename[-core | -pluginIdPlugin Id] [ sysman_pwd "sysman password"]
テストしている特定のターゲット・インスタンスの場合、最新のMETA_VERに基づいている最新の収集済データを確認するために、META_VERが、ロード済スナップショット・タイプのMETA_VERと一致することを確認してください。
ターゲット・インスタンスのカテゴリ・プロパティがValid-Ifと一致するかどうかを確認するために、ターゲット・タイプ、スナップショット・タイプおよびメトリックに対して定義されているValid-Ifを確認します。一致しない場合、構成はこのようなターゲットに適用されないため、ターゲットは対応するデータを示しません。
OMSリポジトリで、スナップショット・タイプのmgmt_system_error_log表およびemoms_pbs.trc/logを確認します。
次のコマンドを使用して、mgmt_metric_errors表を調べることもできます。
select * from mgmt_metric_errors where target_guid = '<your target guid>' and coll_name = '<your snapshot type>'
エージェントで、エージェント・ログ・ディレクトリにあるgcagent.logファイルや他のファイルに同じ文字列がないか確認します。
これで役に立たない場合は、エージェント・バックアップ・ファイル機能を有効にします(backupUploadedFiles=trueをemd.propertiesに追加してエージェントを再起動します)。
次の場所でスナップショット・タイプを検索し、エージェントがデータをOMSに送信していることを確認し、送信しているものを確かめます。
agentStateDir/sysman/emd/upload/upload/succbkup/
発生する可能性のある問題の1つは、構成差分機能に関連しています。
なんらかの理由で構成がロードされていないのにエージェントが自らロードしたと考えている場合、かつ、この時点から構成が変更されていない場合、エージェントは短いnothing-changedファイル・タイプを送信し続け、ローダーはこのファイル・タイプを無視し続けます。この問題を解決する(デバッグ時にあり得る問題として除去する)には、次のコマンドを実行して(カンマの前後はスペースなし)、エージェント・ログから構成を取り除きます。
emctl clearstate agent -incrementalconfigtargetName,targetType
その次に、収集を開始して、次のコマンドを実行します。
emctl control agent runCollectiontargetName:targetTypesnapshot type
次に例を示します。
emctl clearstate agent -incrementalconfig myOracleHomeTargetName,oracle_home emctl control agent runCollection myOracleHomeTargetName:oracle_home oracle_home_config
Oracle Management Serviceおよび管理リポジトリで、スナップショット・タイプに対応するMGMT_SYSTEM_ERROR_LOG表とemoms_pbs.trcファイルを確認します。次のように、MGMT_METRIC_ERRORS表も確認します。
管理エージェントで、エージェント・ログ・ディレクトリにあるgcagent.logファイルや他のファイルに同じ文字列がないか確認します。
まだ問題が残る場合、管理エージェントのバックアップ・ファイル機能をオンにします。
emd.propertiesファイルを開きます。
次の行をファイルに追加します。
backupUploadedFiles=true
管理エージェントを再起動します。
AGENT_HOME/agent/bin/emctl stop agentAGENT_HOME/agent/bin/emctl start agent
前のコマンドで、AGENT_HOME は管理エージェントのホーム・ディレクトリを表します。
次のディレクトリでスナップショット・タイプを検索し、管理エージェントがデータをOMSに送信していることを確認します。
agentStateDir/sysman/emd/upload/upload/succbkup/
構成差分機能に関連する問題が発生する可能性があります。構成が読み込まれず、管理エージェントが構成のロードを中断した場合(構成が変更されていない場合)、管理エージェントは、何も変更されておらず、ローダーがファイルを引き続き無視することを示す短いファイルを送信します。
この可能な問題を消去または除去するには、次のようにして管理エージェント・ログを消去します。
emctl clearstate agent -incrementalconfigtargetName,targetType
次に例を示します。
emctl clearstate agent -incrementalconfig myOracleHomeTargetName,oracle_home
その次に、収集を開始して、次のコマンドを実行します。
emctl control agent runCollectiontargetName:targetTypesnapshot_type
次に例を示します。
emctl control agent runCollection myOracleHomeTargetName:oracle_home oracle_home_config
Cloud Controlコンソールから履歴機能と比較機能をテストし、結果がどのように表示されるか、またはフラグが変更されていないか確認します。
Enterprise Manager Cloud Controlから「ターゲット」を選択し、必要なターゲットを選択します。
ターゲットを右クリックして「構成」を選択し、「履歴」を選択して構成履歴を表示するか、「比較」を選択して比較機能をテストします。
注意:
これらのページの詳細は、Cloud Controlのオンライン・ヘルプを参照してください。
構成データが収集されると、Enterprise Managerによって、エンドユーザーが構成インベントリ・サマリーを確認するのに使用できる汎用的なUIアプリケーションが提供されます。この汎用アプリケーションに加えて、Oracleでは、独自の表示方法選択肢を一般的な「インベントリおよび使用状況」リージョンに追加できるXMLインタフェースをプラグイン開発者に提供しています。
表示方法選択肢を追加するには、次の手順を実行します。
「インベントリ選択肢XMLメタデータ・ファイルのサンプル」では、インベントリ選択肢XMLの例を示します。
次の各項では、XMLファイルの一部のセクションについて説明します。
インベントリ選択肢XMLを作成する場合は、次のようにルート要素を含めます。
<InventoryChoice iname="HOSTS" display_name="Hosts">
表7-2 InventoryChoice要素
| 要素 | 説明 | 
|---|---|
| 
 | これは、XMLのルート要素です。カスタマイズを定義します。次の属性があります。 
 | 
このセクションでは次のパラメータがサポートされています(サポートされるパラメータ・タイプの完全なリストは、XSDのドキュメントを参照してください)。
Query id: バインドIDとしてShowByChoiceセクションで使用。
SHOW_BY: ロールアップ・タイプ
TARGET_NAME: ターゲット・コンテキストのターゲット名
TARGET_TYPE: ターゲット・コンテキストのターゲット・タイプ
MEMBER_TARGET_TYPE: グループ・ホームページのメンバー・ターゲット・タイプ・フィルタ
パラメータ・タイプは、XSDに記述されている事前定義済パラメータのタイプを表します。
このセクションでは、インベントリ選択肢を適用できるターゲット・タイプのリストを指定します。
<Applicable_Targettypes>
    	<!--Internal target type names -->
    <!--If it has to be shown for enterprise context, give it as "enterprise"-->
    		<TargetType>enterprise</TargetType>
    		<TargetType>composite</TargetType>
    		  <TargetType>generic_system</TargetType>
    		  <TargetType>all</TargetType>
</Applicable_Targettypes>
この表現は、リージョンがコンソール・ホームページ、グループ・ホームページまたはシステム・ホームページに統合されている場合にインベントリ選択肢を表示することを示しています。TargetTypeがallに設定されている場合は、デフォルトですべてのページのすべてのインベントリ・リージョンに表示されます。
このセクションでは、リージョンおよび詳細ページのマスター表にデータを移入するためのデータソースを指定します。
インベントリ選択肢ごとに、多数のロールアップSHOWBY選択肢を指定できます。通常、group by句のみが変わるため、同じデータソースを複数のShowBy選択肢に使用できます。ShowBy選択肢セクションの外側でSQL問合せを保持し、バインドIDを使用してShowBy選択肢セクション内で再利用することをお薦めします。これは、すべてのShowBy選択肢セクションでSQL問合せを繰り返さないようにするために役立ちます。
SQL問合せをデータソースとして使用できます。Master Dataセクションの一部として、With句を使用してエンタープライズ・コンテキストおよびターゲット・コンテキストに対する問合せを指定します。SQLによってShowBy選択肢に必要な列が返されます。
<Query id="HOSTS_INV_MASTER_QUERY">
<Enterprise_Ctx>
<Sql>
		                   		With InvQuery AS (SELECT name , base_version , vendor_name ,
		                        count(*) as num_hosts,…..
		                   		With InvQuery AS (SELECT name , base_version , vendor_name ,
		                        count(*) as num_hosts,…..
    			%GROUP_BY_SQL%
                </Sql>
	</Enterprise_Ctx>
	<!-- target context query -->
	<Target_Ctx>
    		<Sql>
			……
          </Sql>
<In_Parameters>
<Param position="1" type="TARGET_NAME"/>
…
</In_Parameters>
</Target_Ctx>
</Query>
%GROUP_BY_SQL%は、ShowByChoiceセクションで指定したSQLで置き換えられます。
このセクションでは、選択したマスター表の行のデータを表示する、詳細表の詳細ページのデータソースを指定します。このセクションでSQLリストを指定し、これをShowBy選択肢セクションで再利用できます。
詳細表のデータソースは、管理リポジトリ・ビューを使用したSQL問合せになります。データベース表は使用できません。管理リポジトリ・ビューの詳細は、『Enterprise Manager Cloud Control管理リポジトリ・ビュー・リファレンス』を参照してください。
書式はマスター表セクションと同じです。
詳細問合せでは、置換可能文字列%FILTER_FOR_MASTER_ROWS%を使用します。これは、フレームワーク別に、選択したマスター・キーの行と列で置換できます。
次に例を示します。
<Query id="HOSTS_DETAILS"> <Enterprise_Ctx> …… %FILTER_SELECT_FOR_MASTERROWS% </Enterprise_Ctx> </Query>
このセクションでは、ロールアップ・タイプのリストを示します。
ホストでは、プラットフォーム、バージョン、ベンダーなど様々なタイプ別にロールアップします。
たとえば、プラットフォームをロールアップする表現は次のとおりです。
<ShowByList>
    <ShowBy iname="Platform" display_name="Platform" default_selection="true">
この例の説明は、次のとおりです。
inameは、DLFファイルに定義されているNLSIDへのShowBy Nameマッピングを表します。
display_nameは、DLFファイルにinameのデータが見つからなかった場合のUI表示名を表します。
default_selection。このオプションをtrueに設定した場合、これは、「表示の分類」ドロップダウン・リストのデフォルトの選択値であることを示します。
<MasterTableData>
  <SqlQuery bindid="HOSTS_INV_MASTER_QUERY">
        <!-- Group by sql will replace %GROUP_BY_SQL% given in the main query -->
                <Group_By_Sql>
                      select name , patched, sum(num_hosts) as num_hosts from InvQuery %FILTERDRILLDOWNVALUES% group by name,patched order by name
                </Group_By_Sql>
                                </SqlQuery>
 </MasterTableData>
この例で、%FILTERDRILLDOWNVALUES%は、詳細ページのカウント・バーをクリックして多数のレベルにドリルダウンするときにブレッドクラムとして表示される様々な表示の分類の選択肢のスライスおよびダイス・ディメンションを、動的に追加するプレースホルダです。
たとえば、定義されている表示の分類の選択肢がプラットフォームとバージョンである場合、ユーザーはドリルダウンしてWindowsなどのプラットフォーム別にホストのバージョンを表示します。%FILTERDRILLDOWNVALUES%は、group by SQLのプレースホルダでplatform = 'Windows'に動的に置き換えられます。
Target_Ctx問合せは、ターゲット・コンテキスト内のデータをフィルタします。たとえば、インベントリ選択肢がグループ・ホームページに適用可能な場合、実行時のグループ・ターゲット・ホームページに表示されるときに、TARGET_NAMEにはグループ・ターゲット名が入力され、TARGET_TYPEにはグループ・ターゲットタイプが入力されます。target_ctx SQL問合せ内の適切な箇所でこれらの<In_Parameters>を使用して、グループ・コンテキスト・ページ内のフィルタ処理を行います。
UiColumnMappingタグは、UI列名をバックエンドSQL列名とマップします。また、列を表示するかどうかも指定します。
<UiColumnMapping id="name" backend_column="name" isKey="true" visible="true" uiColumn_nls_id="Platform"/> .....
NLS日付書式:
タイプ・オプションが日付として指定されている場合、次の例を参照してください。
<UiColumnMapping id="collection_time" backend_column="collection_time" isKey="false" visible="true" type="date" uiColumn_nls_id="hosts_collection_time"/>
UIフレームワークは、各国語サポート(NLS)ロケールに従ってフォーマットされます。
次の例は、インベントリ選択肢XMLメタデータ・ファイルのサンプルを示しています。
例: インベントリ選択肢XML
<?xml version="1.0" encoding="UTF-8" ?>
<InventoryChoice iname="SampleHostsInv" display_name="SampleHostsInv">
 <Applicable_Targettypes>
    <TargetType>all</TargetType>
    <TargetType>enterprise</TargetType>    
  </Applicable_Targettypes>
  <MasterData>
    <Query id="HOSTS_INV_MASTER_QUERY">
                
                <Enterprise_Ctx>
                
                    <Sql>
                            With InvQuery AS (
                select 
                            name, 
                            base_version,
                            vendor_name,
                            count(*) as num_hosts , 
                            decode(sum(num_patches) , 0 , ''No'',''Yes'') as patched
   from
                          (          
                            select os.name, os.name||'' ''||os.base_version as base_version, os.vendor_name,host,
                              ( select 
                                  count(*)  
                                from 
                                  MGMT$OS_PATCH_SUMMARY patch 
                                where 
                                  patch.host =os.host and 
                                  patch.target_guid = os.target_guid
                              ) as num_patches
                            from 
                              MGMT$OS_SUMMARY os
                          )m
                          
                          group by name,base_version,vendor_name
                          )
          
                %GROUP_BY_SQL%
                </Sql>
                </Enterprise_Ctx>
                <!-- target context query -->
                <Target_Ctx>
                    <Sql>
                With InvQuery AS (
 select 
           name, 
            base_version,
            vendor_name,
            count(*) as num_hosts ,
            decode(sum(num_patches) , 0 , ''No'',''Yes'') as patched 
          from
          (          
            select os.name, os.name||'' ''||os.base_version as base_version, os.vendor_name,host,
              ( select 
                  count(*)  
                from 
                  MGMT$OS_PATCH_SUMMARY patch 
                where 
                  patch.host =os.host and 
                  patch.target_guid = os.target_guid
              ) as num_patches
            from 
              MGMT$OS_SUMMARY os
            where os.snapshot_guid in
            (
            
              SELECT /*+ ORDERED */ ps.snapshot_guid
              FROM
              (
                select
                  unique t.host_name as hname
                FROM
                  mgmt$targets t,
                ( 
                 SELECT m.assoc_target_guid as mguid
                          FROM 
                            mgmt$target_flat_members  m,
                           .........
                          WHERE                             
                             
                            mem.AGGREGATE_TARGET_NAME = ? and
                            mem.aggregate_target_type= ? and
                            mem.member_target_type like ? and         
                ............................
                  ) lt1
                  WHERE
                    lt1.mguid = t.target_guid
              )lt,
             .................
                )
              )
               group by name, base_version, vendor_name                        
                )
          %GROUP_BY_SQL%    
                
                  </Sql>
                    <In_Parameters>
                    <!--Aggregate target name in which the inv choice data to be shown -->
                        <Param position="1" type="TARGET_NAME"/>
<!-- Aggregate target type -->
                        <Param position="2" type="TARGET_TYPE"/>
                        <Param position="3" type="MEMBER_TARGET_TYPE"/>
                         ........
                        
                        
                    </In_Parameters>
                </Target_Ctx>
            </Query>
        
  </MasterData>
  
  <DetailsData>
    <Query id="HOSTS_DETAILS">
                    
                    <Enterprise_Ctx>
                    
                        <Sql>
SELECT 
          hostname, 
          hwname, 
          name,
          base_version,
          update_level,
          address_length_in_bits,
          vendor_name,
          freq,
          mem,
          disk,
          cpu_count,
          distributor_version,
          physical_cpu_count,
          logical_cpu_count,
          last_collection_timestamp
        FROM
        (
                                
        SELECT 
          hostname, 
          hwname, 
          name,
          base_version,
          update_level,
          address_length_in_bits,
          vendor_name,
          freq,
          mem,
          disk,
          cpu_count,
          distributor_version,
          physical_cpu_count,
          logical_cpu_count,
          last_collection_timestamp
        FROM
        ( 
          SELECT 
            o.target_name as hostname, 
            system_config  || '' '' || MA as hwname, 
            o.name as name,
            o.name||'' ''||o.base_version as base_version,
            o.update_level,
            o.address_length_in_bits,
            o.vendor_name,
            hw.FREQ as freq,
            hw.MEM as mem,
            hw.DISK as disk,
            hw.CPU_COUNT ,  
            o.DISTRIBUTOR_VERSION ,
            hw.physical_cpu_count,
            hw.logical_cpu_count,
            o.LAST_COLLECTION_TIMESTAMP
          FROM             
              MGMT$OS_HW_SUMMARY  hw  ,  MGMT$OS_SUMMARY o
          WHERE
            hw.host_name = o.host and
            hw.target_guid = o.target_guid and
            hw.SNAPSHOT_GUID = o.SNAPSHOT_GUID
          )                    
          %FILTER_SELECT_FOR_MASTERROWS% )
          %FILTERDRILLDOWNVALUES%
                    </Sql>
                    </Enterprise_Ctx>
                    <!-- target context query -->
                    <Target_Ctx>
                        <Sql>
                   SELECT 
          hostname, 
          hwname, 
          name,
          base_version,
          update_level,
          address_length_in_bits,
          vendor_name,
          freq,
          mem,
          disk,
          cpu_count,
          distributor_version,
          physical_cpu_count,
          logical_cpu_count,
          last_collection_timestamp
          FROM
          (
                   SELECT UNIQUE
          hostname, 
          hwname, 
          name,
          base_version,
          update_level,
          address_length_in_bits,
          vendor_name,
          freq,
          mem,
          disk,
          cpu_count,
          distributor_version,
          physical_cpu_count,
          logical_cpu_count,
          last_collection_timestamp
          FROM
          (
            .....--provide the target context query here for filtering in composite target..
            ...
            
            
          ) hw_list  %FILTER_SELECT_FOR_MASTERROWS% order by hostname)
          %FILTERDRILLDOWNVALUES%
                    
                      </Sql>
                        <In_Parameters>                        
                  <Param position="1" type="TARGET_NAME"/>
                  <Param position="2" type="TARGET_TYPE"/>
                  <Param position="3" type="MEMBER_TARGET_TYPE"/>
.....................
                        </In_Parameters>
                    </Target_Ctx>
                </Query>
        
    
    
  </DetailsData>
 
 
  
  <ShowByList>
    <ShowBy iname="Platform" display_name="PLATFORM" default_selection="true">
      <MasterTableData>
        <SqlQuery bindid="HOSTS_INV_MASTER_QUERY">
                        
    <!-- Group by sql will replace %GROUP_BY_SQL% given in the main query -->
        <Group_By_Sql>
                  select name , patched, sum(num_hosts) as num_hosts from InvQuery %FILTERDRILLDOWNVALUES% group by name,patched order by name
            </Group_By_Sql>
              
                </SqlQuery>
        <UiColumnMapping id="Platform" backend_column="name" isKey="true" visible="true" uiColumn_nls_id="Platform"/>
        
        <UiColumnMapping id="num_hosts" backend_column="num_hosts" isKey="false" uiColumn_nls_id="Hosts" countColumn="true"/>
        <UiColumnMapping id="patched" backend_column="patched" isKey="false" uiColumn_nls_id="Patched"/>
         
      </MasterTableData>
      <DetailsTableData>
        <SqlQuery bindid="HOSTS_DETAILS"/>
            <UiColumnMapping id="Host Name" backend_column="hostname" isKey="true" visible="true" uiColumn_nls_id="Host Name"/>
        <UiColumnMapping id="Platform" backend_column="name" isKey="true" visible="true" uiColumn_nls_id="Platform"/>
        <UiColumnMapping id="Version" backend_column="base_version" isKey="true" visible="true" uiColumn_nls_id="Version"/>
        <UiColumnMapping id="Vendor" backend_column="vendor_name" isKey="true" visible="true" uiColumn_nls_id="Vendor"/>                
        <UiColumnMapping id="Hardware" backend_column="hwname" isKey="true" visible="true" uiColumn_nls_id="Hardware"/>
        <UiColumnMapping id="Update Level" backend_column="update_level" isKey="true" visible="true" uiColumn_nls_id="Update Level"/>       
        
        
      </DetailsTableData>
      
      
      
    </ShowBy>
    <ShowBy iname="Version" display_name="VERSION" default_selection="false">
          <MasterTableData>
            <SqlQuery bindid="HOSTS_INV_MASTER_QUERY">
                                 
            <!-- Group by sql will replace %GROUP_BY_SQL% given in the main query -->
                <Group_By_Sql>
                          select base_version , patched, sum(num_hosts) as num_hosts from InvQuery  %FILTERDRILLDOWNVALUES% group by base_version,patched order by base_version
                    </Group_By_Sql>
                      
                </SqlQuery>
        
            <UiColumnMapping id="Version" backend_column="base_version" isKey="true" visible="true" uiColumn_nls_id="Version"/>
            <UiColumnMapping id="num_hosts" backend_column="num_hosts" isKey="false" uiColumn_nls_id="Hosts" countColumn="true"/>
            <UiColumnMapping id="patched" backend_column="patched" isKey="false" uiColumn_nls_id="Patched"/>
            </MasterTableData>
          <DetailsTableData>
            <SqlQuery bindid="HOSTS_DETAILS"/>
                    <UiColumnMapping id="Host Name" backend_column="hostname" isKey="true" visible="true" uiColumn_nls_id="Host Name"/>
                <UiColumnMapping id="Platform" backend_column="name" isKey="true" visible="true" uiColumn_nls_id="Platform"/>
                <UiColumnMapping id="Version" backend_column="base_version" isKey="true" visible="true" uiColumn_nls_id="Version"/>
                <UiColumnMapping id="Vendor" backend_column="vendor_name" isKey="true" visible="true" uiColumn_nls_id="Vendor"/>                
                <UiColumnMapping id="Hardware" backend_column="hwname" isKey="true" visible="true" uiColumn_nls_id="Hardware"/>
                <UiColumnMapping id="Update Level" backend_column="update_level" isKey="true" visible="true" uiColumn_nls_id="Update Level"/>
            
          </DetailsTableData>
         
    </ShowBy>
    
    <ShowBy iname="Vendor" display_name="VENDOR" default_selection="false">
              <MasterTableData>
                <SqlQuery bindid="HOSTS_INV_MASTER_QUERY">
                                        
                    <!-- Group by sql will replace %GROUP_BY_SQL% given in the main query -->
                        <Group_By_Sql>
                                  select vendor_name, patched, sum(num_hosts) as num_hosts from InvQuery %FILTERDRILLDOWNVALUES%  group by vendor_name,patched order by vendor_name
                            </Group_By_Sql>
                              
                </SqlQuery>
                <UiColumnMapping id="Vendor" backend_column="vendor_name" isKey="true" visible="true" uiColumn_nls_id="Vendor"/>
                
                <UiColumnMapping id="num_hosts" backend_column="num_hosts" isKey="false" uiColumn_nls_id="Hosts" countColumn="true"/>
                <UiColumnMapping id="patched" backend_column="patched" isKey="false" uiColumn_nls_id="Patched"/>
                 
              </MasterTableData>
              <DetailsTableData>
                <SqlQuery bindid="HOSTS_DETAILS"/>
                <UiColumnMapping id="Host Name" backend_column="hostname" isKey="true" visible="true" uiColumn_nls_id="Host Name"/>
                   <UiColumnMapping id="Platform" backend_column="name" isKey="true" visible="true" uiColumn_nls_id="Platform"/>
                   <UiColumnMapping id="Version" backend_column="base_version" isKey="true" visible="true" uiColumn_nls_id="Version"/>
                   <UiColumnMapping id="Vendor" backend_column="vendor_name" isKey="true" visible="true" uiColumn_nls_id="Vendor"/>                
                   <UiColumnMapping id="Hardware" backend_column="hwname" isKey="true" visible="true" uiColumn_nls_id="Hardware"/>
                   <UiColumnMapping id="Update Level" backend_column="update_level" isKey="true" visible="true" uiColumn_nls_id="Update Level"/>
                                
              </DetailsTableData>
            
              
    </ShowBy>
  </ShowByList>
</InventoryChoice>