一般的な問題の解決策

DRDA サービスの使用時に、これらの一般的な問題が発生する可能性があります。

コンソール アプリケーションとして DRDA サービスを開始できません

コンソール アプリケーションとして DRDA サービスを起動できない場合は、DRDA サービスが既にサービスとして実行されているかどうかを確認してください。

  • [スタート] メニューの [すべてのプログラム] をポイントし、[Microsoft Visual Studio 2010] をポイントし、[Visual Studio Tools] をポイントし、[Visual Studio x64 Win64 コマンド プロンプト (2010)] を右クリックし、[管理者として実行] をクリックします。 [ユーザー アカウント制御] ダイアログが表示されます。 [はい] をクリックして続行します。

  • コマンド プロンプトから「 net stop msdrdaservice 」と入力し、Enter キーを押 します

    C:\Windows\system32>net stop msdrdaservice
    The Microsoft Service for DRDA service is stopping.
    The Microsoft Service for DRDA service was stopped successfully.
    

カスタム リスナー

サービスの起動時に、DRDA サービスは内部 DrdaAsTextListener と DrdaAsConsoleListener に警告エントリを書き込み、DRDA サービスがカスタム リスナー (バインド、テキスト、その他) を読み込めなかったことを IT プロフェッショナルに通知します。

カスタム バインド リスナー

DRDA サービスはカスタム バインド リスナーをサポートしています。これは、DB2 XML ドキュメント形式として HIS 2010 (v8.5) または HIS 2013 (v9.0) の 2 つの静的 SQL のいずれかをサポートする場合があります。 カスタム バインド リスナーからのコールバックでは、DRDA サービスがこのエラーをログに記録することがあります。

Error:2:2:[sep 13 2012 10:44:09.571] SqlDatabase::CreateXMLForPackage::OnPackageBound(xmlstring ... out sqlscripts) no sql scripts are passed back.
Error:2:2:[sep 13 2012 10:44:09.573] SqlDatabase::CreateXMLForPackage::OnPackageBound(xmlstring, ..., out sqlscripts)  Null and empty scripts passed from custom binder
Error:2:4:[sep 13 2012 10:44:09.575] SqlDatabase::CreateXMLForPackage::OnPackageBound(xmlstring, ..., out sqlscripts)    at Microsoft.HostIntegration.Drda.RDB.SqlDatabase.CreateXMLForPackage

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

この場合は、値 "v85" を指定してから、バインドまたはバインド コピー コマンドを再要求する必要があります。

packageXmlFormat="v85"

静的 SQL for DB2 パッケージ XML 形式属性。

Note

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

Microsoft Client for DB2 テスト接続エラーに関する問題

Could not connect to data source 'DATASOURCE':
An internal network library error has occurred. A network level syntax error has occurred.

解決策は、エンタープライズ シングル サインオンの DRDA サービス構成を確認することです。

まず、Host-Initiated SSO 用に Enterprise Single Sign-Onを構成したことを確認し、次に「CONFIGURE HIS 2010 and ESSO V4.5」というセクションの手順 6 と 7 に従って EntSSO サービスを再開します。

次に、「Windows によって開始される SSO 用の ESSO 関連アプリケーションを定義するには」というセクションの手順 11 から 13 に従って、ホストと Windows の資格情報を正しくマップしたことを確認します。 さらに、接続をテストするときに、Microsoft Client for DB2 から正しいホスト資格情報を使用していることを確認します。

IBM QMF for z/OS がロケーション名で失敗した場合の問題が不明なエラー

IBM QMF for z/OS 接続エラー (SELECT * FROM HISDEMO1 など)。Dbo。CUSTOMERS) は、次のエラーを返します。

The location name is not known to the local DB2 subsystem.

解決策は、DB2 for z/OS 構成データベースを確認し、必要に応じて DDF を再実行することです。

まず、DB2 for z/OS カタログ 表 (SYSIBM) を更新したことを確認します。LOCATIONS、SYSIBM。IPNAMES と SYSIBM。ユーザー名) をリモート リレーショナル データベースと共に使用します。

次に、DB2 for z/OS 管理者に依頼して、DRDA プロトコル・ゲートウェイである DB2 for z/OS 分散データ機能 (DDF) を停止して再開してから、SQL クエリを再試行してください。

IBM QMF for z/OS が使用不可リソース・エラーで失敗した場合の問題

