メンバーの静止

状況によっては、クラスターからメンバーを一時的に除去しなければならない場合があります (例えば、保守操作の場合)。

このタスクについて

Db2® pureScale ® 環境では、 db2stop コマンドと STOP DATABASE MANAGER コマンドにオプションの QUIESCE パラメーターが用意されています。 オプションの QUIESCE パラメーターを指定すると、単一メンバーに対してすべてのアクティビティーのドレーンを実行し、シャットダウンすることができます。これにより、メンバーを強制終了することができます。 メンバーがドレーンされている間、自動クライアント・リルート (ACR) およびワークロード・バランシングにより、新しいトランザクションと新しい接続は他のメンバーに転送されます。 コマンドの完了後、停止されたメンバーに対して db2start を発行し、そのメンバーで保留されたロックをリカバリーする必要があります。 その後、db2stop を使用してメンバーを再度停止することができます。

あるメンバーに対して db2stop QUIESCE コマンドを実行すると、アプリケーションは以下の条件に従います。
  • タイムアウト値を指定する場合、アプリケーションがアクティブな作業単位を完了するための最大時間がその値になります。
  • タイムアウトが指定されない場合 (または値として -1 が指定される場合)、メンバー上のすべてのアクティブ・トランザクションおよび関連する接続が終了するまで、サーバーは無限に待ち続けます。
  • タイムアウト値に 0 (ゼロ) を指定する場合、接続は強制即時終了されます。
注: メンバー静止停止が (タイムアウトなしまたはゼロ以外のタイムアウトで) 発行されると、アクティブ・トランザクションには据え置き接続終了のマークが付けられます。 トランザクションのコミットまたはロールバックが正常に終了すると、接続は終了されます。 ただし、以下のいずれかの条件が当てはまる場合、接続は終了されません。
  • 接続でグローバル変数が使用されている
  • 暗号化パスワードが使用されている
  • 開いている WITH HOLD カーソルが存在する
  • 宣言済み一時表 (DGTT) が使用されている
  • TRANSFORM GROUP が設定されている
  • SESSION AUTHID が変更されている
  • PL/SQL パッケージまたは SQL/PL モジュールが使用されている
  • カーソル変数が使用されている
  • シーケンス値が使用されており、 DB2_ALLOW_WLB_WITH_SEQUENCES が有効になっていない
  • PRESERVE ROWS を持つ作成済み一時表 (CGTT) が使用されている
  • KEEPDYNAMIC YES でバインドしたパッケージで準備されている動的 SQL。 この制限は、ストアード・プロシージャーまたはユーザー定義関数でステートメントを準備する場合、または CLI/JDBC/ODBC/などの IBM® 非組み込み API によってステートメントが準備される場合には適用されません。NET。

上記の条件のいずれかに該当する場合は、その条件 (WITH HOLD カーソルなど) を除去するか、接続を明示的に停止する必要があります。 これらの条件がいずれも存在しない場合、クライアント接続は次のトランザクションのエンドポイントで終了されます。 クライアント (.NET、CLI、JDBC) でシームレス ACR がサポートされている場合、接続は自動的に別のメンバーに転送されます。

プロシージャー

db2stop コマンドまたは STOP DATABASE MANAGER コマンドを実行し、 QUIESCE パラメーターを指定します。
次の例は、メンバー 2 をオフラインにし、アクティブ・ワークロードを完了するまでの時間として 30 分を割り当てます。 30 分後、すべてのアプリケーションがメンバーから切断されます。
db2stop MEMBER 2 QUIESCE 30
メンバー 2 を再びオンラインにして、そのメンバーで保留されたロックをリカバリーするには、そのメンバーに対して db2start コマンドを発行します。
db2start MEMBER 2

次の例では、db2InstanceStop API を使用してメンバー 10 をオフラインにします。
struct sqlca sqlca;     // sqlca to carry the sqlcode
struct db2InstanceStopStruct instanceStopStruct;
struct db2StopOptionsStruct  stopOptions;

instanceStopStruct.iIsRemote = FALSE; // demo local instance
instanceStopStruct.piRemoteInstName = NULL;
instanceStopStruct.piCommData = NULL; // don't care DAS
instanceStopStruct.piStopOpts = &stopOptions; 

stopOptions.iOption = SQLE_QUIESCE; // Member quiesce option
stopOptions.iIsType = TRUE;        
stopOptions.iType = DB2_NODE_MEMBER;        
stopOptions.iIsNodeNum = TRUE;        
stopOptions.iNodeNum = 10;        
stopOptions.iQuiesceDeferMinutes = 0; // no explicit timeout

// Finally, invoke the API to shut down the instance 
db2InstanceStop(db2Version1010, &instanceStopStruct, &sqlca); 
次の例では、db2InstanceStop API を使用してメンバー 10 をオフラインにし、タイムアウトとして 5 分を指定します。
struct sqlca sqlca;     // sqlca to carry the sqlcode
struct db2InstanceStopStruct instanceStopStruct;
struct db2StopOptionsStruct  stopOptions;

instanceStopStruct.iIsRemote = FALSE; // demo local instance
instanceStopStruct.piRemoteInstName = NULL;
instanceStopStruct.piCommData = NULL; // don't care DAS
instanceStopStruct.piStopOpts = &stopOptions; 

stopOptions.iOption = SQLE_QUIESCE; // Member quiesce option
stopOptions.iIsType = TRUE;        
stopOptions.iType = DB2_NODE_MEMBER;        
stopOptions.iIsNodeNum = TRUE;        
stopOptions.iNodeNum = 10;        
stopOptions.iQuiesceDeferMinutes = 5; // timeout of 5 minutes

// Finally, invoke the API to shut down the instance 
db2InstanceStop(db2Version1010, &instanceStopStruct, &sqlca);