次の方法で共有


第 4 章 「DTS デザイナ (2)」 ~ DTS 編 ~

NEC

Eラーニング事業部

鈴木 智行

2002 年 12 月 25 日

目次

1. DTS トランザクション 1. DTS トランザクション
2. DTS トランザクションに関わる DTS デザイナにおける設定 2. DTS トランザクションに関わる DTS デザイナにおける設定
2-1 DTS パッケージのプロパティ 2-1 DTS パッケージのプロパティ
2-2 DTS タスクのワークフロープロパティ 2-2 DTS タスクのワークフロープロパティ
3. DTS トランザクションの設定例 3. DTS トランザクションの設定例
4. パラメータ化クエリと DTS グローバル変数の利用 4. パラメータ化クエリと DTS グローバル変数の利用
5.まとめ 5.まとめ

1. DTS トランザクション

DTS パッケージでは複数の DTS タスクを 1 つのトランザクションとして実現し、更新の一貫性を保証することができます。この時 DTS は Microsoft 分散トランザクションコーディネータ (MS DTC) と連携するため、Distributed Transaction Cordinator サービスが開始していることが条件の 1 つですが、簡単な設定で 1 台のサーバーはもちろん複数のサーバーで分散トランザクションを実現することができます。ただし、すべてのサーバー (接続)、すべてのタスクでサポートされているわけではなく、表 1-1 に示す種類のみが DTS トランザクションをサポートしているので注意が必要です。

DTS 接続

DTS タスク

Microsoft OLE DB Provider for SQL Server
ODBCデータソース
Microsoft データリンク

一括挿入タスク
データドリブンクエリタスク
データ変換タスク
パッケージ実行タスク
SQL 実行タスク
メッセージキュータスク

1-1 DTS トランザクションがサポートしている接続、タスクの種類

2. DTS トランザクションに関わる DTS デザイナにおける設定

DTS デザイナではいろいろな箇所に DTS トランザクションに影響を与える設定がありますが、その中の代表的なものを紹介します。

2-1 DTS パッケージのプロパティ

DTS パッケージプロパティは DTS デザイナを起動し、[パッケージ] メニューから [プロパティ] をクリックした後、[詳細設定] タブでパッケージ全体に関わる設定を定義します (画面 2-1-1)

画面

画面 2-1-1 [ 詳細設定 ] タブでの設定

  •   [トランザクションを使用]

    このチェックボックスにチェックすると DTS トランザクションが有効になります。DTS トランザクションを利用したい場合は必ずチェックしてください。既定ではトランザクションは有効になっています。

  •   [パッケージ正常終了時にコミットする]

    このチェックボックスにチェックすると、有効になっているトランザクション内で保留されている更新が、パッケージが正常終了したという条件でコミットされます。

  •   [トランザクション分離レベル]

DTS トランザクションで利用するトランザクション分離レベルを指定します。データの一貫性をどれくらいのレベルで保つためにも使用されますが、分離レベルの設定によって同時実行性も変化します。[chaos]、[Read Uncommitted]、[Read Committed]、[Repeatable Read]、[Seriarizable] が選択肢にありますが、[chaos] は SQL Server ではサポートしてません。トランザクション分離レベルは、[Read Uncommitted]→[Read Committed] →[Repeatable Read] →[Seriarizable]の順に高くなります。DTS トランザクションの既定の分離レベルは [Read Committed] です。

2-2 DTS タスクのワークフロープロパティ

DTS タスクのワークフロープロパティでは、個々のタスクに関わる設定を定義します。
DTS タスクのワークフロープロパティは DTS タスクを右クリックした [プロパティ] からをクリックした後、[オプション] タブで設定が可能です (画面 2-2-1)。

画面

画面 2-2-1 [ オプション ] タブでの設定

  • [存在するトランザクションを結合]

    2-1 の [トランザクションを使用] オプションが ON になっている前提で、トランザクションに参加することを意味します。このチェックボックスにチェックすると、更新は後続の DTS タスクでコミットあるいはロールバックするまで保留されます。チェックしない場合は自動コミットモードになります。

  • [失敗時にトランザクションをロールバック]

    このチェックボックスにチェックすると該当の DTS タスクが失敗した場合、トランザクションに参加して保留された更新がすべてロールバックされます。チェックしない場合は後続の DTS タスクでコミットあるいはロールバックするまで更新は保留されます。

  • [このステップの正常終了時にトランザクションをコミット]

    このチェックボックスにチェックすると該当の DTS タスクが成功した場合、トランザクションがコミットされ、トランザクションに参加して保留された更新がすべて反映されます。チェックしない場合は後続の DTS タスクでコミットあるいはロールバックするまで更新は保留されます。

3. DTS トランザクションの設定例

では実際の DTS トランザクションの設定例を見てみましょう。今回は A 銀行の普通預金口座から預金を B 銀行の当座預金口座に振り替える処理を例にとってみます (図 3-1)。

図

3-1 預金の振替

A 銀行への DTS 接続 (接続名:A 銀行) と B 銀行への DTS 接続 (接続名:B 銀行) を作成し、A 銀行に対して預金を引き落とすための SQL 実行タスク (タスク名:引き落とし)、B 銀行に対して預金を預け入れるための SQL 実行タスク(タスク名:預け入れ) を作成して DTS デザイナでデザイニングします。このとき 「引き落とし」 タスクから 「預け入れ」 タスクへ成功時のワークフローの設定を行ないます (画面 3-2)。

