マルチテナンシーで使用するユーティリティ

この記事には、以下のトピックが含まれています。
casm173
この記事には、以下のトピックが含まれています。
本セクションでは、マルチテナンシー環境を管理するために使用するユーティリティについて説明します。
注:
必須のパラメータは「{}」で囲まれ、オプションのパラメータは「[]」で囲まれます。
pdm_buildtenant
- 別のオブジェクトからのテナントの作成
pdm_buildtenant
ユーティリティは、別のオブジェクトからテナントを作成する場合に使用します。 すでにデータ パーティションおよび別の CA SDM オブジェクトを使用して、マルチテナンシーで提供されるようになった機能の一部を実現している場合があります。 実装をマルチテナンシーに変換するには、最初に pdm_buildtenant を使用して、以前に使用していたオブジェクトのデータを新しいテナント オブジェクトにマップします。
pdm_buildtenant を実行する前に、サービス プロバイダを設定する
必要があります
このセクションでは、以前テナントに似た情報を保持するために使用されていたオブジェクトを、「事前テナント」オブジェクトと呼びます。 このような要件を持つサイトの大部分では、org(組織)オブジェクトがテナント前オブジェクトとなりますが、どのテナント前オブジェクトであっても以下のアプローチを使用できます。
pdm_buildtenant ユーティリティでは、テナント オブジェクトがテナント前オブジェクトから構築されます。 このアプリケーションでは、テナント前オブジェクトごとに新しいテナントが作成され、新しいテナントを参照するようにテナント前オブジェクトのテナント属性が設定されます。 このユーティリティの構文は以下のとおりです。
pdm_buildtenant [-h] | [-f [configuration_file]
  • -f configuration_file
    (オプション)テナント前オブジェクトからテナントを作成する場合のルールを指定する構成ファイルの場所を指定します。 この引数が含まれていない場合、pdm_build テナントでは、$NX_ROOT/site/cfg ディレクトリの構成ファイルが使用されます。 このファイルでは、テナント前オブジェクトが org であることが想定されています。org でない場合は、pdm_buildtenant を使用する前に構成ファイルを編集する
    必要があります
    buildtenant.xml を
    $NX_ROOT/site/cfg
    ディレクトリにコピーする必要があります。 また、buildtenant.xsd は buildtenant.xml と同じディレクトリにある必要があります。そうでない場合、エラーが表示されます。 製品のインストール時に buildtenant.xsd は $NX_ROOT/site/cfg に格納されるため、このファイルをコピーする必要はありません。
  • -h
    pdm_buildtenant の使用情報を表示します。
構成ファイルの形式を以下に示します。
<?xml version="1.0" encoding="utf-8" ?> <BuildTenant> <Object from="MajicObjectName"> <Attribute from="sourceAttribute1" to="tenantAttribute1" /> <Attribute from="sourceAttribute2" to="tenantAttribute2" /> </Object> </BuildTenant>
Object タグの
from
属性は、事前テナント オブジェクトを示しています。 各 Attribute タグは、テナント前オブジェクトから新しいテナントの属性にコピーされる属性を識別します。
UNIX でのマルチテナンシーの実装では、pdm_settenant および pdm_buildtenant ユーティリティを実行する前に、pdm_task を実行して、LIBPATH をエクスポートする
必要があります
。 これらのユーティリティを実行する前に、pdm_task を実行しないと、システム エラーが発生します。 ../pdm_task を使用してコマンドを実行します。
pdm_clean_attachments - テナント データ インポート後の重複する添付ファイルの削除
テナント データをインポートした後、不要な添付ファイルを削除する必要があります。 このユーティリティの構文は以下のとおりです。
pdm_perl pdm_clean_attachments.pl [-h] | [-n repository_name] | [-S|-K]
  • -h
    コマンドライン ヘルプを表示するように指定します。
  • -n
    repository_name
    処理するリポジトリの名前を指定します。 指定されない場合、すべてのリポジトリが処理されます。
  • -S
    CA SDM リポジトリのみを処理するように指定します。
  • -K
    ナレッジ マネジメントおよび埋め込みイメージ リポジトリのみを処理するように指定します。
引数なしで pdm_clean_attachments.pl コマンドを実行すると、すべてのリポジトリが処理されます。
UNIX では、一部の CA SDM ユーティリティを実行する前に LIBPATH を設定する必要があります。 ユーティリティを実行する前に、
pdm_task
を使用して LIBPATH を設定します。 たとえば、「pdm_task pdm_clean_attachments ...」と入力します。
pdm_settenant - オブジェクトへのテナントの割り当て
テナントを定義した後、
pdm_settenant
ユーティリティを使用して、ほかのオブジェクト内のテナント列を設定する必要があります。 このユーティリティの構文は以下のとおりです。
pdm_settentant [-h] | {-f [configuration_file] | -r} [-d domsrvr]
  • -d domsrvr
    (オプション)使用する domsrvr を指定します。 この引数が指定されない場合、pdm_settenant ではデフォルトの domsrvr が使用されます。
  • -f
    configuration_file
    (オプション)更新するデータとファイル更新のルールを指定する、環境設定ファイルの場所を指定します。 この引数を指定しなかった場合、pdm_settenant では、$NX_ROOT/site/cfg ディレクトリの構成ファイルが使用されます(構成ファイルが $NX_ROOT/site/cfg ディレクトリにコピーされた後)。
    注:
    サンプルの settenant.xml ファイルを編集することも、ファイルを作成して $NX_ROOT/site/cfg ディレクトリにコピーすることも可能です。 また、settenant.xsd は settenant.xml と同じディレクトリにある必要があります。そうでない場合、エラーが表示されます。 製品のインストール時に settenant.xsd は $NX_ROOT/site/cfg に格納されるため、このファイルをコピーする必要はありません。
以下のサンプル XML コードは、このファイルの形式を示しています。
<?xml version="1.0" encoding="utf-8" ?> <SetTenant> <Object name="MajicObjectName"> <TenantRule type="SREL">MajicColumName</TenantRule> <Where>tenant is null</Where> </Object> <Object name="MajicObjectName"> <TenantRule type="Name">TenantName</TenantRule> <Where>tenant is null</Where> </Object> </SetTenant>
各 Object タグは、テナント化される CA SDM オブジェクトを示しています。 TenantRule タグは pdm_settenant がテナントを決定する方法を示しており、Where タグでテナント化されるオブジェクトが指定されます。 TenantRule タグには、以下の 2 つのタイプがあります。
  • type="Name"
    名前によって明示的なテナントを指定します。
  • type="SREL"
    オブジェクト内の SREL 属性を指定します。 pdm_settenant は、SREL によって参照されているオブジェクトのテナントをコピーします。
  • -h
    pdm_settenant の使用法が表示されます。
  • -r
    テナントが必要なテーブルごとに行の合計数および null テナント列のある行数を表示するレポートを出力します。
-f および -r 引数がどちらも指定されている場合、pdm_settenant は更新の完了後にレポートを出力します。 -r 引数のみが指定されている場合、pdm_settenant はレポートを出力しますが、データは更新されません。
引数なしで pdm_settenant を実行すると、使用法が表示されます。 デフォルトの環境設定ファイルを使用して pdm_settenant を実行するには、configuration_file 引数なしで -f オプションを指定します。 pdm_settenant ユーティリティが設定ファイルを読み取り、設定ファイルで定義されている各ルールを順次処理します。 $NX_ROOT/log ディレクトリ内の pdm_settenant.log ファイルに出力が書き込まれます。
pdm_settenant を必要なだけ実行することができます。 最初のパスにはかなりの時間を要する場合があります(大規模なサイトでは数時間かかる場合もあります)。 その後のパスでは未更新の行を処理するだけなので、実行速度が速くなります。 これにより、マルチテナンシー オプションをインストールする前に、データベースを準備できます。
UNIX でのマルチテナンシーの実装では、pdm_settenant および pdm_buildtenant ユーティリティを実行する前に、pdm_task を実行して、LIBPATH をエクスポートする必要があります。 これらのユーティリティを実行する前に、pdm_task を実行しないと、システム エラーが発生します。 ../pdm_task を使用してコマンドを実行します。
オブジェクトへのテナントの割り当てに関する注意事項
テナントを定義した後、pdm_settenant (オブジェクトへのテナントの割り当て)ユーティリティを使用して、ほかのオブジェクト内のテナント列を設定できます。 オブジェクトのテナントを変更する際は、データの整合性を維持するため、関連するテナント化オブジェクトのテナンシーを変更すべきかどうかを考慮する必要があります。 これらのオブジェクトの同期の維持に失敗すると、CI、関係、MDR、バージョン指定などからデータが欠落したように見えるようになります。 以下の CA CMDB オブジェクトはテナント化されます。
  • nr - CI 定義
  • nr_com - CI に関連付けられているログ エントリ
  • bmhier - CI に関連付けられている関係
  • mdr_idmap - MDR プロバイダ定義
  • ci_mdr_idmap - CI/MDR 統一マッピング
pdm_settenant を使用してテナンシーを変更する場合、各 CI に対して、以下の手順を実行してデータを同期します。
  • CI オブジェクト名の nr を指定します。
  • nr_com の CI に関連付けられたログ エントリを変更して、新しいテナントのログ エントリを表示できるようにします。
例: テナントとログを変更するための XML
以下の XML は、CITest という名前の CI を T2 に変更し、nr_com 内の対応するログ エントリも変更します。
<Object name="nr"> <TenantRule type="Name">T2</TenantRule> <Where>name = 'CITest'</Where> </Object> <Object name="nr_com"> <TenantRule type="Name">T2</TenantRule> <Where>asset_id.name = 'CITest'</Where> </Object>
pdm_tenant_delete - データベースからのテナント データの削除
pdm_tenant_delete
ユーティリティを使用すると、指定したテナントのすべてのデータがデータベースから削除されます。
ca_ テーブル上の参照制約を、pdm_tenant_delete を実行する前に削除し、後で回復する必要があります。
このユーティリティの構文は以下のとおりです。
pdm_tenant_delete -h|-t tenant_name [-C|-R] [-Q]
  • -h
    pdm_tenant_delete の使用法が表示されます。
  • -t
    tenant_name
    削除するデータのテナント名を指定します。
    データを削除するためにこのユーティリティを使用するには、まずテナントを非アクティブに設定する必要があります。
  • -C
    テナントのすべての連絡先を非アクティブに設定するように指定します。 連絡先は製品間で共有されている可能性があるため、デフォルトの論理では、明示的に要請されない限り、連絡先の一括削除や一括非アクティブ化が実行されないようにしてください。
    -R オプションが指定された場合、このオプションは無視されます。
  • -R
    テナント オブジェクト自体も含めて、ddict.sch 内で CA_COMMON に設定されているすべてのテナント化済みテーブル内のすべての行を削除するように指定します。
    これらのテーブルは複数の製品間で共有されるため、このオプションの使用には注意が必要です。
  • -Q
    データベース クエリをできるだけ速く実行するためのクイック クエリ処理を指定します。 この引数が指定されない場合、ユーティリティではバックグラウンド クエリ処理を使用して、クエリ処理を除いてアイドル状態の場合にのみクエリを実行します。 この引数によって、実行時間は短縮されますが、アクティブなシステムへの影響は大きくなります。
    UNIX では、一部の CA SDM ユーティリティを実行する前に LIBPATH を設定する必要があります。 ユーティリティを実行する前に、
    pdm_task
    を使用して LIBPATH を設定します。 たとえば、「pdm_task pdm_clean_attachments ...」と入力します。
pdm_tenant_extract - テナント データの抽出
pdm_tenant_extract
ユーティリティを使用すると、指定したテナントのすべてのデータがデータベースから抽出されます。 データは pdm_userload 形式で抽出されるため、別のデータベースへのロードが容易になります。 このユーティリティの構文は以下のとおりです。
pdm_tenant_extract -h | -c control_file [-d domsrvr] [-g yes|no] [-o output_file] -p phase [[-t tenant_name]...] [-Q] [table1 [table2...]]
  • -h
    pdm_tenant_extract の使用法が表示されます。
  • -c
    control_file
    このテナント抽出用制御ファイルの場所を指定します。 初期フェーズでは、ファイルは指定した場所に作成されます(事前に存在していてはいけません)。 更新フェーズおよび最終フェーズでは、ファイルが存在している必要があります。
  • -d domsrvr
    (オプション)使用する domsrvr を指定します。
  • -g yes|no
    (オプション)パブリック データが出力ファイルに含まれているかどうかを指定します。 この引数が指定されない場合、すべてのテーブルからのパブリック データが含まれています。
  • -o
    output_file
    (オプション)出力ファイルの場所を指定します。 この引数が指定されない場合、出力は stdout に送られます。
  • -p
    phase
    抽出のフェーズを指定します。 以下のいずれかの値を使用します。
    I
    - 初期
    U
    - 更新
    F
    - 最終
  • -t
    tenant_name
    抽出するテナントの名前を指定します。 この引数は初期フェーズでは必須で、複数のテナントで繰り返し使用できます。 更新フェーズおよび最終フェーズでは有効ではありません。
  • -Q
    データベース クエリをできるだけ速く実行するためのクイック クエリ処理を指定します。 この引数が指定されない場合、ユーティリティではバックグラウンド クエリ処理を使用して、クエリ処理を除いてアイドル状態の場合にのみクエリを実行します。
  • table1 [table2...]
    (オプション)抽出するテーブルを指定します。 省略した場合、すべてのテーブルが抽出されます。
初期フェーズからの出力を、CA SDM やほかの製品で使用されていないデータベースにロードする必要があります。 初期フェーズのデータからロードした各テーブルは、ロード前に切り捨てが行われています。データベースがすでに使用されている場合、この切り捨てによって、データが失われる可能性があります。
データ ロード中に参照に関する問題を回避するために、制約を削除する適切なスクリプトを実行します($NX_ROOT/samples/views/Oracle/OracleDropConstraints.sql または $NX_ROOT/samples/views/SQLServer/SQLDropConstraints.sql )。 ロードが完了した後、同じディレクトリ内にある適切な xxxAddConstraints.sql スクリプトで制約を再適用します。
pdm_userload - テナント データのロード
pdm_userload
ユーティリティは、CA SDM データベースにデータをロードするために使用します。 マルチテナンシーがインストールされていない場合でも、このユーティリティを使用できます。 マルチテナンシーでは、追加の引数(-t)に対するサポートが追加されます。テナント化されたテーブルに挿入/更新された行のテナント列に ID を挿入する必要のあるテナントの名前を、この引数によって指定します。 指定したテナントは、あらかじめデータベース内に存在している必要があります。
データを抽出する際、以下の手順に従って、stdlog のエラーを回避します。
  1. データのロードを開始する前に、以下のようにして CA SDM をシャットダウンし、DBADMIN モードで再起動します。
    • Windows
      pdm_d_mgr -s DBADMIN を実行します。
    • UNIX
      pdm_init -s DBADMIN を実行します。
  2. データ ロード後、pdm_halt コマンドを使用して CA SDM をシャットダウンします。
  3. CA SDM を通常モードで再起動します。