REDISTRIBUTE DATABASE PARTITION GROUP コマンド (ADMIN_CMD プロシージャーを使用)
REDISTRIBUTE DATABASE PARTITION GROUP コマンドは、データベース・パーティション・グループ内のパーティション間でデータを再配分します。このコマンドはデータベース・パーティション・グループにあるすべてのオブジェクトに影響を及ぼし、1 つのオブジェクトだけに限定することはできません。
有効範囲
このコマンドは、データベース・パーティション・グループ内のすべてのデータベース・パーティションに影響を与えます。
許可
- SYSADM
- SYSCTRL
- DBADM
- 再配分されるデータベース・パーティション・グループ内のすべての表に対する DELETE、INSERT、および SELECT 特権。
- DATAACCESS 権限
必要な接続
カタログ・パーティションとの接続。
コマンド構文
コマンド・パラメーター
- DATABASE PARTITION GROUP db-partition-group
- データベース・パーティション・グループの名前。
この 1 部構成の名前は、SYSCAT.DBPARTITIONGROUPS カタログ表に記述されたデータベース・パーティション・グループを識別します。
データベース・パーティション・グループは、現在再配分を受けることはできません。
注: IBMCATGROUP および IBMTEMPGROUP データベース・パーティション・グループ内の表を再配分することはできません。
- NOT ROLLFORWARD RECOVERABLE
- このオプションを使用すると、REDISTRIBUTE DATABASE PARTITION GROUP コマンドはロールフォワード・リカバリー可能ではありません。
- データは、内部での挿入および削除操作によってではなく、一括して移動されます。 これにより、表のスキャンおよびアクセスの回数が減り、パフォーマンスが向上します。
- 挿入および削除操作それぞれに対するログ・レコードは必要ではなくなりました。 このため、データの再配分を実行するときに、システム内で大容量のアクティブ・ログ・スペースおよびログ・アーカイブ・スペースを管理する必要がなくなりました。
- REDISTRIBUTE DATABASE PARTITION GROUP コマンドを NOT ROLLFORWARD RECOVERABLE オプションとともに使用する場合、再配分操作は XML 列の入った表に対して INDEXING MODE DEFERRED オプションを使用します。 表に XML 列が含まれていない場合、再配分操作はコマンドの発行時に指定された索引付けモードを使用します。
このオプションは、カラム・オーガナイズ表ではサポートされません。
- UNIFORM
- データがハッシュ・パーティション間で均等に配分されることを指定します (つまり、それぞれのハッシュ・パーティションが同じ数の行を持つことが想定されます)。 しかし、それぞれのデータベース・パーティションに同じ数のハッシュ・パーティションはマップされません。 再配分後、データベース・パーティション・グループのすべてのデータベース・パーティションは、ほぼ同じ数のハッシュ・パーティションを持っています。
- USING DISTFILE distfilename
- 分散キー値の分散に偏りがある場合、このオプションを使用して、データベース・パーティション・グループのデータベース・パーティション全体にわたるデータの均一な再分散を行います。
distfilename を使用して、32 768 個のハッシュ・パーティションにわたる現行のデータの配分を指示します。
行カウント、バイト・ボリューム、または他の任意の尺度を使用して、各ハッシュ・パーティションで表示されたデータ量を示します。 ユーティリティーは、パーティションに関連する整数値をそのパーティションの重みとして読み取ります。 distfilename を指定した場合、ユーティリティーはターゲット分散マップを生成します。このマップは、データベース・パーティション・グループのデータベース・パーティション全体においてデータをできるだけ均一に再配分するために使用されます。 再配分した後は、データベース・パーティション・グループ内の各データベース・パーティションの重みが、ほぼ同じになります (データベース・パーティションの重みは、そのデータベース・パーティションにマップするすべてのハッシュ・パーティションの重みの合計です)。
例えば、入力配布ファイルに以下の項目があるとします。10223 1345 112000 0 100 ...例の中で、ハッシュ・パーティション 2 は 112000 の重みを持ち、パーティション 3 (重さは 0) には、マッピングするデータがまったくありません。
distfilename には、32 768 の正整数値が文字形式で入っていなければなりません。値の合計は、4 294 967 295 以下である必要があります。
distfilename は、その完全なパス名を含めることが必要であり、また distfilename はサーバー上に存在していなければならず、接続されているパーティションからアクセス可能でなければなりません。
- USING TARGETMAP targetmapfilename
- targetmapfilename で指定されたファイルは、ターゲット分散マップとして使用されます。
データの再配分はこのファイルに従って行われます。
targetmapfilename は、その完全なパス名を含めることが必要であり、また targetmapfilename はサーバー上に存在していなければならず、接続されているパーティションからアクセス可能でなければなりません。
targetmapfilename には 32 768 個の整数を格納する必要があり、それぞれは有効なデータベース・パーティション番号を表します。各行の番号によって、ハッシュ値が特定のデータベース・パーティションにマップされます。 つまり、行 X に値 Y が入っている場合、HASHEDVALUE() が X のすべてのレコードはデータベース・パーティション Y に配置されます。
ターゲット・マップに含まれるデータベース・パーティションがデータベース・パーティション・グループ中に存在しないと、エラーが戻されます。 REDISTRIBUTE DATABASE PARTITION GROUP コマンドを実行する前に、ALTER DATABASE PARTITION GROUP ADD DBPARTITIONNUM ステートメントを実行してください。
ターゲット・マップから除外されたデータベース・パーティションが、データベース・パーティション・グループにある 場合、 そのデータベース・パーティションはパーティションの中に含まれていません。 このようなデータベース・パーティションは、 REDISTRIBUTE DATABASE PARTITION GROUP コマンドの前か後に ALTER DATABASE PARTITION GROUP DROP DBPARTITIONNUM ステートメントを使用することによってドロップできます。
- CONTINUE
- 直前に失敗または停止した REDISTRIBUTE DATABASE PARTITION GROUP 操作を継続します。 何も起こらなければ、エラーが戻されます。
- ABORT
- 直前に失敗または停止した REDISTRIBUTE DATABASE PARTITION GROUP 操作をアボートします。 何も起こらなければ、エラーが戻されます。
- ADD
-
- DBPARTITIONNUM n
- TO m
- DBPARTITIONNUMS n
- TO m
注:- このオプションを使用してデータベース・パーティションを追加すると、表スペースのコンテナーは、データベース・パーティション・グループ内で最も小さい番号を持つ既存のパーティション内の、対応する表スペースのコンテナーに基づくことになります。その結果、コンテナーの名前の競合が発生する場合は、このオプションを使用しないでください (新しいパーティションが既存のコンテナーと同じ物理マシンにあると、そのような名前の競合が発生する可能性があります)。 そのような場合は、WITHOUT TABLESPACES オプションを指定して ALTER DATABASE PARTITION GROUP ステートメントを使用してから、REDISTRIBUTE DATABASE PARTITION GROUP コマンドを実行してください。 その後、適切な名前を指定して、表スペース・コンテナーを手動で作成できます。
- ADD DBPARTITIONNUMS パラメーターを指定すると、 データ再配分によって、すべての新規データベース・パーティションに表スペースが作成される可能性があります。
- DROP
-
- DBPARTITIONNUM n
- TO m
- DBPARTITIONNUMS n
- TO m
- TABLE tablename
- 再配分処理する表の順番を指定します。
- ONLY
- 表の順序の後に ONLY キーワード (デフォルト) を使用すると、指定した表だけが再配分の対象になります。残りの表は、REDISTRIBUTE CONTINUE コマンドによって後で処理できます。 これはデフォルトです。
- FIRST
- 表の順序の後に FIRST キーワードを使用すると、指定した表が指定の順序で再配分処理を受け、データベース・パーティション・グループ内の残りの表は、ランダムな順序で再配分処理を受けることになります。
- EXCLUDE tablename
- 再配分処理をしない表を指定します。 例えば、データ再配分の要件を表が満たすように構成できるようになるまで、その表を一時的に対象外にできます。 対象から外した表は、REDISTRIBUTE CONTINUE コマンドを使用して後で処理できます。
- STOP AT local-isotime
- このオプションを指定すると、各表のデータ再配分を開始する前に、local-isotime と現在のローカル・タイム・スタンプが比較されます。指定した local-isotime が現在のローカル・タイム・スタンプと同じか、それよりも早いと、ユーティリティーは処理を停止して、警告メッセージを生成します。停止時に進行中であった表のデータ再配分の処理は中断されずに完了します。表の新規のデータ再配分の処理は開始されません。 未処理の表の再配分を実行するには、CONTINUE オプションを使用します。この local-isotime 値は、日付と時刻の組み合わせを識別する 7 部構成の文字ストリングのタイム・スタンプとして指定します。形式は、現地時間の yyyy-mm-dd-hh.mm.ss.nnnnnn (年、月、日、時、分、秒、マイクロ秒) です。
- DATA BUFFER n
- ユーティリティー内でデータを転送するためのバッファー・スペースとして使用する 4 KB ページの数を指定します。
このコマンド・パラメーターは、NOT ROLLFORWARD RECOVERABLE パラメーターも指定された場合のみ使用できます。
指定された値がサポートされている最小値よりも小さい場合には、最小値が使用され、警告は戻されません。 DATA BUFFER 値を指定しないと、実行時に各表の処理を開始する時点で、ユーティリティーによって適切なデフォルトが計算されます。 具体的には、表の再配分の開始時点でユーティリティー・ヒープで使用可能になっているメモリーの 50% を使用することを基本にしながら、さまざまな表プロパティーを考慮に入れることによって、デフォルトを計算することになります。
このメモリーは、ユーティリティー・ヒープから直接に割り当てられ、 そのサイズは util_heap_sz データベース構成パラメーターで修正可能です。 システムにさらに使用可能なメモリーがある場合、REDISTRIBUTE DATABASE PARTITION GROUP コマンドの DATA BUFFER パラメーターの値は、一時的に util_heap_sz を超える場合があります。
- INDEXING MODE
- 再配分時の索引の保守方法を指定します。
このコマンド・パラメーターは、NOT ROLLFORWARD RECOVERABLE パラメーターも指定された場合のみ使用できます。有効な値は以下のとおりです。
- REBUILD
- 索引が最初から再作成されます。このオプションを使用する場合は、索引が有効である必要はありません。このオプションを使用する結果として、「索引」ページがディスク上で一緒にクラスター化されます。
- DEFERRED
- 再配分で索引の維持を試行しません。リフレッシュが必要であることを示すマークが索引に付けられます。
そのような索引に最初にアクセスした時点で再作成が強制実行されるか、データベースの再始動時に索引が再作成されることになります。
注: 非 MDC 表および非 ITC 表の場合、表に無効な索引があると、INDEXING MODE DEFERRED が指定されていなければ、REDISTRIBUTE DATABASE PARTITION GROUP コマンドによって自動的に索引が再作成されます。 MDC 表または ITC 表の場合、INDEXING MODE DEFERRED が指定されている場合でも、無効な複合索引は表の再配分が始まる前に再作成されます。なぜなら、ユーティリティーは MDC 表または ITC 表を処理するために複合索引を必要とするからです。
- PRECHECK
- データベース・パーティション・グループを再配分できるかどうかを検査します。
このコマンド・パラメーターは、NOT ROLLFORWARD RECOVERABLE パラメーターも指定された場合のみ使用できます。
- YES
- これはデフォルト値です。再配分操作が開始されるのは、検査が正常に終了した場合のみです。 検査に失敗すると、このコマンドは終了して、失敗した最初の検査に関連したエラー・メッセージを返します。
- NO
- 再配分操作はすぐに開始されます。検査は行われません。
- ONLY
- 検査実行後に、コマンドは終了します。再配分は行われません。 デフォルトでは、データベースは静止されません。QUIESCE DATABASE コマンド・パラメーターが YES に設定された場合、またはデフォルト値の YES の場合には、データベースは静止状態のままになります。 データベースへの接続を復元するには、再配分操作を実行するか、UNQUIESCE DATABASE コマンドを発行します。
- QUIESCE DATABASE
- データベースからすべてのユーザーを強制的に切断して静止モードにするように指定します。
このコマンド・パラメーターは、NOT ROLLFORWARD RECOVERABLE パラメーターも指定された場合のみ使用できます。
- YES
- これはデフォルト値です。SYSADM、SYSMAINT、または SYSCTRL の権限を持つユーザーと、QUIESCE_CONNECT 権限を付与されたユーザーだけが、データベースとそのオブジェクトにアクセスできるようになります。 再配分が正常に完了すると、データベースは静止解除されます。
- NO
- 再配分操作によって、データベースが静止状態になることはありません。 ユーザーがデータベースから強制的に切断されることもありません。
- STATISTICS
- ユーティリティーが、統計プロファイルのある表の統計を収集するように指定します。
このコマンド・パラメーターは、NOT ROLLFORWARD RECOVERABLE パラメーターも指定された場合のみ使用できます。このオプションを指定するほうが、データ再配分の完了後に RUNSTATS コマンドを別途実行するよりも効率的です。
- USE PROFILE
- 統計プロファイルのある表の統計を収集します。 統計プロファイルのない表については、何も実行されません。これはデフォルトです。
- NONE
- 表の統計を収集しません。
例
CALL SYSPROC.ADMIN_CMD('REDISTRIBUTE DATABASE PARTITION GROUP DBPG_1
USING DISTFILE /home/user1/data/distfile_for_dbpg_1
ADD DATABASE PARTITION (6 TO 7) ')- 再配分はロールフォワード・リカバリー可能ではない。
- データは複数のハッシュ・パーティションにわたって一様に配分される。
- 索引は最初から再作成される。
- 統計は収集されない。
- データ転送のためのバッファー・スペースとして、180,000 個の 4 KB ページが使用される。
CALL SYSPROC.ADMIN_CMD('REDISTRIBUTE DATABASE PARTITION GROUP DBPG_2
NOT ROLLFORWARD RECOVERABLE
UNIFORM
INDEXING MODE REBUILD
DATA BUFFER 180000
STATISTICS NONE')
この再配分操作では、QUIESCE DATABASE および PRECHECK コマンド・パラメーターのデフォルト値により、データベースの静止および事前検査も実行されます。使用上の注意
- 再配分操作を開始する前に、表が通常状態にあり、「ロード・ペンディング」状態でも「REORG ペンディング」状態でもないことを確認してください。 表状態は LOAD QUERY コマンドを使って調べることができます。
- NOT ROLLFORWARD RECOVERABLE オプションが指定され、データベースがリカバリー可能である場合、ユーティリティーが最初に表スペースにアクセスした時点で、表スペースは BACKUP PENDING 状態になります。表スペースのバックアップが作成されるまで、その表スペースに含まれているすべての表は読み取り専用になります。表スペースのバックアップは、その表スペース内のすべての表の再配分処理が完了したときにのみ可能になります。
- 再配分操作の実行中に、その再配分操作に関する一般情報、および各表の処理開始時刻と処理終了時刻などの情報を含むイベント・ログ・ファイルが作成されます。
このイベント・ログ・ファイルは、以下のようにサーバーに書き込まれます。
- Linux および UNIX オペレーティング・システムの場合は、homeinst/sqllib/redist ディレクトリー。サブディレクトリーとファイル名の形式は、database-name.database-partition-group-name.timestamp.log になります。
- Windows オペレーティング・システムの場合は、DB2INSTPROF¥instance¥redist ディレクトリー (DB2INSTPROF は、DB2INSTPROF レジストリー変数の値です)。サブディレクトリーとファイル名の形式は、database-name.database-partition-group-name.timestamp.log になります。
- タイム・スタンプ値は、コマンドが発行された時の時刻です。
再配分イベント・ログについて詳しくは、『再配分イベント・ログ・ファイル』のトピックを参照してください。
- このユーティリティーは、処理中に断続的な COMMIT を実行します。 そのため、タイプ 2 接続では SQL30090N エラーを受け取ることになります。
- 再配分を受けた表と従属関係があるすべてのパッケージは無効になります。 データベース・パーティション・グループの再配分操作が完了した後で、 そのようなパッケージを明示的に再バインドすることをお勧めします。 明示的な再バインドにより、無効パッケージに対する最初の SQL 要求の実行での初期遅延がなくなります。 再配分メッセージ・ファイルには、再配分を受けたすべての表のリストが入ります。
- 統計プロファイルがある表については、再配分ユーティリティーの実行時に、デフォルトで統計が更新されます。統計プロファイルがない表の場合は、表や索引の統計を別途更新することをお勧めします。そのためには、再配分操作の完了後に、db2Runstats API を呼び出すか、RUNSTATS コマンドを実行できます。
- 複製されたマテリアライズ照会表や DATA CAPTURE CHANGES を用いて定義された表を含むデータベース・パーティション・グループは、再配分することができません。
- データベース・パーティション・グループに、既存の宣言済み一時表または作成済み一時表を含む USER TEMPORARY 表スペースがある場合、再配分を行うことはできません。
- INDEXING MODE などのオプションは、適用対象にならない表では無視されます (警告も生成されません)。例えば、INDEXING MODE は、索引のない表では無視されます。
- コマンドの実行状況は、CALL ステートメントからの結果である SQLCA で戻されます。
- USING DISTFILE distfilename または USING TARGETMAP targetmapfilename で参照するファイルでは、サーバー上のファイルを参照する必要があります。
- REDISTRIBUTE DATABASE PARTITION GROUP コマンドは、データベース・パーティションの追加サーバー要求が保留中または進行中の場合は、失敗する可能性があります (SQLSTATE 55071)。 さらに、新規データベース・パーティション・サーバーがオンラインでインスタンスに追加された場合、およびすべてのアプリケーションが新規データベース・パーティション・サーバーを認識しているわけではない場合、このコマンドは失敗する可能性があります (SQLSTATE 55077)。
- カラム・コンプレッション・ディクショナリーを作成するための未解決の非同期バックグラウンド・プロセスが存在する場合、REDISTRIBUTE DATABASE PARTITION GROUP コマンドは許可されません (SQL6056N)。
互換性
Db2® バージョン 9.5 以前の XML レコード・フォーマットを使用する XML 列が入った表は、再配分できません。そうした表を新しいフォーマットに移行するには、ADMIN_MOVE_TABLE ストアード・プロシージャーを使用します。
