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_id と object は、 要求タイプに該当する場合にのみ必要となります。 これらは、相互に排他的です。 たとえば、タイプが SQLMA_DBASE_LOCKS (データベース上のロックのスナップショットの取得) の場合にはデータベース名が必要ですが、 タイプが SQLMA_APPL_LOCKS_AGENT_ID の場合には agent_id が必要です。 SQLMA_APPLINFO_ALL (アプリケーションのリスト) のような要求では、 agent_id と object の両方が無視されます。
agent_id は、アプリケーションのアプリケーション・ハンドルであることに注意してください。 これはオペレーティング・システムのプロセス ID に対応するものではありません (古いリリースの DB2 とのソースの互換性を表すために、 この名前が付けられました)。
DB2 によって戻されたストリングのサイズは実際のストリング長です。 ストリングは NULL 文字では終了しません。
以下の例では、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; }