IBM QMF for z/OS 接続エラー (SELECT * FROM HISDEMO1 など)。Dbo。CUSTOMERS) は、次のエラーを返します。

Unsuccessful execution caused by an unavailable resource. (Reason code:
00D300F4; type of resource: 00001005; and resource name: NAME).
The DRDA AS log will have the following corresponding error.
Could not map use rid/password to a valid windows account. Authentication failed.

解決策は、DB2 for z/OS 構成データベースを確認し、必要に応じて DDF を再実行することです。

まず、DB2 for z/OS カタログ 表 (SYSIBM) を更新したことを確認します。LOCATIONS、SYSIBM。IPNAMES と SYSIBM。ユーザー名) をリモート リレーショナル データベースと共に使用します。

次に、DB2 for z/OS 管理者に依頼して、DRDA プロトコル・ゲートウェイである DB2 for z/OS 分散データ機能 (DDF) を停止して再開してから、SQL クエリを再試行してください。

構文エラーまたはアクセス規則違反で IBM QMF for z/OS が失敗する問題

IBM QMF for z/OS、SPUFI、DB2 管理またはその他のプログラムは、DB2 for z/OS 別名 (DBO など) の照会に失敗します。SQL SERVER テーブル (HISDRDA1 など) に対する REMAREAS。Dbo。AREAS)、DRDA AS を使用して、次のエラーが返されます。

DSNT408I SQLCODE =   -204, SQLSTATE = 42704, SYNTAX ERROR OR ACCESS RULE VIOLATION FROM DB2 UDB for AIX, Linux, HP-UX, Sun, and Windows TOKENS 'DBO.REMAREAS' IS AN UNDEFINED NAME.

DRDA AS ログには、次の対応するエラーがあります。

DrdaAs Information: 7 : [9/19/2011 4:30:55 PM] Processing PRPSQLSTT "SELECT * FROM DBO.REMAREAS"
DrdaAs Error: 7 : [9/19/2011 4:30:55 PM] Message: Invalid object name 'DBO.REMAREAS'.

解決策は、対応するSQL Server ALIAS または VIEW を作成したことを確認することです。

次に例を示します。

CREATE VIEW [dbo].[REMAREAS]
AS
SELECT     dbo.AREAS.*
FROM         dbo.AREAS

IBM QMF for z/OS が通信エラーで失敗した場合の問題

IBM QMF for z/OS 接続エラー (SELECT * FROM HISDEMO1 など)。Dbo。CUSTOMERS) は、次のエラーを返します。

A communications error was detected.
Message No: DSQ10427.

IBM QMF for z/OS メッセージおよびコード・リファレンスでは、QMF メッセージ DSQ10427 が SQLCODE -30081 として定義されています。 IBM DB2 for z/OS Codes リファレンスでは、SQLCODE -30081 が通信エラーとして定義されています。

解決策は、Windows ファイアウォールの例外リストに DRDA サービス コンピューター上のMsDrdaService.exe プログラムが含まれているかどうかを確認することです。

  1. [スタート] メニューの [コントロール パネル] をポイントし、[システムとセキュリティ] をクリックし、[Windows ファイアウォール] をクリックし、[Windows ファイアウォールでプログラムまたは機能を許可する] をクリックし、[設定の変更] をクリックし、[別のプログラムを許可する] をクリックし、[参照] をクリックし、「%SNAROOT%\MsDrdaService.exe」と入力して、[追加] をクリックし、[OK] をクリックします。

  2. DRDA サービスを再開します。

DRDA クライアント SELECT または CALL ステートメントが失敗する

DRDA クライアント・プログラムは、SELECT ステートメントおよび CALL ステートメントで結果をフェッチおよび戻す方法を定義するために、基本的な DECLARE CURSOR ステートメントを含む一連の標準パッケージをバインドします。 ステートメントが失敗した場合は、パッケージまたはコレクションがIgnoreStandardPacakges.txt ファイルに一覧表示されているかどうかを確認します。 一覧に表示されている場合は、参照を削除し、ステートメントを再バインドして再実行します。

リレーショナル データベース接続エラーへのアクセス

DRDA サービスは、DRDA ACCRDB (Access Relational Database) 要求に応答して、MsDrdaService.exe.configの接続文字列を使用して、SQL Server データベースに接続します。 特定の状況では、SQL Server データベース接続の試行が失敗し、次のエラーが発生することがあります。

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server).

