次の方法で共有


パッケージ バインド処理の構成

社内パッケージ バインダー

DRDA サービスは、DRDA Begin Bind (BGNBND) コマンドと Bind SQL ステートメント (BNDSQLSTT) コマンドを SQL Server DROP PROCEDURE および CREATE PROCEDURE ステートメントに処理することで、DB2 パッケージ用の静的 SQL を SQL Server ストアド プロシージャに変換します。 DRDA BGNBND フローには、パッケージ内に格納されている SQL ステートメントごとに 1 つ、1 つ以上の BNDSQLSTT フローが含まれます。 DRDA サービスは、1 つの DRDA 静的 SQL パッケージ セクション (1 つのステートメントを含む) を 1 つの SQL Server ストアド プロシージャにマップします。 DRDA サービスは、ストアド プロシージャ内のコメントの BGNBND パッケージ バインド オプションと、オプションの拡張ストアド プロシージャ プロパティをマップまたは保持します。 DRDA サービスでは、内部 SQL トランスフォーマーを使用して、SQL コマンドの構文、パラメーター、データ型、カーソル、および結果セットを変換します。 必要に応じて、DRDA サービスまたはオフラインでパッケージを対話形式で処理するカスタム パッケージ バインド リスナーを開発できます。

パッケージ プロシージャ

createPackageProcedure 属性は、単一の BGNBND フローを SQL Server ストアド プロシージャに処理するように DRDA サービスに指示し、DRDA BNDSQLSTT フローによって定義された元のステートメントを対応する SQL Server 構文に変換します。 この省略可能な属性は、ブール値を受け入れます。 これは既定値は true です。

パッケージ XML

createPackageXml 属性は、DRDA BNDSQLSTT フローによって定義された元のバインド オプションとステートメントを保持して、単一の BGNBND フローを静的 SQL for DB2 パッケージ XML ファイルに処理するように DRDA サービスに指示します。 この 省略可能な 属性は、 ブール 値を受け入れます。 既定値は false です。

DRDA サービスは、このコード ポイントを DROP PROCEDURE ステートメントに変換することで、DRDA PKGRPLOPT (パッケージ置換オプション) を処理します。

パッケージ XML 形式

packageXmlFormat 属性は、DB2 XML 用の静的 SQL ファイルを v90 または v85 形式で書き込むよう DRDA サーバーに指示します。 この 省略可能な 属性は、v85 または v90 のいずれかの 文字列 値を受け入れます。 既定値は v90 です

Microsoft HIS 2010 2013 (V9) では、古い形式と新しい形式の両方がサポートされています。これには、XML ドキュメントを検証するための関連 XML スキーマが含まれています。 Microsoft HIS 2009 と HIS 2010 (V8.5) では、古い形式のみがサポートされています。

パッケージ XML の場所

packageXmlLocation 属性は、DB2 パッケージ XML ファイルの静的 SQL を書き込む場所を DRDA サービスに指示します。 この 省略可能な 属性は、文字列値を受け入れます。 既定値は c:\temp です

DRDA サービスは、DRDA BGNBND から静的 SQL for DB2 XML ファイルへの処理時に SQL コマンド構文を検証しません。 DRDA サービスでは、元のバインド オプション、SQL ステートメント構文、データ型、およびその他の値が保持されます。

ストアド プロシージャ名

DRDA は、これらの複数の部分で構成される PKGNAMCT (パッケージ名と整合性トークン) を使用して、完全修飾静的 SQL パッケージを定義します。

  • RDBNAM (リレーショナル データベース名)

  • DRDA RDBCOLID (RDB コレクション識別子)

  • DRDA PKGID (RDB パッケージ識別子)

  • DRDA PKGCNSTKN (RDB パッケージ整合性トークン)

  • DRDA PKGSN (パッケージ セクション番号)

    DRDA サービスは、DRDA パッケージ名を SQL Server ストアド プロシージャ名に変換し、RDBNAM 部分を削除し、ピリオドを使用して RDBCOLID を区切り、残りの 3 つの部分を 1 つのアンダースコア文字で区切ります。

    DRDA BGNBND 静的 SQL パッケージの名前付け規則:

