DB2 の一時的なテーブルの移行

HCOSS は、DECLARE GLOBAL TEMPORARY TABLE 文をサポートします。これを実行すると、HCOSS によって SQL Server の一時的なテーブルが作成されます。SQL Server の一時的なテーブルの名前は常に # から始まるので、HCOSS はメインフレーム上のテーブルを参照するために使用される同じ名前を持つ SQL Server 同義語も (そのような同義語がない場合) 作成します。これにより、テーブルを参照する文を変更せずにそのまま維持できます。一時的なテーブルがデータベースから削除されても、同義語は残ります。このトピックで後述するように、HCOSS はこのプロセスを使用して、一時的なテーブルが再び使用される際の同時性を高めることができます。

HCOSS は、CREATE 文を使用して作成された一時的なテーブルの直接的な移行をサポートしません。ただし、CREATE 文を DECLARE 文に変換し、それを変換された CREATE 文によって作成されたテーブルを参照するプログラムの始めに追加することで、このような一時的なテーブルに対応できます。DECLARE 文をプログラムに追加するときは、次のガイドラインが適用されます。
  • DECLARE 文は SESSION スキーマに限定されません。
  • テーブルを複数回 DECLARE できます。
  • ON COMMITを含んでいる (PRESERVE に設定されているものを除く) DECLARE 文は、COMMIT または ROLLBACK を行うクライアントまたはストアド プロシージャの中に表記されなければなりません。
DECLARE 文を該当するプログラムに追加すると、HCOSS はテーブルを次のように変換します。
  • DECLARE GLOBAL TEMPORARY TABLE が実行されると、HCOSS は一時的なテーブルと付随する同義語を作成します (そのような同義語が存在しない場合)。同義語が作成されると、HCOSS はスキーマをロックし、次の COMMIT または ROLLBACK までそれをデータベースに保持します。
    注:スキーマのロックによってパフォーマンスに問題が生じることが判明している場合は、DECLARE GLOBAL TEMPORARY TABLE を実行する前に同義語を作成できます。
  • SQL Server の一時的なテーブルの名前は常に # から始まるので、HCOSS はメインフレーム コードで使用される元のテーブル名を使い先頭に # 記号を付けた一時的なテーブルの名前を生成します。例えば、元のテーブル名が EMP の場合、SQL Server の一時的なテーブルの名前は #EMP となります。
  • 作成された同義語は、SESSION スキーマ参照で使用されます。例えば、メインフレーム コードが INSERT INTO SESSION.EMP で HCOSS 同義語が TEMPDB の場合、HCOSS は SESSION.EMP にある TEMPDB.#EMP を参照します。