DRDA サービスは、次の IBM DB2 エラーで DRDA クライアントに戻ります。

SQLCODE -30041
SQLSTATE 57013
Error Text: EXECUTION FAILED DUE TO UNAVAILABLE RESOURCES THAT WILL AFFECT THE SUCCESSFUL EXECUTION OF SUBSEQUENT COMMANDS AND SQL STATEMENTS.

このような場合は、Microsoft SQL Server のドキュメントとベスト プラクティスを利用して、接続エラーの原因を特定する必要があります。

ホストによって開始される ESSO を使用するときの認証エラーに関する問題

DB2 for z/OS からインバインド接続を受信すると、DRDA サービス認証が使用されます。DRDA サービスはユーザー名のみに基づいて認証されます。 DRDA ACCSEC (アクセス セキュリティ) SECMEC (セキュリティ メカニズム) は、USRIDONL (ユーザー ID のみ) です。

DRDA サービスは、DRDA SECCHK (セキュリティ チェック) を処理するときにトレース リスナーに次のエラーを書き込む可能性があります。

  • ユーザーの認証に失敗しました:SSO LogonExternalUser が、指定された userid/passwd を使用して失敗しました。

    ホスト側開始の Enterprise Single Sign-On を使用するこの認証方法をサポートするには、関連アプリケーションで [外部資格情報の確認] プロパティを True に設定する必要があります。

パラメーター名にハイフンが含まれている場合に BNDSQLSTT を処理できない問題

MSDN によると、Microsoft SQL Server は、区切られた変数名とストアド プロシージャ パラメーターを認識しません。 このようなタイプの識別子は、標準識別子の規則に従う必要があります。 「https://msdn.microsoft.com/library/ms176027.aspx」を参照してください。 ただし、PL/I および COBOL パラメーター名には、ハイフンおよびその他の特殊文字が含まれています。 解決策は、DRDA サービスが特殊文字を削除し、1 つのアンダースコアに置き換えることで BGNBND BNDSQLSTT を処理することです。 たとえば、DRDA サービスは静的 SQL パラメーター名 "PARM-1" をストアド プロシージャ パラメーター名 "PARM_1" SQL Server置き換えます。 DRDA サービスは、BGNBIND BNDSQLSTT を SQL Server ストアド プロシージャまたは静的 SQL for DB2 XML 定義ファイルに処理するときに、置換された値を使用します。 T-SQL リファレンス https://msdn.microsoft.com/library/aa224033(v=SQL.80).aspxの無効な文字の一覧を参照してください。