RDBNAME.RDBCOLID.PKGID.PKGCNSTKN.PKGSN  

DRDA サービスによってマップされた SQL Server ストアド プロシージャの名前付け規則:

CollectionIdentifer.PackageIdentifier_PackageConsistencyToken_PackageSectionNumber  

元のパッケージ スキーマと名前:

CONTOSO.DSN8HC91_PKGSAMP1_43484152544F4B31_1  

マップされたパッケージのスキーマと名前:

ContosoRetailDW.DSN8910_PKGSAMP1_43484152544F4B31_1  

storedProcedureNameSeparator 属性は、DRDA パッケージ名を SQL Server ストアド プロシージャ名にマッピングするときに使用する区切り文字を DRDA サービスに指示します。 この 省略可能な 属性は、 文字列 値を受け入れます。 既定値は 1 つの アンダースコア 文字 (_) です。

パッケージ結合オプション

createPackageProcedureWithExtendedProperties 属性は、BGNBND パッケージバインド オプションを SQL Server ストアド プロシージャの拡張プロパティとして保持するように DRDA サービスに指示します。 この 省略可能な 属性は、 ブール 値を受け入れます。 既定値は false です。

パッケージ プロシージャ スキーマ

DRDA サービスは、対応する SQL Server ストアド プロシージャに対して SQL Server CALL ステートメントを実行することで、DRDA EXCSQLSTT (SQL ステートメントの実行) コマンドと OPNQRY (Open Query) コマンドを処理します。 DRDA サービスは、DRDA EXCSQLSTT および OPNQRY コマンド フローの一部である DRDA PKGNAMCT (パッケージ名と整合性トークン) または完全修飾パッケージ名内で、DRDA RDBCOLID (RDB コレクション識別子) の値から派生したスキーマ名でターゲット SQL Server ストアド プロシージャを検索します。

packageProcedureSchemaList は、代替スキーマでターゲット SQL Server ストアド プロシージャを検索するように DRDA サービスに指示します。 この 省略可能な 属性は、 文字列 値を受け入れます。 既定値は 空の文字列です。 文字列は、コンマ区切りの SQL Server スキーマ名で構成されます。

packageProcedureSchemaList="DBO,DSN8910"

packageProcedureSchemaList 属性は、IBM DB2 for z/OS CURRENT PACKAGESET 特殊レジスターおよび SET CURRENT PACKAGESET ステートメントに似ています。 DRDA サービスは、databaseAliases 要素と packageProcedureSchemaList 属性の両方に含まれる名前付けマッピング規則を組み合わせます。

元のパッケージ スキーマと名前:

CONTOSO.DSN8HC91_MSDB2SDK_43484152544F4B31_1  

マップされたパッケージのスキーマと名前:

ContosoRetailDW.DSN8910_MSDB2SDK_43484152544F4B31_1  

まず、DRDA サービスは、リテラル パッケージ プロシージャ名を使用して、DRDA サービス パッケージ プロシージャ キャッシュ内でターゲット SQL Server ストアド プロシージャのメタデータを検索し、次に、パッケージ プロシージャスキーマリスト値を使用してマップされた名前を使用しようとします。

次に、DRDA サービスは、リテラル パッケージ プロシージャ名を使用して、SQL Server データベース カタログ内のターゲット SQL Server ストアド プロシージャのメタデータを検索し、その後、パッケージ プロシージャスキーマリスト値を使用してマップされた名前を使用しようとします。

パッケージ プロシージャ キャッシュ

DRDA サービスは、対応する SQL Server ストアド プロシージャに対して SQL Server CALL ステートメントを実行することで、DRDA EXCSQLSTT (SQL ステートメントの実行) コマンドと OPNQRY (Open Query) コマンドを処理します。 CALL ステートメントを実行する前に、DRDA サービスは、ステートメントの種類 (SELECT、INSERT、UPDATE、DELETE)、カーソルの種類 (WITH HOLD)、パラメーター データ型 (CHAR FOR BIT など)、およびその他の属性 (結果など) を確認する SQL Server ストアド プロシージャのメタデータをフェッチします。 メタデータをフェッチすると、DRDA サービスは、構成された間隔で、マップされたプロシージャ名を含むこの情報をパッケージ プロシージャ キャッシュにキャッシュします。