画面

画面 3-2 預金の振り替え DTS パッケージ

もしこのまま実行した場合、A 銀行への引き落としが成功し、B 銀行への預け入れが失敗した場合 (画面 3-3) はデータの整合性が失われます (図 3-4)。

画面

画面 3-3 預け入れタスクは失敗

図

3-4 データの整合性は失われる

この場合は 「引き落とし」 タスクのワークフロープロパティを画面 3-5 のように、「預け入れ」 タスクのワークフロープロパティを画面 3-6 のように設定します。パッケージのプロパティは既定の設定で構いません。

画面

画面 3-5 「引き落とし」タスクのワークフロープロパティ

画面

画面 3-6 「預け入れ」   タスクのワークフロープロパティ

上記の設定で DTS トランザクションを有効にし、各タスクをトランザクションに参加させることで、「引き落とし」 タスクと 「預け入れ」 タスクがどちらも成功して更新がどちらにも反映されるか、「引き落とし」 タスクと 「預け入れ」 タスクのどちらかが失敗し、更新がどちらにも反映されないということが保証されます。

4. パラメータ化クエリと DTS グローバル変数の利用

DTS ではパラメータ化クエリを利用して、SQL クエリを汎用的に扱うことができます。例えば 3 で設定した 「引き落とし」 タスクにおいて、いろいろな顧客 ID に対応する場合には? (疑問符) を用いて SQL クエリを記述します (画面 4-1)。

画面

画面 4-1 パラメータクエリを利用した SQL クエリの例

パラメータ化クエリもすべてのタスクでサポートされているわけではなく、表 4-2 に示す種類のみがサポートしているので注意が必要です。

DTS タスク

データドリブンクエリタスク
データ変換タスク
SQL実行タスク

4-2 パラメータ化クエリがサポートしている DTS タスクの種類

DTS ではこのパラメータ化クエリに対応して、データ入力するために DTS グローバル変数を利用します。DTS グローバル変数を作成してパラメータをマッピングすることで、実行時に DTS グローバル変数に値を設定しパラメータ化クエリに渡します。

DTS デザイナではタスクのプロパティから簡単に上記の作業が実現できます。例えば画面 4-1において 「パラメータ」 ボタンを押下することで既存に存在する DTS グローバル変数とパラメータのマッピングが可能です (画面 4-2)。

画面

画面 4-2 DTS グローバル変数とパラメータのマッピング

もし DTS グローバル変数を新規に作成したい場合は画面 4-2 から 「グローバル変数を作成」 ボタンを押下し画面 4-3 で 「新規」 ボタンを押下して作成します。今回は Kokyakuid という DTS グローバル変数を作成しマッピングします。

画面

画面 4-3 DTS グローバル変数の作成

「預け入れ」 タスクでも同様にパラメータ化クエリの指定と DTS グローバル変数 (今、作成した Kokyakuid) をマッピングします。

このパラメータ化クエリを利用した DTS パッケージを実行する方法の 1 つが dtsrunui です。コマンドプロンプトから dtsrunui と実行し DTS パッケージ (今回は振替パッケージ) を選択します (画面 4-4)。

画面

画面 4-4 dtsrunui の実行

DTS グローバル変数に値を設定するためには画面 4-4 から 「詳細設定」 ボタンを押下し、既存の DTS グローバル変数を選択した後、値を設定します (画面 4-5)。

画面

画面 4-5 DTS グローバル変数の値設定

その後、画面 4-4 で「実行」ボタンを押下すればパラメータ化クエリを利用した DTS パッケージを実行することができます (画面 4-6)。

画面

画面 4-6 パラメータ化クエリを利用した DTS パッケージの実行 ( 正常終了 )

もちろん dtsrunui だけでなく、ActiveX スクリプトタスクなどのプログラミングによって DTSGlobalVariables ("グローバル変数名").value に値をセットすることでもパラメータ化クエリへ値を渡すことが可能です。画面 4-7 は ActiveX スクリプトタスクで設定している例です。

画面

画面 4-7 ActiveX スクリプトタスクでの DTS グローバル変数の値設定

また DTS グローバル変数はパラメータ化クエリへのデータ入力だけでなく、クエリからの出力を設定することが可能です。画面 4-2 から 「出力パラメータ」 タブを選択し、行の値や行セットに DTS グローバル変数を割り当てます (画面 4-8)。

画面

画面 4-8 出力パラメータに DTS グローバル変数を割り当てる

このようにして非常に簡単に DTS タスクから DTS タスクへ値を引き継ぐことができるようになります。

5.まとめ

今回 DTS の入り口を 4 章にわたってご紹介してきました。今までの内容だけでもかなり管理者としての作業が簡便化できることがおわかりいただけるかと思います。しかし DTS はこれだけではありません。まだ初めの一歩を踏み出したに過ぎません。ご紹介していない機能、設定パラメータ等は、まだまだたくさんあります。興味を少しでももっていただけた方は参考や SQL Books Online を熟読していただいて、さらに勉強を進めてください。必ずやご期待に添える機能を DTS は提供してくれているはずです。