2017-07-14 11 views
0

かなりのデータを移動させるデータベース移行をテストしており、スキーマ(表の変更)も変更しています。 DB2ではREORG TABLEは暗黙的にトランザクションをコミットするようです

、あなたがテーブルを変更するたびに、あなたがそうでなければ、あなたが後にテーブルと何もできない

CALL SYSPROC.ADMIN_CMD('REORG TABLE tablename'); 

を呼び出す必要があります。

このテストでは、最後にROLLBACKを実行できるように、単一のSQLトランザクションで移行を実行しています。

しかし、REORG TABLEコマンドは、その特定のテーブルのトランザクションを暗黙のうちにコミットしているようです。私がロールバックした後、REORG TABLEと呼ばれるテーブルのスキーマが永続化されました。

DB2上でSQLトランザクションでマイグレーションがテストされていますか?

+0

すべてのALTER TABLEの後にREORGを実行する必要はありません。 REORGを呼び出すためにADMIN_CMDを呼び出す必要はありません。何をしたいですか?何を変更/移行したいですか? –

+0

これに続いて(http://db2commerce.com/2014/05/06/db2-basics-what-is-a-reorg/)私は私の場合、reorgを呼び出す必要があります。テーブル)をヌル可能にし、データをヌルにできないようにし、古いテーブルに古いカラムをドロップするよりも、データをそれらに移動します。 ADMIN_CMDを使用せずにreorgを呼び出すと、以前は動作していないようですが、再試行しませんでした。 – mstaessen

+0

個々のステートメントを追加し、トランザクションをどこに置くべきですか。 –

答えて

0

DB2 reorgは(それをトリガーする方法に関係なく)コマンドであり、内部的に独自のトランザクション制御を持っています。したがって、ROLLBACKを使用してreorgの活動を元に戻すことはできません。 SQL文とDDLのみがトランザクション制御下にあります。 reorgのアクティビティーまたはマイグレーション全体をバックアウトする場合は、Point-in-Timeリストアを使用するか、非プロダクション環境にリストアされた本番データベースの可用性テストを実行することができます。

+0

それは私がやったことです:バックアップ&復元... – mstaessen

+0

だから、DML文はSQLではありませんか? DDL文はどうですか?トランザクション制御下にありますか? – mustaccio

+0

修正:SQLとDDLのみがDB2ミッドレンジのトランザクション制御下にあります。 – mao

関連する問題