プライマリ・コンテンツに移動
Oracle® Clusterware管理およびデプロイメント・ガイド
12c リリース1 (12.1)
B71322-07
目次へ移動
目次
索引へ移動
索引

前
次

What-If API

What-If APIを使用して、計画済または計画外の仮定上のイベントに対するOracle Clusterwareの反応を予測できます。Oracle Clusterwareでは、システムでのイベントに応じて、対応アクション計画を生成できます。このアクション計画は、一連のリソース状態の移行またはサーバー・プールの再構成(あるいはその両方)で構成されます。What-If APIは、このアクション計画を外部に公開し、イベントの結果を実際の発生前にクライアントが予測できるようにするメカニズムを備えています。

What-Ifレスポンス計画は、次のイベント・カテゴリで使用可能です。

Oracle ClusterwareではWhat-Ifの出力がアクションのリストとして提供され、各アクションがOracle Clusterwareによって実行される特定の手順を示します。各アクションはclscrs_action構造によってカプセル化され、clscrs_actionlist構造がアクションの順序全体を表します。また、Oracle Clusterwareでは、それらの構造を作成、調査、反復、および破棄するための関数セット(アクション構造用のclscrs_action_*とアクション・リスト用のclscrs_actionlist_*)が用意されています。使用方法は、対応するエンティティ・リストおよびエンティティの関数と同じです。

また、What-If APIでは、予想されるシステム状態を問合せる機能もクライアントに提供されています。clscrs_querylist構造でstat3書式を使用して問合せを指定し、clscrs_crsentitylist構造によって結果が提供されます。使用方法の詳細は、stat3の項を参照してください。

Oracle Clusterwareによって提供される各What-If応答には、Oracle Clusterwareの現行の状態を示す順序IDが含まれます。順序IDは、Oracle Clusterwareによって管理される新しいイベントごとに増分されます。Oracle Clusterwareでは、順序IDが変更されないかぎり、提供されたアクション計画が対象イベントに対してそのまま実行されることが保証されます。たとえば、whatif start resource FOOリクエストに対してOracle Clusterwareから提供されるアクション計画は、順序IDが変更されていないかぎり、実際のstart resource FOOリクエストが送信されたときにOracle Clusterwareによって実行されるアクションと同じです。

例H-4に、What-If APIを使用する方法を示します。

例H-4 What-If APIの使用例

boolean            tracectx = TRUE;
oratext           *resid;
clscrs_ctx        *ctx;
clscrs_env         env;
clscrs_splist     *resid_list;
clscrs_action     *cur_actn;
clscrs_actionlist *alist;
clscrs_splist     *params;

// Init crs
clscrs_init_crs(&ctx, (clscrs_msgf)clsuslztrace, &tracectx, (ub4)0);

// Init parameters to the call
clscrs_entity_id_create(ctx, "MYRES", clscrs_entity_res, &resid);
clscrs_splist_create(ctx, &resid_list);
clscrs_splist_append(resid_list, resid, NULL);
clscrs_actionlist_create(ctx, &alist);

// Make call into the what-if API
clscrs_whatif_start_resource(resid_list, nodename, flags, NULL, NULL, alist);

// Process the resulting list of actions
for(clscrs_actionlist_first(alist,&cur_actn);cur_actn;clscrs_actionlist_next(alist,&cur_actn))
 {
  params = clscrs_action_getparams(cur_actn);
  switch(clscrs_action_gettype(cur_actn))
  {
   case clscrs_actiontype_resstate:
      // Read params and do something
         break;
   case clscrs_actiontype_srvmove:
      // Read params and do something
         break;
   case clscrs_actiontype_newgroup:
      // Read params and do something
         break;
   case clscrs_actiontype_errorcase:
      // Read params and do something
         break;
   }
  }
  clscrs_actionlist_destroy(alist);
  clscrs_splist_destroy(resid_list);
  clscrs_term_crs(&ctx);

この項では、APIのパラメータを、入力を指定するものと、関数が正常に完了した際に情報を表示するものとに分けて説明します。