일반적인 문제에 대한 해결 방법
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) 중 하나를 지원할 수 있습니다. 사용자 지정 바인딩 수신기의 콜백에서 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"
DB2 패키지 XML 형식 특성에 대한 정적 SQL입니다.
참고
Microsoft HIS 2013(V9)은 XML 문서의 유효성을 검사하기 위한 연결된 XML 스키마를 포함하는 이전 형식과 새 형식을 모두 지원합니다. Microsoft HIS 2009 및 HIS 2010(V8.5)은 이전 형식만 지원합니다.
DB2용 Microsoft 클라이언트 테스트 연결 실패 문제
Could not connect to data source 'DATASOURCE':
An internal network library error has occurred. A network level syntax error has occurred.
해결 방법은 Enterprise Single Sign-On에 대한 DRDA 서비스 구성을 확인하는 것입니다.
먼저 Host-Initiated SSO에 대해 Enterprise Single Sign-On 구성한 다음, "HIS 2010 및 ESSO V4.5 구성" 섹션의 6단계와 7단계를 수행하여 EntSSO 서비스를 다시 시작한 검사.
둘째, "Windows 시작 SSO용 ESSO 관련 애플리케이션을 정의하려면" 섹션의 11-13단계에 따라 호스트 및 Windows 자격 증명을 올바르게 매핑한 검사. 또한 연결을 테스트할 때 DB2용 Microsoft 클라이언트에서 올바른 호스트 자격 증명을 사용하고 있는지 확인합니다.
위치 이름으로 실패하는 z/OS에 대한 IBM QMF 문제 알 수 없음 오류
z/OS 연결 오류에 대한 IBM QMF(예: SELECT * FROM HISDEMO1. Dbo. CUSTOMERS)는 다음 오류를 반환합니다.
The location name is not known to the local DB2 subsystem.
해결 방법은 z/OS 구성 데이터베이스에 대한 DB2를 확인하고 필요에 따라 DDF를 다시 시작하는 것입니다.
먼저 z/OS 카탈로그 테이블(SYSIBM)에 대한 DB2를 업데이트했는지 확인합니다. LOCATIONS, SYSIBM. IPNAMES 및 SYSIBM. USERNAMES) 및 원격 관계형 데이터베이스
둘째, DB2에 z/OS 관리자 t를 요청하여 DRDA 프로토콜 게이트웨이인 z/OS DDF(분산 데이터 시설)에 대한 DB2를 중지하고 다시 시작한 다음 SQL 쿼리를 다시 시도합니다.
사용할 수 없는 리소스 오류로 실패하는 z/OS에 대한 IBM QMF 문제
z/OS 연결 오류에 대한 IBM QMF(예: 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.
해결 방법은 z/OS 구성 데이터베이스에 대한 DB2를 확인하고 필요에 따라 DDF를 다시 시작하는 것입니다.
먼저 z/OS 카탈로그 테이블(SYSIBM)에 대한 DB2를 업데이트했는지 확인합니다. LOCATIONS, SYSIBM. IPNAMES 및 SYSIBM. USERNAMES) 및 원격 관계형 데이터베이스
둘째, DB2에 z/OS 관리자 t를 요청하여 DRDA 프로토콜 게이트웨이인 z/OS DDF(분산 데이터 시설)에 대한 DB2를 중지하고 다시 시작한 다음 SQL 쿼리를 다시 시도합니다.
구문 오류 또는 액세스 규칙 위반으로 실패하는 z/OS에 대한 IBM QMF 문제
z/OS, SPUFI, DB2 관리 또는 기타 프로그램용 IBM QMF는 DB2에서 z/OS 별칭(예: DBO)을 쿼리하지 못합니다. SQL Server 테이블에 대한 REMAREAS(예: HISDRDA1. 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
통신 오류로 실패하는 z/OS용 IBM QMF 문제
z/OS 연결 오류에 대한 IBM QMF(예: SELECT * FROM HISDEMO1. Dbo. CUSTOMERS)는 다음 오류를 반환합니다.
A communications error was detected.
Message No: DSQ10427.
z/OS 메시지 및 코드 참조용 IBM QMF는 QMF 메시지 DSQ10427 SQLCODE -30081로 정의합니다. z/OS 코드용 IBM DB2 참조는 SQLCODE -30081을 통신 오류로 정의합니다.
해결 방법은 Windows 방화벽 예외 목록에 DRDA 서비스 컴퓨터의 MsDrdaService.exe 프로그램이 포함되어 있는지 확인하는 것입니다.
시작 메뉴에서 제어판 가리키고, 시스템 및 보안을 클릭하고, Windows 방화벽을 클릭하고, Windows 방화벽을 통해 프로그램 또는 기능 허용을 클릭하고, 설정 변경을 클릭하고, 다른 프로그램 허용을 클릭하고, 찾아보기를 클릭하고, "%SNAROOT%\MsDrdaService.exe"을 입력한 다음 추가를 클릭한 다음 확인을 클릭합니다.
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를 사용할 때 인증 실패 문제
z/OS용 DB2에서 인바운드 연결을 수신하는 경우 DRDA 서비스는 사용자 이름에 따라 인증됩니다. DRDA ACCSEC(Access Security) SECMEC(Security Mechanism)는 USRIDONL(User ID only)입니다.
DRDA 서비스는 DRDA SECCHK(보안 검사)를 처리할 때 추적 수신기에 다음 오류를 쓸 수 있습니다.
사용자를 인증하지 못했습니다. 지정된 userid/passwd를 사용하여 SSO LogonExternalUser를 사용하지 못했습니다.
호스트 시작 Enterprise Single Sign-On을 사용하여 이 인증 방법을 지원하려면 관련 애플리케이션에서 외부 자격 증명 확인 속성을 참으로 설정해야 합니다.
매개 변수 이름에 하이픈이 포함된 경우 BNDSQLSTT를 처리하지 못하는 문제
MSDN에 따르면 Microsoft SQL Server 구분된 변수 이름 및 저장 프로시저 매개 변수를 인식하지 못합니다. 이러한 유형의 식별자는 일반 식별자 규칙에 맞아야 합니다. https://msdn.microsoft.com/library/ms176027.aspx을 참조하세요. 그러나 PL/I 및 COBOL 매개 변수 이름에는 하이픈 및 기타 특수 문자가 포함됩니다. 해결 방법은 DRDA 서비스가 특수 문자를 제거하고 을 단일 밑줄로 바꾸어 BGNBND BNDSQLSTT를 처리하는 것입니다. 예를 들어 DRDA 서비스는 정적 SQL 매개 변수 이름 "PARM-1"을 SQL Server 저장 프로시저 매개 변수 이름 "PARM_1"으로 바꿉니다. DRDA 서비스는 BGNBIND BNDSQLSTT를 SQL Server 저장 프로시저 또는 DB2 XML 정의 파일의 정적 SQL로 처리할 때 대체된 값을 사용합니다. 에서 T-SQL 참조의 잘못된 문자 목록을 참조 https://msdn.microsoft.com/library/aa224033(v=SQL.80).aspx하세요.
원래 값 | 바꾼 값 |
---|---|
물결표(~) | |
하이픈(-) | |
느낌표(!) | |
왼쪽 중괄호({) | |
백분율(%) | |
오른쪽 중괄호(}) | |
캐럿(^) | |
아포스트로피(') | |
앰퍼샌드(&) | |
마침표(.) | |
왼쪽 괄호(() | |
백슬래시(\) | |
오른쪽 괄호()) | |
악센트 기호(`) |
DRDA 서비스는 잘못된 문자를 단일 밑줄로 대체합니다.
일관성 토큰을 읽을 수 없는 경우 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 서비스에 BGNBNDRM(회신 메시지 시작)을 DRDA AR 클라이언트에 반환하도록 지시합니다. 이 선택적 특성은 부울 값을 허용합니다. 기본값은 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
솔루션은 이미 실행 중인 DRDA 서비스를 Windows 서비스로 중지하는 것입니다.
명령 창을 사용하여 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 서비스를 애플리케이션으로 실행할 수 있습니다.
시작 메뉴에서 모든 프로그램, 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.
명령 프롬프트에서 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')
DDL - SYSIBM 스키마 및 SYSDUMMY1 테이블을 만듭니다.
빈 매개 변수 값을 반환하는 쿼리
CREATE PROCEDURE 문에는 SELECT 문의 데이터를 반환하는 데 사용되는 하나 이상의 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로 바인딩 복사 실패
DB2 관리 바인딩 복사 패키지 패널을 사용하여 Z/OS용 DB2에서 SQL Server 패키지를 복사하기 위해 DRDA BGNBND(Begin Bind)를 실행하는 경우 DB2 시스템은 SQLCODE -904를 반환할 수 있습니다.
이 문제는 호스트 세션에 로그인하는 데 사용되는 3270 프로필과 연결된 잘못된 보안 구성으로 인해 발생할 수 있습니다.
SQLCODE 805로 패키지 실행 실패
z/OS에 대한 DB2에서 SQL Server 정적 SQL 패키지를 실행하는 경우 z/OS 로컬로 연결된 프로그램(TSO, CICS)용 DB2를 사용하여 DB2 시스템은 SQLCODE -805를 반환할 수 있습니다.
이 문제는 정규화된 패키지 명명 규칙을 SQL Server z/OS용 DB2의 잘못된 매핑으로 인해 발생할 수 있습니다. 바인딩 복사본이 z/OS 리터럴 또는 일치하는 컬렉션 이름에 대해 DB2와 일치하는 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"