次の方法で共有


一般的な問題の解決策

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 ドキュメント形式用の 2 つの静的 SQL (HIS 2010 (v8.5) または HIS 2013 (v9.0) のいずれか) をサポートする場合があります。 カスタム バインド リスナーからのコールバックでは、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" を指定してから、bind または bind copy コマンドを要求し直す必要があります。

packageXmlFormat="v85"

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

注意

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 の資格情報を正しくマップしたことをチェック、"Windows によって開始される SSO 用の ESSO 関連アプリケーションを定義するには" というセクションの手順 11 から 13 に従います。 さらに、接続をテストするときに、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 コード・リファレンスでは、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 ACCSEC (アクセス セキュリティ) SECMEC (セキュリティ メカニズム) は、USRIDONL (ユーザー ID のみ) です。

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

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

    ホスト側開始の 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 サービスは、BGNBNDRM (Begin Bind Error Reply Message) を DRDA Application Requester クライアントに返しません。 errorWhenNoCallback 属性は、カスタム バインド リスナー コンポーネントがコールバック インターフェイスに関する情報を返さない場合に、BGNBNDRM (Begin Bind Reply Message) を DRDA AR クライアントに返すように 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
    

    注意

    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 はエラーを返しません。

注意

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 ローカル接続プログラム (TSO、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"