システム・モニター 手引きおよび解説書

スナップショット要求の作成

db2GetSnapshot() を呼び出すと、 いくつかの要求を指定することができます (必要な場合)。

/* Get Snapshot Data Interface Structure                                      */
typedef struct
{
        sqlma *                piSqlmaData; /* Pointer to monitor area        */
        sqlm_collected *       poCollectedData; /* Pointer to collected data  */
        void                   *poBuffer; /* Pointer to output buffer         */
        db2Uint32              iVersion; /* Snapshot version                  */
        db2Uint32              iBufferSize; /* Size of output buffer          */
        db2Uint32              iStoreResult; /* Write to file flag            */
} db2GetSnapshotData;
 
 
 
SQL_API_RC SQL_API_FN                  /* Get snapshot                        */
  db2GetSnapshot (
        db2Uint32 versionNumber,       /* Database version number             */
        void * pParamStruct,           /* In/out parameters                   */
        struct sqlca * pSqlca);        /* SQLCA                               */

db2GetSnapshot() の入力引き数として指定される sqlma には、 配列 sqlm_obj_struct が含まれています。 sqlm_obj_struct は、それぞれがスナップショット要求です。

sqlm_obj_struct は以下のように定義されます。

typedef struct sqlm_obj_struct          /* SNAPSHOT REQUEST  */
{
   unsigned long agent_id;              /* used for requests based on agentid */
   unsigned long obj_type;              /* Snapshot Request Type (SQLMA_XXXX) */
   char          object[SQLM_OBJECT_SZ];/* used for requests based on object  */
                                 /* name, such as 'get snapshot for database' */
}sqlm_obj_struct;

agent_idobject は、 要求タイプに該当する場合にのみ必要となります。 これらは、相互に排他的です。 たとえば、タイプが SQLMA_DBASE_LOCKS (データベース上のロックのスナップショットの取得) の場合にはデータベース名が必要ですが、 タイプが SQLMA_APPL_LOCKS_AGENT_ID の場合には agent_id が必要です。 SQLMA_APPLINFO_ALL (アプリケーションのリスト) のような要求では、 agent_id と object の両方が無視されます。

agent_id は、アプリケーションのアプリケーション・ハンドルであることに注意してください。 これはオペレーティング・システムのプロセス ID に対応するものではありません (古いリリースの DB2 とのソースの互換性を表すために、 この名前が付けられました)。

DB2 によって戻されたストリングのサイズは実際のストリング長です。 ストリングは NULL 文字では終了しません。

sqlma のセットアップおよびスナップショット呼び出しの発行

以下の例では、2 つの異なるスナップショットを要求する db2GetSnapshot() を呼び出すために sqlma をセットアップします。 最初の要求ではオブジェクト名とデータベース別名が必要で、 2 番目の要求には agent_id つまりアプリケーション・ハンドルが必要です。

#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#include "sqlutil.h"
#include "sqlmon.h"  // System Monitor interface
#include "db2ApiDf.h"
main()
{
  struct sqlca sqlca;
  int rc;
 
  db2GetSnapshotData ss_data;
 
  #define BUFFER_SZ 4096                 // Use a fixed size output buffer
  char snap_buffer[BUFFER_SZ];    // Snapshot output buffer
  sqlm_collected collected;
 
  //----------------------------------------------------------------------
  // Request SQLMA_DBASE, and SQLMA_APPL_LOCKS_AGENT_ID in the sqlma
  //----------------------------------------------------------------------
  unsigned long agent_id = 0; // STUB: Obtain by issuing 'list application'
 
  // Allocate the variable size sqlma structure
  struct sqlma* sqlma = (struct sqlma *) malloc(SQLMASIZE(2));
  // Request 2 different snapshots in same call
  sqlma-->obj_num = 2;
  sqlma-->obj_var[0].obj_type      = SQLMA_DBASE;
  strcpy(sqlma-->obj_var[0].object, "SAMPLE");
 
  sqlma-->obj_var[1].obj_type      = SQLMA_APPL_LOCKS_AGENT_ID;
  sqlma-->obj_var[1].agent_id      = agent_id;
 
  //----------------------------------------------------------------------
  // Perform the snapshot
 //----------------------------------------------------------------------
 
  ss_data.piSqlmaData = sqlma;
  ss_data.poCollectedData = &collected;
  ss_data.poBuffer = snap_buffer;
  ss_data.iVersion = SQLM_DBMON_VERSION6;
  ss_data.iBufferSize = sizeof(snap_buffer);
  ss_data.iStoreResult = FALSE;
 
  rc = db2GetSnapshot(db2Version610,
                      ss_data,  
                      &sqlca);  
  if (sqlca.sqlcode < 0) {
      // get and display a printable error message
      char msg[1024];
      sqlaintp (msg, sizeof(msg), 60, &sqlca);
      printf("%s", msg);
  }
  free(sqlma);
  return rc;
}


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]