パッケージ プロシージャ キャッシュフラッシュ

packageProcedureCacheFlush 属性は、指定された時間間隔後にパッケージ プロシージャ キャッシュをフラッシュするように DRDA サーバーに指示します。 この 省略可能な 属性は、 期間 の値を受け入れます。 既定値は P1D です (期間は 1 日です)。 期間の値は、PnYnMnDTnHnMnS という形式で指定されます。

アイテム 説明
P 期間の長さ(必須)
ニューヨーク 年数。
海里 月数。
nD 日数。
T 時間セクションの開始 (時間、分、または秒で構成される期間を指定するために必要)。
nH 時間数。
海里 分数。
S 秒数。

XML 形式で表される時間の長さ。

パッケージ プロシージャの最後の呼び出し

packageProcedureLastInvoke 属性は、指定された時間間隔後に、パッケージ プロシージャ キャッシュ内のオブジェクトの名前をテキスト ファイル (%DRDAROOT%\LastInvokePackageProcedures.txt) に書き込むよう DRDA サーバーに指示します。 この 省略可能な 属性は、 期間 の値を受け入れます。 既定値は P7D (期間は 7 日間) です。 サービスの起動時に、DRDA サービスはこのテキスト ファイルを読み込み、ファイルにリストされているプロシージャのスキーマをプリフェッチします。 期間の値は、PnYnMnDTnHnMnS という形式で指定されます。

アイテム 説明
P 期間の期間 (必須)
ニューヨーク 年数。
海里 月数。
nD 日数。
T 時間セクションの開始 (時間、分、または秒で構成される期間を指定するために必要)。
nH 時間数。
海里 分数。
S 秒数。

XML 形式で表される時間の長さ。

サービスの起動のパフォーマンスを向上させるために、このファイルを編集し、不要なストアド プロシージャ名を削除できます。 ランタイム実行のパフォーマンスを向上させるために、このファイルを編集して追加のストアド プロシージャ名を含めることができます。 LastInvokePackageProcedures.txt ファイルの読み取りと書き込みを無効にするには、期間を PT0S (時間 0 秒の期間) に設定します。

カスタム パッケージ バインダー

DRDA サービスは、.NET Framework カスタム リスナーの形式でカスタム パッケージ バインダーをサポートします。 カスタム パッケージ バインド リスナーのサンプルについては、プログラマーズ ガイドとリファレンスを参照してください。 packageBindListeners 要素には、バインド SQL ステートメント出力を含むバインド パッケージをオプションのカスタム バインド リスナーに送信するように DRDA サーバーに指示する 1 つ以上の packageBindListener 要素が含まれています。 packageBindListener 要素には、カスタム バインド リスナーを定義するための属性のセットが含まれています。 型は、DRDA Server カスタム バインド リスナーを定義した Microsoft.HostIntegration.Drda.Common.PackageBindListener です。

カスタム バインディング リスナー

createPackageProcedureWithCustomSqlScripts 属性は、外部カスタム パッケージ バインド リスナー コンポーネントを介して DRDA BGNBND と BNDSQLSTT を処理するように DRDA サービスに指示します。 この 省略可能な 属性は、 ブール 値を受け入れます。 既定値は false です。

カスタム パッケージ バインド リスナー コンポーネントは、次のように MsDrdaService.exe.config で参照する必要があります。

<packageBindListeners>  
    <packageBindListener  
      type="Microsoft.HostIntegration.Drda.Common.PackageBindListener, Microsoft.HostIntegration.Drda.Common, Version=9.0.1000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"  
      errorWhenNoCallback="true"/>  
  </packageBindListeners>  

DRDA サービス アプリケーション構成ファイル内の packageBindListener の既定値。

コールバックがない場合のエラー

errorWhenNoCallback 属性は、カスタム バインド リスナー コンポーネントがコールバック インターフェイスに関する情報を返さない場合に、BGNBNDRM (Begin Bind Reply Message) を DRDA AR クライアントに返すように DRDA サービスに指示します。 この 省略可能な 属性は、 ブール 値を受け入れます。 既定値は true です。