ADMIN_MOVE_TABLE プロシージャー - オンラインの表移動
ADMIN_MOVE_TABLE ストアード・プロシージャーは、アクティブな表のデータを、同じ名前の新しい表オブジェクトに移動します。データはオンラインのままなので、引き続きアクセス可能です。
このストアード・プロシージャーは、移動対象の表に関連する状況情報と構成オプションを内容とする行から成るプロトコル表を作成します。 このプロシージャーからの戻りセットは、移動対象の表に関連するプロトコル表からの行のセットです。
- Source table
- ストアード・プロシージャーにパラメーターとして渡される元の表の名前。 移動対象の表です。
- Target table
- ストアード・プロシージャーで渡された表定義を使用して、ストアード・プロシージャーによって作成される表。 この表にソース表のすべてのデータがコピーされ、ソース表と同じ名前に名前変更されます。
- Staging table
- ストアード・プロシージャーによって作成される表。 表移動の実行中にソース表に対して行われる更新、削除、または挿入による変更はすべて、ステージング表に保管されます。 この表は、移動が完了するとドロップされます。
許可
ADMIN_MOVE_TABLE ストアード・プロシージャーを呼び出すためには、SQLADM 権限または DBADM 権限が必要です。 また、SELECT ステートメントをソース表に発行したり、ターゲット表に INSERT ステートメントを発行したりする権限を含め、適切なオブジェクト作成権限もなければなりません。
デフォルトの PUBLIC 特権
制限のないデータベースでは、このプロシージャーが自動的に作成されると、EXECUTE 特権が PUBLIC に付与されます。
構文
- 1 つ目の方法では、ターゲット表の表定義の特定の部分のみを変更します。 例えば、表定義がかなり大きい (数 KB) 場合、表の表スペースのみを変更したいときは、ソース表の再作成に必要な CREATE TABLE ステートメント全体を決定しなくても、その変更を行うことができます。 data_tbsp、index_tbsp、および lob_tbsp パラメーターを設定するだけでよく、他のオプション・パラメーターはブランクのままにしておくことができます。
- 2 つ目の方法は、制御できる要素が多く、柔軟性の高い方法です。 ターゲット表をストアード・プロシージャーに作成させるのではなく、事前にターゲット表を作成することができます。 ターゲット表を事前に作成すると、1 つ目の方法を使用して作成できないようなターゲット表を作成できます。
方法 1:
方法 2:
両方式ともスキーマは SYSPROC です。
プロシージャー・パラメーター
- タブ・スキーマ
この入力パラメーターは、移動対象の表が含まれるスキーマの名前を指定します。 このパラメーターには大/小文字の区別があり、データ・タイプは VARCHAR(128) です。 開始したすべての表移動を REPORT 操作でモニターする場合は、このパラメーターを NULL または空ストリングに設定できます。 操作の場合、
ESTIMATE tabschema
は LIKE パターンにすることができ、一致するすべての表に対して ESTIMATE が実行されます。- タブ名
この入力パラメーターは、移動対象の表の名前を指定します。 このパラメーターには大/小文字の区別があり、データ・タイプは VARCHAR(128) です。 開始したすべての表移動を REPORT 操作でモニターする場合は、このパラメーターを NULL または空ストリングに設定できます。 操作の場合、
ESTIMATE tabname
は LIKE パターンにすることができ、一致するすべての表に対して ESTIMATE が実行されます。- data_tbsp
- この入力パラメーターは、ターゲット表の新しいデータ表スペースを指定します。 値を指定する場合は、index_tbsp および lob_tbsp パラメーターが必須となります。 値を指定しない場合は、ソース表のデータ表スペースが使用されます。 このパラメーターには大/小文字の区別があり、データ・タイプは VARCHAR(128) です。 このパラメーターを NULL または空ストリングにすることができます。
- index_tbsp
- この入力パラメーターは、ターゲット表の新しい索引表スペースを指定します。 値を指定する場合は、data_tbsp および lob_tbsp パラメーターが必須となります。 値を指定しない場合は、ソース表の索引表スペースが使用されます。 このパラメーターには大/小文字の区別があり、データ・タイプは VARCHAR(128) です。 このパラメーターを NULL または空ストリングにすることができます。
- LOB (tbsp)
- この入力パラメーターは、ターゲット表の新しい LOB 表スペースを指定します。 値を指定する場合は、data_tbsp および index_tbsp パラメーターが必須となります。 値を指定しない場合は、ソース表の LOB 表スペースが使用されます。 このパラメーターには大/小文字の区別があり、データ・タイプは VARCHAR(128) です。 このパラメーターを NULL または空ストリングにすることができます。
- オーガナイザー条項
- この入力パラメーターを使用して、表に関する ORGANIZE BY 節を指定できます。 指定した値が「ORGANIZE BY」で始まっていなければ、ターゲット表はマルチディメンション・クラスタリング (MDC) 仕様になります。 ターゲット表のデータをマルチディメンションに従ってクラスター化するために使用する列を決定し、それらをコンマ区切りリストにして値を入力します。 NULL または
-
の値が指定された場合、ORGANIZE BY 節は使用されません。 空ストリングまたは単一ブランクを指定すると、プロシージャーはソース表に MDC または ITC 仕様があるかどうかを検査し、見つかった場合はその仕様を使用します。 引数を「ORGANIZE BY」で始めた場合、これを使用して CREATE TABLE ステートメントの ORGANIZE BY 節に関連した任意のオプションを指定できます。 このパラメーターは VARCHAR(32672) データ・タイプで、CREATE TABLE ステートメントの ORGANIZE BY DIMENSIONS 節と同じ形式です。 このパラメーターを NULL、空ストリング、または単一ブランクにすることができます。例 1: 'C1, C4, (C3,C1), C2'
例 2: ORGANIZE BY INSERT TIME
- 「partkey_cols」
- この入力パラメーターは、ターゲット表のパーティション・キー列仕様を指定します。 複数のデータベース・パーティションにデータをどのように分散させるかを指定するキー列を決定し、それらをコンマ区切りリストにして値を入力します。 値として NULL または負符号 (-) を指定した場合、PARTITIONING KEY 節は使用されません。 空ストリングまたは単一ブランクを指定すると、プロシージャーはソース表の既存の分散を検査し、見つかった場合はその仕様を使用します。 ソース表がランダム分散表として作成された場合、この方法を使用してターゲット表をランダム分散表にすることができます。 このパラメーターは VARCHAR(32672) データ・タイプで、CREATE TABLE ステートメントの DISTRIBUTE BY HASH 節と同じ形式です。
例: 'C1, C3'
- データ・パーツ
- この入力パラメーターは、ターゲット表のデータ・パーティション仕様を指定します。 このステートメントは、表データを複数のストレージ・オブジェクト (データ・パーティションと言う) にどのように分割するかを、表の 1 つ以上の列の値に基づいて定義します。 値として NULL または負符号 (-) を指定した場合、PARTITION BY RANGE 節は使用されません。 空ストリングまたは単一ブランクを指定すると、プロシージャーはソース表にデータ・パーティション・スキームがあるかどうかを検査し、見つかった場合はその情報 (パーティション名を含む) を使用します。 このパラメーターは VARCHAR(32672) データ・タイプで、CREATE TABLE ステートメントの PARTITION BY RANGE 節と同じ形式です。
例: '(C1) (STARTING FROM (1) EXCLUSIVE ENDING AT (1000) EVERY (100))'
- 定義
- この入力パラメーターは、ターゲット表の新しい列定義を指定します。列タイプの変更は互換性のある限り可能ですが、列名は同じままでなければなりません。
新しい列を追加したり、既存の列をドロップしたりすることもできます。 列を追加する場合は、NULL 可能と定義するか、またはデフォルト値を設定する必要があります。 また、表にユニーク索引または 1 次索引があり、ドロップされる列がそのユニーク索引または 1 次索引の一部でない場合のみ、列をドロップできます。 このパラメーターのデータ・タイプは VARCHAR(32672) です。 このパラメーターを NULL または空ストリングにすることができます。
例: 'C1 INT, C2 INT DEFAULT 0'
- ターゲット・テーブル名
- この入力パラメーターは、移動中にターゲット表として使用する既存の表の名前を指定します。 渡されるターゲット表に対して、以下の変更を加えることができます。
- データ、索引、LOB の表スペースを変更できます。
- マルチディメンション列 (MDC) 仕様を追加または変更できます。
- パーティション・キー列仕様を追加または変更できます。
- データ・パーティション仕様を追加または変更できます。
- データ圧縮を追加または除去できます。
- 新しい列定義を指定できます。ただし、coldef パラメーターを指定する場合と同じ制限が適用されます。
指定する表には、以下の制限が適用されます。- ソース表と同じスキーマに表が存在しなければなりません。
- 表は空でなければなりません。
- 型付き表、マテリアライズ照会表 (MQT)、ステージング表、リモート表、クラスター表は許可されません。
このパラメーターを NULL または空ストリングに設定した場合、ストアード・プロシージャーはソース表と同じ定義を使用します。 このパラメーターには大/小文字の区別があり、データ・タイプは VARCHAR(128) です。
単一表に対して実行する場合に使用できます。 表は、ユーザーによって作成および提供されるため、ドロップされません。
- オプション
- この入力パラメーターは、
コンマ区切りの値で構成されたストリングで、ストアード・プロシージャーによって使用されるオプションを定義します。 このオプション・リストには大/小文字の区別がなく、データ・タイプは VARCHAR(32672) です。 リスト値を NULL または空ストリングにすることができます。 以下の値が有効です。
- ALLOW_READ_ACCESS
- このオプションを設定すると、カラム・オーガナイズ表の移動や、カラム・オーガナイズ表から行ベース表への変換が可能になります。 SELECT ステートメントでソース表にアクセスすることはできますが、UPDATE、DELETE、および INSERT ステートメントをソース表に実行すると SQL エラーになります。
- KEEP
- このオプションを設定すると、元のソース表のコピーが異なる名前で保持されます。 ソース表の名前が T1 の場合、移動後にこの表は自動的に T1AAAAVxo のような名前に変更されます。 ソース表の正確な名前は、戻されるプロトコル表の ORIGINAL キーのフィールドに示されます。 このオプションは、SWAP フェーズまでの (SWAP フェーズを含む) 任意の時点で設定できます。
KEEP は、単一表に対して実行する場合に使用できます。そうでない場合は無視されます。 その後、ユーザーはサンプルに対して分析をさらに行うことができます。
- COPY_USE_LOAD
<load options>
-
COPY_USE_LOAD でロード・オプションを指定した場合、ADMIN_MOVE_TABLE は ADMIN_CMD ロードを使用してソース表からターゲット表にデータをコピーします。 COPY_USE_LOAD でどのオプションも指定しない場合は、ソース表からターゲット表へのデータのコピーに NONRECOVERABLE オプションの db2Load API が使用されます。
- MESSAGES ON SERVER
- LOAD コマンドによってサーバー上に作成されるメッセージ・ファイルを、ロード失敗に備えて保持することを指定します。 プロトコル表の WARNINGS 項目には、ロード中に発生したすべての警告およびエラー・メッセージを取り出すのに必要なメッセージ検索 SQL ステートメントと、メッセージをクリーンアップするのに必要なメッセージ除去 SQL ステートメントが含まれます。 この節を使用するしないにかかわらず、fenced ユーザー ID は、DB2_UTIL_MSGPATH レジストリー変数で示されるディレクトリー下にファイルを作成できる権限を持っていなければなりません。
- COPY YES
- ロードするデータのコピーを保存することを指定します。 フォワード・リカバリーが使用不可になっている場合、このオプションは無効です。
- USE TSM
- Tivoli® Storage Manager (TSM) を使用してコピーを保管することを指定します。
- OPEN num-sess SESSIONS (セッション数)
- TSM またはベンダー製品とともに使用する入出力セッションの数です。 デフォルト値は 1 です。
- TO device または directory
- コピー・イメージを作成する先の装置またはディレクトリーを指定します。
- LOAD lib-name
- 使用するベンダー・バックアップおよびリストア入出力関数を含む共有ライブラリー (Windows オペレーティング・システム上の DLL) の名前。 絶対パスで指定することができます。 絶対パスを指定しない場合、 デフォルトでユーザー出口プログラムの存在するパスになります。
- NONRECOVERABLE
- ロード・トランザクションがリカバリー不能としてマークされており、 それ以降のロールフォワード・アクションによってそれをリカバリーさせることは不可能であることを指定します。 COPY YES が使用されない場合は NONRECOVERABLE がデフォルトです。
- COPY_WITH_INDEXES
- このオプションを設定すると、ソース表のコピー前に索引が作成されます。一方デフォルトでは、ソース表のコピー後に索引が作成されます。 このオプションの利点は、コピー後の索引作成の場合は索引ごとに表全体スキャンが必要になるということ、および索引作成はアクティブ・ログ・スペースを必要とするトランザクションであるということです。 LOGINDEXBUILD データベース構成パラメーターがオンの場合、索引を短い時間枠で作成するためには、かなりのログ・スペースが必要になります。 このオプションの欠点の 1 つは、索引をターゲット表で維持する必要があるために、コピー・パフォーマンスが低下するという点です。 また、結果として生成される索引は疑似削除済み のキーを含んでおり、コピー後に索引を作成した場合ほど索引のバランスが取れていません。 COPY_WITH_INDEXES オプションは、COPY フェーズまでの (COPY フェーズを含む) 任意の時点で設定できます。
- FORCE
- この強制オプションを設定すると、ソース表の表定義が変わったかどうかが SWAP フェーズで検査されません。
- FORCE_ALL
- ソース表に大きなワークロードがあると、ADMIN_MOVE_TABLE が SWAP フェーズを完了できなくなる場合があります (SQL0911N 理由コード 2)。 言い換えれば、SWAP フェーズでソース表に他のアプリケーションの処理の負荷が大きくかかっていると、ADMIN_MOVE_TABLE がデッドロックのためにロールバックすることがあります (SQL0911N 理由コード 2)。
このオプションは、ソース表に対するワークロードがあるすべてのアプリケーションを強制終了する場合に使用します。 強制終了したアプリケーションは、その後のすべてのデータベース・マネージャー要求で SQL1224N を受け取ります。
ほとんどの場合、このオプションを使用する必要はありません。 FORCE_ALL は慎重に使用してください。 FORCE_ALL オプションを指定して SWAP を実行するには、SYSADM、SYSCTRL、SYSMAINT のいずれかの権限が必要です。
- NO_STATS
- このオプションを設定すると、ターゲット表での RUNSTATS または統計コピーは開始されません。 AUTO_RUNSTATS または AUTO_STMT_STATS データベース構成パラメーターを使用すると、その後データベース・システムにより自動的に新しい統計が作成されます。 後方互換性のために STATS_NO も受け入れます。 NO_STATS オプションは、SWAP フェーズまでの (SWAP フェーズを含む) 任意の時点で設定できます。
- COPY_STATS
- このオプションを設定すると、スワップ実行前にソース表からターゲット表に統計がコピーされます。 これにより、ページ・サイズが変わる場合は特に、物理統計が不正確になる可能性があります。 しかし、このオプションを設定すると、新しい統計を計算するために RUNSTATS が呼び出されることがないので、計算時間を節約できます。 また、同じ統計になるので、オプティマイザーが同じアクセス・プランを選択する可能性があります。 後方互換性のために STATS_COPY も受け入れます。 STATS_COPY オプションは、SWAP フェーズまでの (SWAP フェーズを含む) 任意の時点で設定できます。
- NO_AUTO_REVAL
- このオプションを設定すると、表に関する自動再有効化は行われません。代わりに、すべてのトリガーとビューが再作成されます。 NO_AUTO_REVAL オプションは INIT フェーズでのみ設定できます。
- REORG
- このオプションを設定すると、スワップ実行前にターゲット表に対する補足的なオフライン REORG がセットアップされます。 このオプションを使用してコンプレッション・ディクショナリーを改良することも考えられますが、最適なコンプレッション・ディクショナリーを作成する方法としては、デフォルトのサンプリング・アプローチの方が適していると言えます。 ただし、最適な XML コンプレッション・ディクショナリーを必要とする場合は、REORG が唯一の方法です。 REORG オプションは、SWAP フェーズまでの (SWAP フェーズを含む) 任意の時点で設定できます。
- NO_TARGET_LOCKSIZE_TABLE
- このオプションは、COPY および SWAP フェーズ中にターゲット表で LOCKSIZE 表オプションを保持しません。 デフォルトでは、ソース表でユニーク索引が指定されていない場合、ロック・オーバーヘッドを防ぐためにターゲット表で LOCKSIZE 表オプションを使用します。
- CLUSTER
- このオプションは、ADMIN_MOVE_TABLE_UTIL を使用してコピー索引が指定された場合で、ソース表にクラスタリング索引が存在するか、ソース表でユニーク索引または主キーが定義されている場合に、ORDER BY 節を使用してソース表からデータを読み取ります。注: コピー索引はクラスタリング索引をオーバーライドします。クラスタリング索引は主キーより優先して使用されます。主キーはユニーク索引より優先して使用されます。
- NON_CLUSTER
- このオプションは、コピー索引が指定されたかどうか、ソース表にクラスタリング索引が存在するかどうか、ソース表でユニーク索引または主キーが定義されているかどうかにかかわらずに、ORDER BY 節を使用せずにソース表からデータを読み取ります。注: CLUSTER オプションも NON_CLUSTER オプションも指定されていない場合、ADMIN_MOVE_TABLE は、ソース表にクラスタリング索引が存在する場合にのみ、ORDER BY 節を使用してソース表からデータを読み取ります。
- LOAD_MSGPATH <path>
- このオプションは、ロード・メッセージ・ファイル・パスを定義するために使用できます。LOAD_MSGPATH は、 以下の状況において、COPY_USE_LOAD と一緒に使用できます。
- COPY_USE_LOAD が追加のオプションなしで指定されている (つまり、デフォルトの COPY_USE_LOAD NONRECOVERABLE が想定されている)
- COPY_USE_LOAD NONRECOVERABLE が明示的に指定されている
LOAD_MSGPATH は、COPY_USE_LOAD とともにオプションのキーワードも指定されている場合は、COPY_USE_LOAD と一緒に使用することはできません。
LOAD_MSGPATH オプションが指定されていない場合、デフォルトのパスは、DB2_UTIL_MSGPATH レジストリー変数によって決定されます。
- LOAD_TEMPPATH
- このオプションは、ロード一時ファイル・パスを定義するために使用します。
- ALLOW_RLBAC
- このオプションは、行レベルのラベル・ベースのアクセス制御 (LBAC) セキュリティー・ラベルが指定されている表を移動するために使用します。 このオプションを使用する前に、十分な特権を持っていることを確認してください。すべての表の行の項目にアクセスするための特権を持っていない場合、データ損失が発生する可能性があります。
- NOT_ENFORCED
- ターゲット表でサポートされないチェック制約または外部キー (参照整合性) 制約が強制適用される表を変換する場合に、このオプションを指定します (指定しないと、エラーが返されます (SQL1667N))。
- WITHOUT_NONUNIQUE_INDEXES
このオプションを指定して、移動された表に対する非ユニークなユーザー定義索引の作成を制御します。 デフォルトの動作では、すべての索引が未変更のままになります。可能な場合には、ソース表のすべての索引がターゲット表に作成されます。 このオプションを指定すると、非ユニーク索引の作成はターゲット表でスキップされます。
このオプションは、 Db2® 11.1 モディフィケーションパック 4 フィックスパック 4 以降で使用できます。
- ADD_MODSTATE_INDEX or REMOVE_MODSTATE_INDEX or SYNC_MODSTATE_INDEX
- これらのオプションを使用して、移動された表の変更状態索引の作成または削除を制御します。 これらのオプションのいずれも指定されていない場合、ADMIN_MOVE_TABLE 操作はソース表とターゲット表の変更状態索引の状況を無視します。
このオプションは、 Db2 11.1 モディフィケーションパック 4 フィックスパック 4 以降で使用できます。
- ADD_MODSTATE_INDEX
移動した表に変更状態索引を明示的に作成できるようにするには、このオプションを指定します。
- REMOVE_MODSTATE_INDEX
移動した表の変更状態索引を明示的に削除できるようにするには、このオプションを指定します。
- SYNC_MODSTATE_INDEX
ソース表から変更状態索引の状況を自動的に採用するには、このオプションを指定します。
- 操作
- この入力パラメーターは、ストアード・プロシージャーが実行する操作を指定します。 ストアード・プロシージャーを呼び出す方法は 2 通りあります。MOVE コマンドを使用してすべての操作を一度に実行する方法と、個々のコマンドを使用して表移動を 1 ステップずつ実行する方法です。 この 2 番目の方法の主な利点は、SWAP フェーズを実際にいつ行うかを制御できるので、表をいつ一時的にオフラインにするかを決定できるという点です。 これにより、システム・アクティビティーが低い間に移動を行うことができます。 個々のコマンドを使用する場合は、INIT、COPY、REPLAY、VERIFY (オプション)、SWAP の順に呼び出す必要があります。
- MOVE: 表移動全体 (INIT、COPY、REPLAY、および SWAP 操作) を 1 ステップで実行します。
- INIT: 表移動を行えることを検査し、表移動の過程で必要なすべてのデータ (ターゲット表、ステージング表、およびソース表のトリガー) を初期化します。
- COPY: ソース表の内容をターゲット表にコピーします。 その間ソース表で行われる更新、削除、挿入はキャプチャーされ、ステージング表に保管されます。 COPY_WITH_INDEXES オプションが選択されていなければ、COPY フェーズの最後に新しい索引が作成されます。 パフォーマンスを上げるために必要であれば、REPLAY フェーズでソース表とターゲット表の副次索引も作成されます。 COPY を使用できるのは、INIT フェーズが完了した後に限られます。
- REDIRECT: ステージング表で変更をキャプチャーするのではなく、直接ターゲット表に変更を転送します。注: XML 列のある表の場合、REDIRECT コマンドは、ユニーク索引のない表の複数パーティション・システムでは機能しません。
- REVERT: ステージング表で変更をキャプチャーするオリジナルの動作に戻します。
- REPLAY: COPY フェーズの開始以降ソース表で変更された行を、ターゲット表にコピーします。 REPLAY を使用できるのは、COPY フェーズが完了した後に限られます。
- VERIFY: (オプション) ソース表とターゲット表の表の内容が等しいかどうかを検査します。 このプロセスでは、まずソース表とターゲット表の共有ロックが獲得されます。次にソース表で行われた変更が再生された後に、比較が行われます。 表にユニーク索引がある場合、このコマンドは両方の表にある列どうしですべての値を比較します。 そうでない場合、このコマンドは両方の表にある列 (LONG、LOB、または XML 列を除く) どうしですべての値を比較します。 これは高コストの操作になるので、移動に有用かどうかを慎重に判断する必要があります。 VERIFY を使用できるのは、COPY または REPLAY フェーズが完了した後に限られます。
- SWAP: ステージング表の最後のスキャン中に適用された変更の数が、プロトコル表に保管されている REPLAY_THRESHOLD 値より小さくなるまで、REPLAY フェーズを実行します。 その後ソース表が一時的にオフラインになって最終 REPLAY が完了します。次にこのコマンドはソース表とターゲット表をスワップし、表をオンラインに戻します。 SWAP を使用できるのは COPY フェーズが完了した後ですが、理想的には REPLAY フェーズが呼び出された後です。
- CLEANUP: ステージング表と、ストアード・プロシージャーによってソース表に対して作成された非ユニーク索引またはトリガーをドロップします。さらに、KEEP オプションが設定されていない場合は、ソース表もドロップします。 CLEANUP を呼び出すことができるのは、SWAP フェーズでコマンドが失敗した場合です。
- CANCEL: 複数ステップの表移動をフェーズとフェーズの間で取り消します。または、失敗した表移動操作を取り消します。 このコマンドを実行するためには、操作状況が COMPLETED 状態でも CLEANUP 状態でもないことが必要です。 CANCEL は、すべての中間データ (索引、ステージング表、ターゲット表、およびソース表のトリガー) をクリアします。
- TERM: 実行中の表移動を強制終了します。 TERM を使用すると、実行中の表移動が強制終了され、すべてのオープン・トランザクションがロールバックされ、表移動が明確な操作状況に設定されます。 その状況から、表移動を取り消す、または再開することができます。 TERM を実行するには、SYSADM、SYSCTRL、SYSMAINT のいずれかの権限が必要です。
- REPORT: 一連の値を計算して、1 つまたは複数の表移動の進行状況をモニターします。 対象になるのは、実行中の表移動の COPY フェーズと REPLAY フェーズです。 すべての表移動の値を取得する場合は、tabschema と tabname を NULL または空ストリングにする必要があります。
- ESTIMATE: このオプションは、指定されたものと同じパラメーターを使用して ADMIN_MOVE_TABLE が実行された場合の、ターゲット表の表サイズと PCTPAGESSAVED 値の見積もりを計算します。 100 万行 (または、ソース表の合計行数が 100 万未満の場合は、ソース表の合計行数) のサンプル・サイズが使用されます。 見積もりを計算するために一時ステージング表が作成されてロードされ、その後でドロップされます。 例については、下記の例のセクションを参照してください。
このオプションは、 Db2 11.1 モディフィケーションパック 4 フィックスパック 4 以降で使用できます。
- TRACE: 操作中に発生した問題を識別しようとします。
TRACE 機能を使用可能にするには、操作プロシージャーの引数に TRACE キーワードを追加します。
TRACE の実行結果は、診断データ・ディレクトリー (DIAGPATH) にあります。$ db2 "CALL SYSPROC.ADMIN_MOVE_TABLE('DARIBAZS', 't1', 'MY_TBS2', 'MY_TBS2', 'MY_TBS2', '', '', '', '', '', 'MOVE,TRACE')"
関連付けられた操作の名前 (例えば、「MOVE」) を検索することにより、結果を見つけることができます。$ ls *MOVE* 11141248.1544.AMT_DARIBAZS_t1_MOVE_trc.txt 0146932.1029.AMT_DARIBAZS_t1_MOVE_trc.txt
戻される情報
列名 | データ・タイプ | 説明 |
---|---|---|
TABSCHEMA | VARCHAR(128) | table_schema - 表スキーマ名 : モニター・エレメント |
TABNAME | VARCHAR(128) | table_name - 表名 : モニター・エレメント |
キー | VARCHAR(32) | 属性の名前。 |
価値 | CLOB(10M) | 属性の値。 |
結果セットで返されるキーと値のペアは、 表 2に記載されています。 結果セット内のユーザー構成可能キーを変更するには、ADMIN_MOVE_TABLE_UTIL ストアード・プロシージャーを使用します。
キー | 戻り値 | ユーザー構成可能 |
---|---|---|
AGENT_ID | ADMIN_MOVE_TABLE の実行時に application_handle モニター・エレメントを表示します。 | いいえ |
APPLICATION_ID | ADMIN_MOVE_TABLE の実行時に appl_id モニター・エレメントを表示します。 | いいえ |
AUTHID | ストアード・プロシージャーを呼び出したユーザーの許可 ID を表示します。 | いいえ |
CANCEL_START | CANCEL フェーズの開始時刻を表示します。 | いいえ |
CLEANUP_END | CLEANUP フェーズの終了時刻を表示します。 | いいえ |
CLEANUP_START | CLEANUP フェーズの開始時刻を表示します。 | いいえ |
COMMIT_AFTER_N_ROWS | この数の行がコピーされると COPY フェーズでコミットが実行されます。 0 は COPY 中にコミットが行われないことを意味します。 デフォルト値は 10000 です。 | はい |
COPY_ARRAY_SIZE | COPY_ARRAY_INSERT の配列サイズを指定します。 0 以下の値は、COPY_ARRAY_INSERT を使用しないことを意味します。 デフォルト値は 100 です。 | はい |
COPY_END | COPY フェーズの終了時刻を表示します。 | いいえ |
COPY_INDEXNAME | COPY フェーズでターゲット表のデータのクラスター化に使用される索引の名前。 この値は、COPY フェーズの前に設定する必要があります。 ソース表のクラスター索引が存在する場合は、その名前がデフォルトの名前になります。存在しない場合は、ソース表のユニーク索引または 1 次索引の名前がデフォルトの名前になります。 | はい |
COPY_INDEXSCHEMA | COPY フェーズでターゲット表のデータのクラスター化に使用される索引のスキーマ。 この値は、COPY フェーズの前に設定する必要があります。 ソース表のクラスター索引が存在する場合は、そのスキーマ名がデフォルト・スキーマになります。存在しない場合は、ソース表のユニーク索引または 1 次索引のスキーマ名がデフォルト・スキーマになります。 | はい |
COPY_OPTS | COPY フェーズで使用されるコピー・オプション。 | いいえ |
COPY_START | COPY フェーズの開始時刻を表示します。 | いいえ |
COPY_TOTAL_ROWS | COPY フェーズでコピーされた行の総数を表示します。 | いいえ |
DEEPCOMPRESSION_SAMPLE | このフィールドは、ソース表の圧縮が有効になっている場合に、圧縮用ディクショナリーの作成時にサンプリングするデータ量 (KB 単位) を指定します。 0 はサンプリングが行われないことを意味します。 デフォルト値は 20MB (20480 KB) です。 | はい |
INDEX_CREATION_TOTAL_TIME | 副次索引の作成に要した合計時間を表示します。 | いいえ |
INDEXNAME | 索引の名前を表示します。表に索引がない場合は空ストリングになります。 | いいえ |
INDEXSCHEMA | 索引のスキーマを表示します。表に索引がない場合は空ストリングになります。 | いいえ |
INIT_END | INIT フェーズの終了時刻を表示します。 | いいえ |
INIT_START | INIT フェーズの開始時刻を表示します。 | いいえ |
LOCK | 別のオンライン表移動ストアード・プロシージャー呼び出しがアクティブの場合に、ロック開始時刻を表示します。それ以外の場合は空です。 | いいえ |
ORIGINAL | スワップ後の元の表の名前を表示します。 | いいえ |
REORG_USE_TEMPSPACE | REORG オプションを呼び出す場合は、REORG コマンドの USE 節に TEMPORARY 表スペースを指定することもできます。 この値が指定されない場合、REORG コマンドは再編成される表と同じ表スペースを使用します。 | はい |
REPLAY_END | REPLAY フェーズの終了時刻を表示します。 | いいえ |
REPLAY_MAX_ERR_RETRIES | REPLAY フェーズでエラー (ロック・タイムアウトまたはデッドロック) が発生した場合の最大再試行回数を指定します。 デフォルト値は 100 です。 | はい |
REPLAY_START | REPLAY フェーズの開始時刻を表示します。 | いいえ |
REPLAY_THRESHOLD | REPLAY フェーズの単一反復について、ステージング表に適用される行数がこの値より小さければ、REPLAY は停止します。この動作は、その間に新しい項目が作成されたとしても変わりません。 デフォルト値は 100 です。 | はい |
REPLAY_TOTAL_ROWS | 再生された行の累積数を表示します。 | いいえ |
REPLAY_TOTAL_TIME | 行の再生に使用された累積時間 (秒単位) を表示します。 | いいえ |
STAGING | ステージング表の名前を表示します。 | いいえ |
状況 | オンライン表移動の現在の状況を表示します。
|
いいえ |
SWAP_END | SWAP フェーズの終了時刻を表示します。 | いいえ |
SWAP_MAX_RETRIES | SWAP フェーズにおける (ロック・タイムアウトまたはデッドロックが発生した場合の) 再試行の許容最大回数を指定します。 デフォルト値は 10 です。 | はい |
SWAP_RETRIES | SWAP フェーズで行われた再試行の回数を表示します。 | いいえ |
SWAP_START | SWAP フェーズの開始時刻を表示します。 | いいえ |
TARGET | ターゲット表の名前を表示します。 | いいえ |
TERM_END | TERM フェーズの終了時刻を表示します。 | いいえ |
TERM_START | TERM フェーズの開始時刻を表示します。 | いいえ |
UTILITY_INVOCATION_ID | 表移動操作の固有 ID を表示します。 | いいえ |
VERIFY_END | 検査の終了時刻を表示します。 | いいえ |
VERIFY_START | 検査の開始時刻を表示します。 | いいえ |
バージョン | ストアード・プロシージャーのバージョンを表示します。 | いいえ |
警告 | ユーザーに伝える警告を表示します。 この警告には、以下の種類があります。
|
いいえ |
REPORT 操作を使用すると、SESSION.ADMIN_MOVE_TABLE という名前の宣言済みグローバル一時表 (DGTT) にモニター値が挿入されます。
列名 | データ・タイプ | 説明 |
---|---|---|
TABSCHEMA | VARCHAR(128) | レポート対象の表移動の表スキーマ。 プロトコル表から値が取り込まれます。 |
TABNAME | VARCHAR(128) | レポート対象の表移動の表名。 プロトコル表から値が取り込まれます。 |
状況 | VARCHAR(22) | 表移動の状況。 プロトコル表から値が取り込まれます。 |
AGENT_ID | BIGINT | 実行中の表移動のエージェント ID。 プロトコル表から値が取り込まれます。 |
INIT_START | TIMESTAMP | 表移動の INIT 操作の開始時刻。 プロトコル表から値が取り込まれます。 |
COPY_THROUGHPUT | BIGINT | COPY のパフォーマンス。
|
COPY_ECT | TIMESTAMP | COPY の推定完了時刻。 COPY_THROUGPUT、COPY_TOTAL_ROWS、CARD に基づいて値が計算されます。
|
ROWS_STAGING | BIGINT | ステージング表の行数。 MON_GET_TABLE の値に基づき、rows_inserted から rows_deleted を差し引いて計算します。
|
REPLAY_THROUGHPUT | BIGINT | REPLAY のパフォーマンス。
|
INFLOW_STAGING | BIGINT | 1 秒間にステージング表から挿入される行数。
|
OUTFLOW_STAGING | BIGINT | 1 秒間にステージング表から削除される行数。
|
GROWTH_STAGING | BIGINT | ステージング表の増加。
|
REPLAY_ECT | TIMESTAMP | REPLAY の推定完了時刻。 特殊値 9999-12-31-23:59:59 は、現在の進行状況とワークロード条件では移動が終了しない、という意味です。 計算できない場合は NULL です。 |
AVG_ROWS_PER_KEY | DOUBLE | ステージング表の再生キーが影響を与える平均行数。
|
CARD | BIGINT | ソース表の行数。 SYSCAT.TABLES から値が取り込まれます。 |
REPORT 操作を使用する場合、結果セットは DGTT のサブセットになります。レポート対象が 1 つの表移動か、開始したすべての表移動かによって、内容が異なります。
- 状況
- AGENT_ID
- INIT_START
- COPY_THROUGHPUT
- COPY_ECT
- ROWS_STAGING
- REPLAY_THROUGHPUT
- INFLOW_STAGING
- OUTFLOW_STAGING
- GROWTH_STAGING
- REPLAY_ECT
- TABSCHEMA
- TABNAME
- 状況
- AGENT_ID
- COPY_ECT
- GROWTH_STAGING
ESTIMATE コマンドを実行すると、SESSION.ADMIN_MOVE_TABLE という名前の宣言済みグローバル一時表 (DGTT) に値が挿入されます。 この表に、移動後の表のサイズの見積もりが格納されます。
列名 | データ・タイプ | 説明 |
---|---|---|
TABSCHEMA | VARCHAR(128) | 表のスキーマ |
TABNAME | VARCHAR(128) | 表名 |
ROWS_SAMPLED | BIGINT | 新規ディクショナリーの作成に使用された行数 |
SOURCE_SIZE | BIGINT | KB 単位のソース表のサイズ (SOURCE_PAGESIZE * SOURCE_NPAGES)/1024 |
TARGET_SIZE | BIGINT | KB 単位のターゲット表の見積もりサイズ。 見積もりサイズは、(TARGET_NPAGES * TARGET_PAGESIZE * SOURCE_CARD / ROWS_SAMPLED)/1024 という式で計算されます。 |
SOURCE_PCTPAGESSAVED | SMALLINT | ソース表の PCTPAGESSAVED (SYSCAT.TABLES から取得された値) |
TARGET_PCTPAGESSAVED | SMALLINT | PCTPAGESSAVED の見積り (サンプルの RUNSTATS の結果) |
SOURCE_PAGESIZE | INTEGER | SYSCAT.TABLESPACES から取得された PAGESIZE (バイト単位) |
TARGET_PAGESIZE | INTEGER | SYSCAT.TABLESPACES から取得されたターゲット表の PAGESIZE (バイト単位) |
SOURCE_NPAGES | BIGINT | SYSCAT.TABLES から取得されたソース表の NPAGES |
- TABSCHEMA
- TABNAME
- ROWS_SAMPLED
- SOURCE_SIZE
- TARGET_SIZE
- SOURCE_PCTPAGESSAVED
- TARGET_PCTPAGESSAVED
使用上の注意
- Suggestions for best results when using this procedure
- 同一表スペースに複数の移動を同時に行うことは避けてください。 ターゲット表スペースでのフラグメント化の妨げになります。
- 表に対するアクティビティーが低いときに、このプロシージャーを実行してください。 並列読み取りアクセスが問題にならないように、データの一括ロードや一括削除は避けてください。
- 複数ステップの移動操作を使用してください。 INIT フェーズと COPY フェーズはいつでも呼び出すことができます。 ステージング表のサイズを小さくしておくためには、REPLAY フェーズを複数回実行します。その後、表に対するアクティビティーが低いときに SWAP を発行してください。
- ユニーク索引のない表を検討する場合や索引のない表の場合は特に、表移動の方式としてオフライン方式を選択した方が良くないか確認してください。
- Operations that are restricted on the source table
- ストアード・プロシージャーは、ソース表の何らかの変更点をキャプチャーするためにトリガーに依存します。 ソース表に影響を与える可能性がある操作の中には、トリガーを起動しないものもあります。 その結果、ストアード・プロシージャーによって簡単に検出できないような不整合がソース表とターゲット表の間に発生する可能性があります。 次のような操作がこれに該当します。
- TRUNCATE TABLE (トリガー削除時の制限なし)
- IMPORT ... REPLACE INTO ...
- LOAD TABLE
- ALTER TABLE
- REORG (オンラインおよびオフライン)
- Operations that will affect the table move operation
- 移動操作中にストアード・プロシージャーの失敗の原因となり得る操作があります。 次のような操作がこれに該当します。
- SYSTOOLSPACE 表スペースのドロップ
- ソース表のドロップ/名前変更
- INIT フェーズで OTM によって作成されたいずれかの一時オブジェクトのドロップ/名前変更 (ターゲット表、ステージング表、ソース表のトリガー、プロトコル表)
- ユーザー構成可能としてリストされていない、プロトコル表内の値の変更
- Naming convention for temporary objects
- 一時オブジェクトを作成する際の名前の競合を防ぐために、以下のような命名規則が使用されます。
- 接尾部
t
(ターゲット用)s
(ステージング用)o
(オリジナル)g
(生成済み)i
(挿入トリガーの場合)d
(削除トリガーの場合)u
(更新前トリガー)v
(更新後トリガー)
- 名前は
<characters from name of object><base64 encoded hash key over name of object><postfix>
で構成されます。 - 名前の長さがオブジェクトの長さ (128 バイト) を超えると、
<characters from name of object>
が短くなります。 - ハッシュ値はオブジェクト名から計算されて、Base64 エンコード方式と同様にエンコードされます。
サンプル:
Name of object: T1 Staging object: T1AAAAVxs Target object: T1AAAAVxt Original object: T1AAAAVxo Generated index: T1AAAAVxg (if table has no index) Insert trigger: T1AAAAVxi Delete trigger: T1AAAAVxd Before update trigger: T1AAAAVxu After update trigger: T1AAAAVxv
- 接尾部
- Online table move with compression and dictionary creation
オンライン表移動を使ってデータ・コンプレッション・ディクショナリーを作成する方法は、いくつかあります。 ソース表で圧縮が使用可能に設定されるか、または新しい表定義 (提供される場合) で圧縮がアクティブと指定される必要があります。
サンプリングを使用したディクショナリーの作成は、オンライン表移動を介したディクショナリー作成のデフォルト方式です。 表の圧縮がオンに設定されている場合、COPY 操作の実行前に、ソース表のデータのシステム・サンプリングがターゲット表に挿入されます。サンプリングされるデータの量はプロトコル表の DEEPCOMPRESSION_SAMPLE フィールドで指定されます。 その後、このランダム・サンプルに基づいてコンプレッション・ディクショナリーが作成され、結果として最適なコンプレッション・ディクショナリーになります。
サンプリング方式では XML コンプレッション・ディクショナリーが作成されないことに注意してください。 これはコンプレッション・ディクショナリーの作成に db2Inspect が使用されるためであり、現在、db2Inspect には XML コンプレッション・ディクショナリーを作成する機能がありません。 XML コンプレッション・ディクショナリーは自動ディクショナリー作成 (ADC) を介して作成されます。
自動ディクショナリー作成 (ADC) によるディクショナリー作成は、表でディクショナリーを作成する標準的な方法です。 表の圧縮をオンに設定すると、データが表に挿入されるときにデータベース・システムによりディクショナリーが自動作成されます。 その結果として、非最適コンプレッション・ディクショナリーが生成されます。 ストアード・プロシージャーがより最適なコンプレッション・ディクショナリーの作成を試みるのを防止するには、プロトコル表の DEEPCOMPRESSION_SAMPLE フィールドを 0 に設定しなければならないことに注意してください。
ディクショナリー作成の REORG メソッドを使ってディクショナリーを作成すると、COPY フェーズ中にソース表で発生したすべてのアクティビティーを反映するディクショナリーが結果として作成されます。 これは、RESETDICTIONARY オプションを設定して SWAP フェーズの前に REORG を実行することによって行われます。 最適なディクショナリーが作成されますが、表のサイズによっては REORG に長い時間がかかる可能性があります。 さらに、最適な XML ディクショナリーが必要な場合、それを生成する唯一の方法は REORG です。 サンプリング方式を使ってディクショナリーを作成することが推奨されます。
- Online table move and statistics on the table
COPY_USE_LOAD オプションを使用する場合、ソース表に統計プロファイルが設定されていると、ロード操作によってターゲット表の統計が収集されます。
統計が収集される表を移動する場合、デフォルトでは、RUNSTATS コマンドは、SWAP フェーズ中に表に対して実行されます。 ADMIN_MOVE_TABLE プロシージャーは、ターゲット表にまだ統計がない場合にのみ、統計の作成を試行します。 ターゲット表にまだ統計がない場合、SWAP フェーズの期間を最小限に短縮するには、SWAP フェーズの前に RUNSTATS コマンドを発行します。 統計プロファイルが見つかった場合、その統計プロファイルを使用して RUNSTATS コマンドが呼び出されます。 それ以外の場合は、 WITH DISTRIBUTION ON COLUMNS (...) 節と AND SAMPLE DETAILED INDEXES ALL 節を指定して RUNSTATS コマンドが呼び出されます。
COPY_STATS オプションが設定されている場合、スワップの実行前にソース表から統計がターゲット表にコピーされます。 統計をコピーすると、特にページ・サイズが変更される場合には、物理統計が不正確になる可能性があります。 ただし、新しい統計を計算するために RUNSTATS を呼び出す必要がないため、コンピューティング時間が節約されます。 また、統計が同じであるため、オプティマイザーは同じアクセス・プランを選択することができます (プランの安定性)。 コピーされる統計は、SYSSTAT.TABLES、 SYSSTAT.COLUMNS、 SYSSTAT.COLDIST、 SYSSTAT.INDEXES、および SYSSTAT.COLGROUPS カタログ・ビューの中にあります。
NO_STATS オプションが設定されている場合、ターゲット表では、RUNSTATS コマンドは発行されず、統計はコピーされません。 AUTO_RUNSTATS または AUTO_STMT_STATS を使用すると、データベース・システムにより新しい統計が自動的に作成されます。
- Online table move with LOAD used for COPY
COPY_USE_LOAD オプションを使用するときに、サブオプションを指定しない場合、または NONRECOVERABLE を選択する場合には、リカバリー可能性を確保するために、SWAP フェーズの前にターゲット表スペースのバックアップを実行する必要があります。 次のようなステートメントを発行することで、バックアップを作成できます。
BACKUP DB dbname TABLESPACE targetDataTablespace, targetIndexTablespace, targetLongTablespace ONLINE TO <destination>
- Online table move with recoverable LOAD in HADR environment
HADR 環境におけるリカバリー可能 LOAD の宛先がスタンバイで見つからない場合、表スペースはアクセス不能になります。 この状態は 1 次には通知されないので、スタンバイは最新であると想定されるかもしれませんが、スタンバイへのフェイルオーバーが発生した場合、表にはアクセスできません。
- Online table move with generated columns
表移動ストアード・プロシージャーは、ソース表の中の生成済み列を特別な方法で扱います。 以下の段落で、さまざまな種類の生成済み列がどのように扱われるかを説明します。
行変更タイム・スタンプ列は、行が最後に変更された時間を表すタイム・スタンプを保持する列です。
ソース表で行変更タイム・スタンプ列が見つかった場合、表移動操作が完了した後のこの列の値は、表移動操作の前と同じではありません。 表移動後のこの列の値は、新しい表オブジェクトで行が挿入/更新された時間を表すようになります。 これは、行が実際に変更されようとしており、行変更タイム・スタンプ列の値はこれらの変更を反映する必要があるためです。 ADMIN_MOVE_TABLE の ALLOW_READ_ACCESS オプションおよび COPY_USE_LOAD オプションを使用する場合は、ソース表の行変更タイム・スタンプ列の内容が、移動中に保持されます。
新しい表定義が提供される場合、ソース表で列が行変更タイム・スタンプ列と定義されていても、新しい表定義でそのように定義されていなければ、その列は行変更タイム・スタンプ列になりません。
ID 列は、表に行が挿入されるときに列に関する値を自動生成する列です。
ソース表で ID 列が見つかった場合、表移動操作が完了した後のこの列の値は、表移動操作の前に存在した値と同じになります。 ただし、ソース表の ID 列の
最終/次の
値を判別する方法はありません。 したがって、ターゲット表に ID 列を作成すると、値生成は次のキャッシュなし
値から開始するように設定されます。 これはデータベース再始動 (停止/開始) のときに発生する動作と同じです。 この動作は、 ALTER TABLE ステートメントのID 変更
セクションのSET NO CACHE または CACHE integer-constant
見出しの下に記載されています。列はターゲット表で最初に通常の列として作成された後、SWAP フェーズの短いオフライン期間中に ID 列に変更されます。 こうする理由は、列が GENERATED ALWAYS として作成された可能性があるためです。そのような場合、ストアード・プロシージャーはソース表の実際の値をターゲット表の列に正確に挿入できません。
新しい表定義が指定される場合、列が新しい表定義で ID 列として指定されていれば、ストアード・プロシージャーは ID 列の定義がソース表の列の定義と一致するかどうか検査します。 一致する場合には、ストアード・プロシージャーは上記の説明のような処理を続けます。 一致しない場合、ストアード・プロシージャーは新しい ID 列定義を使用します。 この場合、ID 列カウンターは指定された開始値から再び開始されることに注意してください。ただし、列にある行の現在の値は引き続き同じです。
新しい表定義が指定され、ソース表で ID 列と指定されている列が新しい表定義では ID 列と指定されていない場合には、ストアード・プロシージャーはその列を引き続き ID 列としてターゲット表に作成します (その際、ソース表で見つかった仕様と同じものが使われます)。 これにより、ユーザーは既存の ID 列の定義を検索して新しい表定義にそれを再び入力する必要がなくなります。 ユーザーがこの列を ID 列として保持したくない場合には、ストアード・プロシージャーの呼び出し後にターゲット表を変更して、列の ID 仕様を除去することができます。
式列は、表に行が挿入されるときに、式に基づいて列の値を自動生成する列です。
ソース表で式列が見つかった場合、表移動操作が完了した後のこの列の値は、表移動操作の前に存在した値と同じになります。
列はターゲット表で最初に通常の列として作成された後、SWAP フェーズの短いオフライン期間中に式列に変更されます。 こうする理由は、式列が GENERATED ALWAYS として作成されて、その列への挿入が禁止されるためです。 ただし、ターゲット表の列を式列に変更するために、ターゲット表の保全性の設定が一時的にオフになります。 ALTER ステートメントが実行された後、GENERATED COLUMN IMMEDIATE UNCHECKED オプションを使って保全性が元どおりオンに設定されます。
表名を含む列式 (例えば表 T1 での式 (T1.C *5)) は、ソース表とターゲット表のどちらの場合も、ストアード・プロシージャーによってサポートされません。 この解決策として、ユーザーは列を修正して、表名を含まないように式を変更することができます。
新しい表定義が指定される場合、列が新しい表定義で式列として指定されていれば、ストアード・プロシージャーは基本的なストリング比較を実行することにより、式列の定義がソース表の列の定義と一致するかどうか検査します。 一致する場合には、ストアード・プロシージャーは上記の説明のような処理を続けます。 一致しない場合、ストアード・プロシージャーは新しい式列の定義を使用します。 列にある行の現在の値は引き続き同じであることに注意してください。
新しい表定義が指定され、ソース表で式列と指定されている列が新しい表定義では式列と指定されていない場合には、ストアード・プロシージャーはその列を引き続き式列としてターゲット表に作成します (その際、ソース表で見つかった仕様と同じものが使われます)。 これにより、ユーザーは既存の式列の定義を検索して新しい表定義にそれを再び入力する必要がなくなります。 ユーザーがこの列を式列として保持したくない場合には、ストアード・プロシージャーの呼び出し後にターゲット表を変更して、列の式仕様を除去することができます。
- Online table move and objects and privileges that are preserved
表移動が実行されるとき、ストアード・プロシージャーは以下のオブジェクトを保持します。
- Views
- SWAP フェーズでの短いオフライン期間中に、ビューはソース表からドロップされてターゲット表に再作成されます。
- Triggers
- SWAP フェーズでの短いオフライン期間中に、トリガーはソース表からドロップされてターゲット表に再作成されます。
- Indexes
- 表移動の操作中には、ターゲット表に索引が何度か作成されます。 まず、索引は COPY フェーズの終わりに作成されます。ただし COPY_WITH_INDEXES オプションが設定されている場合には、COPY フェーズの開始時に索引が最初に作成されます。 そして、ストアード・プロシージャーは、新規作成された索引がないか REPLAY および SWAP フェーズの開始時に検索します。このとき、索引名だけを使用して判別します。 新しい索引が見つかった場合、それらの索引が作成されます。 ただし、ストアード・プロシージャーは、ソース表からいずれかの索引が削除されたかどうかを検査します。
- Constraints
- (参照制約を除く) 制約は、同じ制約名を使ってターゲット表で再作成されます。 ただし、ユニーク制約と主制約の場合、基礎となる索引名はソース表の索引名と異なる可能性があります。
- Table flags
- ソース表の表フラグは、INIT フェーズでターゲット表が作成されると直ちにターゲット表に作成されます。 該当するフラグは、「append_mode」、 「locksize」、 「volatile」、 「compression」、 「datacapture」、 「pctfree」、 「logindexbuild」、 「owner」、および「droprule」です。 その後、これらのフラグは COPY フェーズの終わりと SWAP フェーズ中に検査されます。 フラグの内容が変更されている場合は、それらのフラグがターゲット表で更新されます。
データベースをリカバリー可能にして、しかも HADR セットアップとの互換性を保つために、ADMIN_MOVE_TABLE はソースの NOT LOGGED INITIALLY 情報をターゲット表にコピーしません。
- Grant/Revoke
- SWAP フェーズ中に、ストアード・プロシージャーは SYSCAT.TABAUTH 内の項目を調べて、表に関するユーザー/グループ/ロールへの特権付与を複製します。
- Usage lists
- SWAP フェーズでの短いオフライン期間中に、ソース表またはソース表の索引に対して定義された使用量リストがドロップされ、ターゲット表に対して再作成されます。 移動前にアクティブ状態だった使用量リストは、移動後にすべて再びアクティブ化されます。
データベースの auto_revalidation が有効で、かつ USE_AUTO_REVAL オプションが設定されていない場合 (auto_revalidation が有効である場合のデフォルト)、ビューは上記のようにドロップされません。 代わりに、ビューは保持されて、auto_revalidation によって再有効化されます。 トリガーは、ストアード・プロシージャーによってドロップされ、再作成されます。これは、現在、サブジェクトとして定義されたトリガーを持つ表の名前変更に関する制限があるためです。 また、auto_reval 構成パラメーターが DEFERRED に設定されている場合、ストアード・プロシージャーの完了後に、無効なビューが存在することがあります。 オブジェクトは、次のアクセス時に自動的に再有効化されます。あるいは、ADMIN_REVALIDATE_DB_OBJECTS を呼び出して、データベース内の全オブジェクトを再有効化することができます。
- Online table move with clustering over an index
ターゲット表を索引によってクラスター化することが可能です。 ソース表にクラスター索引が存在する場合、デフォルトでは、その索引によってクラスター化されます。 INIT フェーズ後にこのデフォルトを変更することができます (これはフェーズ全体にわたるオンライン表移動の実行を意味します)。 クラスター索引が存在しない 1 つの MOVE フェーズでオンライン表移動を呼び出した場合、ストアード・プロシージャーはユニーク/主索引を使ってターゲット表をクラスター化します。 クラスター索引が存在する場合、ストアード・プロシージャーはクラスター索引を使ってターゲット表をクラスター化します。
ソース表にクラスター索引が存在する場合、ターゲット表をクラスター索引でクラスター化しないことも可能です。そうするには、複数ステップから成る移動を実行して INIT フェーズ後にキー項目 COPY_INDEXSCHEMA および COPY_INDEXNAME をプロトコル表から削除します。
任意の副次索引によってターゲット表をクラスター化できます。そうするには、複数ステップから成る移動を実行し、適切な索引を使ってプロトコル表のキー項目 COPY_INDEXSCHEMA および COPY_INDEXNAME を挿入/更新することで、ターゲット表をクラスター化します。
- Online table move in a Db2 pureScale® environment
- pureScale 環境で変数 DB2_INDEX_CREATE_ALLOW_WRITE を YES/ON に設定することにより、並行書き込みアクセスを有効にすることができます。
詳しくは、以下のセクションを参照してください。
DB2_INDEX_CREATE_ALLOW_WRITE.並行書き込みアクセスが有効になっていない場合は、 Db2 pureScale 環境 で ADMIN_MOVE_TABLE プロシージャーを実行する前に、以下のアクションを実行してください。
- ソース表に索引が定義されていない場合は、表を移動する前に、索引を手動で作成します。
- Changing index attributes
既存のいずれかの属性を変更する必要が生じた場合 (例えば索引のクラスタリング、索引の圧縮、グローバル索引からローカル索引への変更、またはその逆への変更)、ユーザーは複数ステップから成る移動操作中に手動で属性を変更できます。
これを行うには、複数ステップから成る移動で INIT および COPY 移動フェーズを実行します。 その後、ターゲット表の索引を手動で変更します。 ターゲット表の名前はプロトコル表の中にあります。 変更が完了した後、REPLAY および SWAP フェーズから再開します。
- Using the ADMIN_MOVE_TABLE procedure to convert row-organized tables into column-organized tables
- 表は、以下のいずれかの方法で変換できます。
- カラム・オーガナイズ ターゲット表を指定する
- organize_by_clause パラメーターに ORGANIZE BY COLUMN 節を指定
行オーガナイズ 表を カラム・オーガナイズ 表に変換する場合、照会に対する適用可能な カラム・オーガナイズ 表の制限 (つまり、制限された分離レベル) は、処理の終了時に、新しい表が照会に対して可視になった後に有効になります。
カラム・オーガナイズ 表のユニーク索引および非ユニーク索引は、索引のオプションがそれらの表でサポートされている場合、表とともに移動されます。 以下の索引機能は カラム・オーガナイズ 表ではサポートされず、索引が行オーガナイズから カラム・オーガナイズに変換されるときには無視されます。- RANDOM キー順序
- CLUSTER 節 (clause)
- INCLUDE 列
その他のサポートされていないフィーチャーは、SQL2103N や SQL1667N などの sqlcodes で移動が失敗する結果になります。
ADMIN_MOVE_TABLE プロシージャーでは、変更をキャプチャーするためにソース表でトリガーが必要です。 ただし、このタイプのトリガーは カラム・オーガナイズ 表ではまだサポートされていないため、 カラム・オーガナイズ 表の移動は、ALLOW_READ_ACCESS オプションを使用する場合にのみ実行できます。 ALLOW_READ_ACCESS オプションを使用すると、移動の進行中に、ソース表での削除操作および挿入操作は許可されません。
PARTITION BY RANGE 節は、 カラム・オーガナイズ 表ではサポートされません。 PARTITION BY RANGE 節を無視するには、data_part パラメーターに負符号 (-) を指定します。
organize_by_clause パラメーターに ORGANIZE BY COLUMN 節を指定すると、MDC 表または ITC 表は カラム・オーガナイズ 表に変換されます。
ロード・ユーティリティーを使用して カラム・オーガナイズ ・ターゲット表にデータを追加する場合、ADMIN_MOVE_TABLE プロシージャーは、ロード・ユーティリティーに適用される カラム・オーガナイズ 表の制限を継承します。
REORG オプションはサポートされていません。
表に外部キー (参照整合性) 制約が定義されている場合、外部キー関係のチェックが必要になるため、SWAP フェーズのオフライン期間が長くなります。
制約事項
- ソース表としてサポートされるのは単純な表のみです。 マテリアライズ照会表、型付き表、範囲がクラスター化された表、システム表、ビュー、ニックネーム、別名は許可されません。
- ソース表が、行および列のアクセス制御 (RCAC) とも呼ばれる微細化されたアクセス制御 (FGAC) によって保護されている場合、ストアード・プロシージャーは機能しません。
- ソース表がマテリアライズ照会表 (MQT) によって参照されている場合、ストアード・プロシージャーは機能しません。
- ソース表が履歴表である場合、ストアード・プロシージャーは機能しません。
- 式に基づくキーを使用する索引が定義されている表を移動することはできません。
- イベント・モニターが現在アクティブになっている表を移動することはできません。
- ユニーク索引のない表は、複雑で高コストになる可能性がある再生フェーズの対象となります。
- 生成された列を MDC 仕様の一部にすることはできません。
- ディスク・スペース所要量が大きいことに気を付けてください。このプロシージャーは表と索引の 2 種類のコピーを作成するほか、ステージング表とログ・スペースも作成します。
- ほとんどのデータは
選択から挿入
フォームを使用して新しい表に移動されるため、コピーのパフォーマンスが問題になる可能性があります。 - ユニーク索引のない表に対する VERIFY 操作は、LOB のある表では機能しません。
- SYSTOOLSPACE 表スペースが作成されていて、「PUBLIC」でアクセスできなければなりません。
- ソース表に対する長時間の実行トランザクションのために、COPY フェーズでロック・タイムアウトになる可能性があります。
- SWAP フェーズでデッドロックが発生する可能性があります。
- ソース表に非ユニーク索引があり、更新処理がいくつも行われると、デッドロックが発生する可能性があります。
- VARCHAR2 サポートが有効になっている場合、データベースは空ストリングと NULL を等価の値として扱いますが、単一ブランクは別個の値です。 VARCHAR2 サポートが有効になっている場合、mdc_cols、partkey_cols、および data_part パラメーターは、単一ブランクを空ストリングおよび NULL とは異なるものとして使用することになります。
- SET INTEGRITY PENDING 状態の表は、移動できません。
- XSR オブジェクトが従属している表は、移動できません。
- 3 部構成の名前を持つ CHECK 制約はサポートされていないので、SQL0205 が返されます。 代わりに、列名だけ使用してください。
- PARTITION BY RANGE 節は、カラム・オーガナイズ表および GENERATED 節を含む列ではサポートされません。
例
- この例は、最初の方法でストアード・プロシージャーを呼び出し、スキーマ SVALENTI にある T1 という名前の表を移動します。ここでは、ターゲット表がプロシージャー内で定義されます。
CALL SYSPROC.ADMIN_MOVE_TABLE( 'SVALENTI', 'T1', 'ACCOUNTING', 'ACCOUNT_IDX', 'ACCOUNT_LONG', '', '', '', 'CUSTOMER VARCHAR(80), REGION CHAR(5), YEAR INTEGER, CONTENTS CLOB', '', 'MOVE')
以下に、この照会の出力例を示します。Result set 1 ------------ KEY VALUE ------------------------ ------------------------------------- AUTHID SVALENTI CLEANUP_END 2009-02-13-11.34.07.609575 CLEANUP_START 2009-02-13-11.34.07.369331 COPY_END 2009-02-13-11.34.05.148018 COPY_OPTS BY_KEY,OVER_INDEX COPY_START 2009-02-13-11.34.04.841292 COPY_TOTAL_ROWS 100 INDEXNAME T1_INDEX INDEXSCHEMA SVALENTI INDEX_CREATION_TOTAL_TIME 0 INIT_END 2009-02-13-11.34.04.552875 INIT_START 2009-02-13-11.34.03.013563 PAR_COLDEF CUSTOMER VARCHAR(80), REGION CHAR(5), YEAR INTEGER, CONTENTS CLOB REPLAY_END 2009-02-13-11.34.06.198369 REPLAY_START 2009-02-13-11.34.05.164582 REPLAY_TOTAL_ROWS 100 REPLAY_TOTAL_TIME 5 STATUS COMPLETE SWAP_END 2009-02-12-11.34.07.214447 SWAP_RETRIES 0 SWAP_START 2009-02-13-11.34.06.244506 VERSION 09.07.0000 22 record(s) selected. Return Status = 0
- この例は、2 番目の方法でストアード・プロシージャーを呼び出し、先ほどの例と同じ表を移動します。ここでは、ターゲット表がプロシージャー外で作成され、その後 target_tabname パラメーター内の名前が付けられます。最初のステップとして、手動で表を作成します。
次に、ストアード・プロシージャーを呼び出し、ターゲット表の名前を渡します。CREATE TABLE SVALENTI.T1_TARGET ( CUSTOMER VARCHAR(80), REGION CHAR(5), YEAR INTEGER, CONTENTS CLOB) IN ACCOUNTING INDEX IN ACCOUNT_IDX LONG IN ACCOUNT_LONG'
CALL SYSPROC.ADMIN_MOVE_TABLE( 'SVALENTI', 'T1', 'T1_TARGET', '', 'MOVE')
以下に、この照会の出力例を示します。Result set 1 ------------ KEY VALUE ------------------------ ------------------------------------------- AUTHID SVALENTI CLEANUP_END 2009-02-13-11.37.49.283090 CLEANUP_START 2009-02-13-11.37.49.125786 COPY_END 2009-02-13-11.37.47.806060 COPY_OPTS BY_KEY,OVER_INDEX COPY_START 2009-02-13-11.37.47.446616 COPY_TOTAL_ROWS 0 INDEXNAME T1_INDEX INDEXSCHEMA SVALENTI INDEX_CREATION_TOTAL_TIME 1 INIT_END 2009-02-13-11.37.47.287703 INIT_START 2009-02-13-11.37.46.052952 PAR_COLDEF using a supplied target table so COLDEF could be different REPLAY_END 2009-02-13-11.37.48.785503 REPLAY_START 2009-02-13-11.37.47.822109 REPLAY_TOTAL_ROWS 0 REPLAY_TOTAL_TIME 0 STATUS COMPLETE SWAP_END 2009-02-13-11.37.48.977745 SWAP_RETRIES 0 SWAP_START 2009-02-13-11.37.48.825228 VERSION 09.07.0000 22 record(s) selected. Return Status = 0
- この例では、ADMIN_MOVE_TABLE ストアード・プロシージャーを使用して、 行オーガナイズ STAFF 表を カラム・オーガナイズ 表に変換します。 この例では、既存の STAFF2 表をターゲット表として指定します。
CALL SYSPROC.ADMIN_MOVE_TABLE( 'OTM01COL', 'STAFF', 'STAFF2', 'COPY_USE_LOAD', 'MOVE' )
- この例では、ADMIN_MOVE_TABLE ストアード・プロシージャーを使用して、ターゲット表を指定せずに 行オーガナイズ STAFF 表を カラム・オーガナイズ 表に変換します。 ORGANIZE BY COLUMN 節がパラメーターとして指定され、ターゲット表が カラム・オーガナイズ 表として作成されます。
CALL SYSPROC.ADMIN_MOVE_TABLE( 'OTM01COL', 'STAFF', '', '', '', 'ORGANIZE BY COLUMN', '', '', '', 'COPY_USE_LOAD', 'MOVE' )
- ADMIN_MOVE_TABLE ストアード・プロシージャーを使用して、 行オーガナイズ ACT 表を カラム・オーガナイズ 表に変換します。 次の例のように、ACT 表が、強制適用される外部キー制約を定義するように変更されました。
適用される外部キー (参照整合性) 制約は カラム・オーガナイズ 表ではサポートされないため、ターゲット表を カラム・オーガナイズ 表として作成できるように NOT_ENFORCED オプションを指定する必要があります。ALTER TABLE "TANJINXU"."ACT" ADD CONSTRAINT "RPAA" FOREIGN KEY ("ACTNO") REFERENCES "TANJINXU"."ACT" ("ACTNO") ON DELETE RESTRICT ON UPDATE NO ACTION ENFORCED ENABLE QUERY OPTIMIZATION
CALL ADMIN_MOVE_TABLE( 'TANJINXU', 'ACT', '', '', '', 'ORGANIZE BY COLUMN', '', '', '', 'COPY_USE_LOAD,NOT_ENFORCED', 'MOVE' )
- 以下の照会を使用して、mytable という名前の表に関する表移動の状況を確認します。
SELECT * FROM SYSTOOLS.ADMIN_MOVE_TABLE WHERE KEY ='STATUS' AND TABNAME='mytable'
状況が COMPLETED でない場合は、以下のように、該当するオプションを指定してストアード・プロシージャーを再度呼び出すことができます。- プロシージャーの状況が INIT の場合、INIT 操作を使用し、続いてその他のステップを実行します。
- プロシージャーの状況が COPY の場合、COPY 操作を使用し、続いてその他のステップを実行します。
- プロシージャーの状況が REPLAY の場合、REPLAY または SWAP オプションを使用します。
- プロシージャーの状況が CLEANUP の場合、CLEANUP オプションを使用します。
オンライン表移動の状況が COMPLETED でも CLEANUP でもない場合は、CANCEL オプションを指定してストアード・プロシージャーを再度呼び出すことができます。
状況が COMPLETED ではなく、MOVE 操作が指定されていた場合は、操作の CANCEL を実行してからやり直します。MOVE 操作では 1 つのステップで INIT、COPY、REPLAY、SWAP の各操作が実行されるためです。
- 単一表 ROW->BLU の見積もりをします
操作 ESTIMATE を指定して ADMIN_MOVE_TABLE を呼び出します。 ソース表は行オーガナイズ表です。 ターゲット表はカラム・オーガナイズ表です。 ディクショナリーが新規作成されたターゲット表の見積もりサイズは、4739 KB です。 ページ節減率の見積もりは、61% から 92% に増加しました。 この見積もりには、ソース表の 100 万行がサンプルとして使用されました。
正常に完了した後に、セッション表を照会します。call sysproc.admin_move_table('MJUNGFER','ZMJ1','','','','ORGANIZE BY COLUMN','','','','','ESTIMATE') Result set 1 -------------- TABSCHEMA TABNAME ROWS_SAMPLED SOURCE_SIZE TARGET_SIZE SOURCE_PCTPAGESSAVED TARGET_PCTPAGESSAVED --------- ------- -------------------- -------------------- -------------------- -------------------- -------------------- MJUNGFER ZMJ1 1000000 23104 4739 61 92 1 record(s) selected. Return Status = 0
select substr(tabschema,1,20) as tabschema, substr(tabname,1,20) as tabname, SOURCE_SIZE, TARGET_SIZE, SOURCE_PCTPAGESSAVED, TARGET_PCTPAGESSAVED from session.admin_move_table TABSCHEMA TABNAME SOURCE_SIZE TARGET_SIZE SOURCE_PCTPAGESSAVED TARGET_PCTPAGESSAVED -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- MJUNGFER ZMJ1 23104 4739 61 92 1 record(s) selected.
- 単一表 BLU->BLU の見積もりをします操作 ESTIMATE を指定して ADMIN_MOVE_TABLE を呼び出します。 ソース表とターゲット表は両方ともカラム・オーガナイズ表です。 ディクショナリーが新規作成されたターゲット表の見積もりサイズは、3797 KB です。 ページ節減率の見積もりは、あまり変化していません。 この見積もりには、ソース表の 100 万行がサンプルとして使用されました。
正常に完了した後に、セッション表を照会します。call sysproc.admin_move_table('MJUNGFER','ZMJ1','','','','','','','','','ESTIMATE') Result set 1 -------------- TABSCHEMA TABNAME ROWS_SAMPLED SOURCE_SIZE TARGET_SIZE SOURCE_PCTPAGESSAVED TARGET_PCTPAGESSAVED --------- ------- -------------------- -------------------- -------------------- -------------------- -------------------- MJUNGFER ZMJ1 1000000 4272 3797 91 92 1 record(s) selected. Return Status = 0
select substr(tabschema,1,20) as tabschema, substr(tabname,1,20) as tabname, SOURCE_SIZE, TARGET_SIZE, SOURCE_PCTPAGESSAVED, TARGET_PCTPAGESSAVED from session.admin_move_table TABSCHEMA TABNAME SOURCE_SIZE TARGET_SIZE SOURCE_PCTPAGESSAVED TARGET_PCTPAGESSAVED -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- MJUNGFER ZMJ1 4272 3797 91 92 1 record(s) selected.
- 単一表 BLU->ROW の見積もりをします操作 ESTIMATE を指定して ADMIN_MOVE_TABLE を呼び出します。 ソース表はカラム・オーガナイズ表です。 ターゲット表は行オーガナイズ表です。 ディクショナリーが新規作成されたターゲット表の見積もりサイズは、18269 KB です。 ページ節減率の見積もりは、91% から 61% に減少しました。 この見積もりには、ソース表の 100 万行がサンプルとして使用されました。
正常に完了した後に、セッション表を照会します。call sysproc.admin_move_table('MJUNGFER','ZMJ1','','','','','','','','ALLOW_READ_ACCESS','ESTIMATE') Result set 1 -------------- TABSCHEMA TABNAME ROWS_SAMPLED SOURCE_SIZE TARGET_SIZE SOURCE_PCTPAGESSAVED TARGET_PCTPAGESSAVED --------- ------- -------------------- -------------------- -------------------- -------------------- -------------------- MJUNGFER ZMJ1 1000000 4216 18269 91 61 1 record(s) selected. Return Status = 0
select substr(tabschema,1,20) as tabschema, substr(tabname,1,20) as tabname, SOURCE_SIZE, TARGET_SIZE, SOURCE_PCTPAGESSAVED, TARGET_PCTPAGESSAVED from session.admin_move_table TABSCHEMA TABNAME SOURCE_SIZE TARGET_SIZE SOURCE_PCTPAGESSAVED TARGET_PCTPAGESSAVED -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- MJUNGFER ZMJ1 4216 18269 91 61 1 record(s) selected.
- スキーマ全体の見積もりをします
call sysproc.admin_move_table('MJUNGFER','%',' ',' ',' ',' ',' ',' ',' ',' ','ESTIMATE')
- 表のサブセットの見積もりをします
call sysproc.admin_move_table('SAPBW1','/BIC/%',' ',' ',' ',' ',' ',' ',' ',' ','ESTIMATE')