元の値 置き換えられた値
チルダ (~)
ハイフン (-)
感嘆符 (!)
左中かっこ ({)
パーセント (%)
右中かっこ (})
キャレット (^)
アポストロフィ (')
アンパサンド (&)
ピリオド (.)
左かっこ (()
円記号 (\)
右かっこ ())
アクセント符号 (`)

DRDA サービスは、無効な文字を 1 つのアンダースコアに置き換えます。

整合性トークンが読み取り不可能な場合の BGNBND BNDSQLSTT の処理に関する問題

この解決策は、DRDA AS が 8 バイトの整合性トークンの 16 進数表現を使用して BGNBND BNDSQLSTT を処理することです。

ミラーリング パートナーに接続するときの接続タイムアウトSQL Server問題

データベース ミラーリング中に発生する可能性のあるエラー

サービスの起動時にカスタム バインド リスナーを読み込む際の問題

DRDA サービスは、サービスの起動時にカスタム バインド リスナーを読み込めない場合に警告を返します。 この警告は、DRDA サービスの起動を妨げるものではありません。

この問題は、DRDA サービスがカスタム バインド リスナーにアクセスできない場合、またはカスタム バインド リスナーが XML またはトレース ファイルにバインド コピーを書き込むよう構成されているディレクトリにアクセスできない場合に発生する可能性があります。 管理者は、適切なアクセス制御リスト権限をこれらのディレクトリに設定する必要があります。

HIS ランタイム・ユーザー・グループのすべてのメンバーは、カスタム・バインド・リスナー・ダイナミック・リンク・ライブラリーがインストールされているプログラム・ファイル・システム・ディレクトリーに対する読み取り権限と実行権限を持っている必要があります。 HIS ランタイム ユーザー グループのすべてのメンバーには、カスタム バインド リスナーがバインド コピーを XML ファイルとトレース ファイルに書き込むディレクトリにコピーをバインドするための書き込み、読み取り、実行の権限が必要です。

カスタム バインド リスナーがコールバック インターフェイスで返されない場合の問題。

カスタム バインド リスナーが CREATE PROCEDURE DDL ステートメントを DRDA サービスに返さない場合、DRDA サービスは DRDA アプリケーション 要求元クライアントに BGNBNDRM (Begin Bind Error Reply Message) を返しません。 errorWhenNoCallback 属性は、カスタム バインド リスナー コンポーネントがコールバック インターフェイスに関する情報を返さない場合に、DRDA AR クライアントに BGNBNDRM (Begin Bind Reply Message) を返すように DRDA サービスに指示します。 この 省略可能な 属性は、 ブール 値を受け取ります。 既定値は true です。


<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 の既定値。

コマンド ライン アプリケーションとしての DRDA サービスの起動に関する問題

コマンド ライン アプリケーションとして DRDA サービスを起動すると、プログラムがエラーで失敗する可能性があります。

C:\Program Files\Microsoft Host Integration Server 2013\system>MsDrdaService.exe -c
Only one usage of each socket address (protocol/network address/port) is normally permitted

解決策は、Windows サービスとして既に実行されている DRDA サービスを停止することです。

コマンド ウィンドウを使用すると、DRDA サービスを停止して開始できます。

  1. [スタート] メニューの [すべてのプログラム] をポイントし、[Microsoft Visual Studio 2010] をポイントし、[Visual Studio Tools] をポイントし、[Visual Studio x64 Win64 コマンド プロンプト (2010)] を右クリックし、[管理者として実行] をクリックします。 [ユーザー アカウント制御] ダイアログが表示されます。 [はい] をクリックして続行します。

  2. コマンド プロンプトから「 net stop msdrdaservice 」と入力し、Enter キーを押 します

    C:\Windows\system32>net stop msdrdaservice
    The Microsoft Service for DRDA service is stopping.
    The Microsoft Service for DRDA service was stopped successfully.
    

    コマンド ウィンドウを使用すると、DRDA サービスをアプリケーションとして実行できます。

  3. [スタート] メニューの [すべてのプログラム] をポイントし、[Microsoft Visual Studio 2010] をポイントし、[Visual Studio Tools] をポイントし、[Visual Studio x64 Win64 コマンド プロンプト (2010)] を右クリックし、[管理者として実行] をクリックします。 [ユーザー アカウント制御] ダイアログが表示されます。 [はい] をクリックして続行します。

  4. コマンド プロンプトから「 net stop msdrdaservice 」と入力し、Enter キーを押 します

    C:\Windows\system32>net stop msdrdaservice
    The Microsoft Service for DRDA service is stopping.
    The Microsoft Service for DRDA service was stopped successfully.
    
  5. コマンド プロンプトから、「 cd C:\Windows\system32>cd C:\Program Files\Microsoft Host Integration Server 2013\system 」と入力し、 Enter キーを押します。

    C:\Program Files\Microsoft Host Integration Server 2013\system>MsDrdaService.exe -c
    DrdaAs Information: 0 : [10/4/2011 4:51:48 PM] Microsoft Service for DRDA (build: 9.0.1203.0 )
    DrdaAs Information: 0 : [10/4/2011 4:51:48 PM] TCP communication manager listening on port 446
    

    Note

    DRDA サービス ログ ライターは、コンソール ウィンドウに情報を出力します。

カスタム パッケージ バインド リスナーを読み込めません

サービスの起動時に、DRDA サービスがカスタム パッケージ バインド リスナーを読み込めない場合、DRDA サービスは次の警告をログに記録します。

Warning:0:2:[Apr 30 2012 16:04:12.996] SessionManager::Initialize PackageBindingListener failed to load type: " Microsoft.HostIntegration.Drda.Common.PackageBindListener, Microsoft.HostIntegration.Drda.Common, Version=9.0.1000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL "

実行時に、MsDrdaService がカスタム パッケージ バインド リスナーを読み込めない場合、MsDrdaService はエラーを返しません。

Note

DRDA サービスは、追加の警告なしに引き続き実行されます。 DRDA サービスでは、複数の同時カスタム パッケージ バインド リスナーがサポートされています。 IT プロフェッショナルまたは開発者は、DRDA サービスの起動後の最初の警告に基づいて、問題を修正する必要があります。

SYSIBM に対するクエリ。SYSDUMMY1 は SQLCODE -204 を返します

SYSIBM スキーマと SYSDUMMY1 テーブルを定義するには、USE 句を編集してターゲット SQL Server データベースを参照し、ステートメントを実行します。

/****** HAS OUTPUT PARAMS ******/

DRDA サービスの内部バインドには、CREATE PROCEDURE ステートメントの実行時にこのコメントが含まれます。

USE [CONTOSO]
GO
/****** Object:  Schema [SYSIBM]    Script Date: 09/26/2012 13:21:38 ******/
IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N'SYSIBM')
EXEC sys.sp_executesql N'CREATE SCHEMA [SYSIBM] AUTHORIZATION [dbo]'
GO
/****** Object:  Table [SYSIBM].[SYSDUMMY1]    Script Date: 09/26/2012 13:21:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[SYSIBM].[SYSDUMMY1]') AND type in (N'U'))
BEGIN
CREATE TABLE [SYSIBM].[SYSDUMMY1]([IBMREQD] [char](1) NOT NULL) ON [PRIMARY]
END
GO
SET ANSI_PADDING OFF
GO
INSERT [SYSIBM].[SYSDUMMY1] ([IBMREQD]) VALUES (N'Y')

SYSIBM スキーマと SYSDUMMY1 テーブルを作成するための DDL。

クエリは空のパラメーター値を返します

CREATE PROCEDURE ステートメントには、SELECT ステートメントからデータを返すために 1 つ以上の OUTPUT パラメーターが使用されることを示すコメントを含める必要があります。

/****** HAS OUTPUT PARAMS ******/

DRDA サービスの内部バインドには、CREATE PROCEDURE ステートメントの実行時にこのコメントが含まれます。

クエリは空の結果セットを返します

SELECT に対して DECLARE CURSOR を実行すると、DRDA サービスから空の結果セットと次のエラーが返されることがあります。

THE CURSOR  IS NOT IN A PREPARED STATE
SQLSTATE: 26501, SQLCODE: -514

CREATE PROCEDURE ステートメントには、ストアド プロシージャから結果セットが返されることを示すコメントを含める必要があります。

/****** RETURN RESULTSET ******/

DRDA サービスの内部バインドには、CREATE PROCEDURE ステートメントの実行時にこのコメントが含まれます。

バインド コピーが SQLCODE -904 で失敗する

DRDA BGNBND (Begin Bind) を実行して DB2 for z/OS から SQL Server にパッケージをコピーする場合、DB2 管理バインド・パッケージ・パネルを使用して、DB2 システムは SQLCODE -904 を返す場合があります。

この問題は、ホスト セッションへのログインに使用される 3270 プロファイルに関連付けられている不適切なセキュリティ構成が原因で発生する可能性があります。

SQLCODE 805 でパッケージの実行が失敗する

DB2 for z/OS から SQL Serverに静的 SQL パッケージを実行する場合、DB2 for z/OS ローカル接続プログラム (CICS、CICS) を使用して、DB2 システムは SQLCODE -805 を返す場合があります。

この問題は、DB2 for z/OS から完全修飾パッケージ命名規則SQL Serverへのマッピングが正しくない場合に発生する可能性があります。 バインド・コピーが、DB2 for z/OS リテラルまたは一致したコレクション名と一致するSQL Serverスキーマ内にストアド・プロシージャーを生成したことを確認します。 また、MsDrdaService.exe.config databaseAliases に、データベース名マッピングをSQL Serverするために必要な DB2 の場所、またはスキーマ名マッピングをSQL Serverする DB2 コレクションが含まれているかどうかを確認します。

  <databaseAlias sourceLocation="CONTOSO"
                 sourceCollection="DSN8HC91"
                 targetDatabase="ContosoRetailDW"
                 targetSchema="DSN8910" />
  <databaseAlias sourceLocation="NWIND"
                 sourceCollection="DSN8HC91"
                 targetDatabase="Northwind"
                 targetSchema="DSN8910" />
</databaseAliases>

さらに、MsDrdaService.exe.configのデータベース要素内の packageProcedureSchemaList 属性のコンマ区切りの値を確認します。

packageProcedureSchemaList="DBO,DSN8910"