Condividi tramite


Soluzioni ai problemi comuni

Questi problemi comuni possono verificarsi quando si usa il servizio DRDA.

Impossibile avviare il servizio DRDA come applicazione console

Se non è possibile avviare il servizio DRDA come applicazione console, verificare se il servizio DRDA è già in esecuzione come servizio.

  • Scegliere Tutti i programmi dal menu Start, scegliere Microsoft Visual Studio 2010, Visual Studio Tools, fare clic con il pulsante destro del mouse su Visual Studio x64 Win64 Command Prompt (2010) e scegliere Esegui come amministratore. Verrà visualizzata la finestra di dialogo Controllo account utente . Fai clic su per continuare.

  • Dal prompt dei comandi immettere net stop msdrdaservice e premere INVIO.

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

Listener personalizzati

All'avvio del servizio, il DRDA scriverà avvisi di avvertimento nel DrdaAsTextListener interno e nel DrdaAsConsoleListener, notificando al professionista IT che non è riuscito a caricare ascoltatori personalizzati (bind, testo, altro).

Listener di binding personalizzato

Il servizio DRDA supporta listener di binding personalizzati, che possono supportare uno dei due formati di documento SQL statici per DB2 XML: HIS 2010 (v8.5) o HIS 2013 (v9.0). Il servizio DRDA potrebbe registrare questo errore su un callback da un listener personalizzato di associazione.

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

La soluzione consiste nel configurare il valore dell'attributo packageXmlFormat appropriato. L'attributo packageXmlFormat indica al server DRDA di scrivere il file SQL statico per DB2 XML nel formato v90 o v85. Questo attributo facoltativo accetta un valore stringa v85 o v90. Il valore predefinito è v90 .

In questo caso, è consigliabile provare a specificare il valore "v85" e quindi richiedere nuovamente il comando bind o bind copy.

packageXmlFormat="v85"

Attributo del formato XML per il pacchetto SQL statico di DB2.

Annotazioni

Microsoft HIS 2013 (V9) supporta sia il formato precedente che quello nuovo, che include un XML Schema associato per la convalida del documento XML. Microsoft HIS 2009 e HIS 2010 (V8.5) supportano solo il formato precedente.

Problema relativo all'errore di connessione di test del client Microsoft per DB2

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

La soluzione consiste nel verificare la configurazione del servizio DRDA per Enterprise Single Sign-On.

Prima di tutto, verificare di aver configurato Enterprise Single Sign-On per Host-Initiated SSO e quindi di riavviare il servizio EntSSO seguendo i passaggi 6 e 7 nella sezione "Configurare HIS 2010 e ESSO V4.5".

In secondo luogo, verificare che l'host e le credenziali di Windows siano state mappate correttamente, seguendo i passaggi da 11 a 13 nella sezione "Per definire un'applicazione affiliata ESSO per l'accesso SSO avviato da Windows". Verificare inoltre di usare le credenziali host corrette dal client Microsoft per DB2 durante il test della connessione.

Problema con IBM QMF per z/OS che fallisce con l'errore 'nome della locazione non conosciuto'.

Errore di connessione di IBM QMF per z/OS (ad esempio SELECT * FROM HISDEMO1.DBO.CUSTOMERS) restituirà l'errore seguente.

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

La soluzione consiste nel verificare DB2 per il database di configurazione z/OS e riavviare DDF in base alle esigenze.

Verificare prima di tutto di aver aggiornato le tabelle del catalogo DB2 per z/OS (SYSIBM). LOCATIONS, SYSIBM. IPNAMES e SYSIBM. USERNAMES) con il database relazionale remoto.

In secondo luogo, chiedi al tuo amministratore di DB2 per z/OS di arrestare e riavviare il DB2 per z/OS Distributed Data Facility (DDF), ovvero il gateway del protocollo DRDA, e quindi riprovare la query SQL.

Problema con IBM QMF per z/OS che fallisce con errore di risorsa non disponibile

IBM QMF per z/OS errore di connessione (ad esempio SELECT * FROM HISDEMO1.DBO.CUSTOMERS) restituirà l'errore seguente.

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.

La soluzione consiste nel verificare DB2 per il database di configurazione z/OS e riavviare DDF in base alle esigenze.

Verificare prima di tutto di aver aggiornato le tabelle del catalogo DB2 per z/OS (SYSIBM). LOCATIONS, SYSIBM. IPNAMES e SYSIBM. USERNAMES) con il database relazionale remoto.

In secondo luogo, chiedere all'amministratore di DB2 per z/OS di arrestare e riavviare DB2 per z/OS Distributed Data Facility (DDF), che è il gateway del protocollo DRDA, e quindi riprovare ad eseguire la query SQL.

Problema con IBM QMF per z/OS che si arresta a causa di un errore di sintassi oppure una violazione delle regole di accesso

IBM QMF per z/OS, SPUFI, l'amministratore DB2 o un altro programma non riesce a eseguire query su un alias DB2 per z/OS (ad esempio, DBO.REMAREAS) su una tabella di SQL Server (ad esempio, HISDRDA1.DBO.AREAS), utilizzando DRDA AS, restituendo il seguente errore.

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.

Il log DRDA AS avrà l'errore corrispondente seguente.

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'.

La soluzione consiste nel verificare che sia stato creato un ALIAS o una VIEW corrispondente su SQL Server.

Per esempio:

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

Problema con IBM QMF per z/OS non riuscito con un errore di comunicazione

IBM QMF per z/OS errore di connessione (ad esempio SELECT * FROM HISDEMO1.DBO.CUSTOMERS) restituirà l'errore seguente.

A communications error was detected.
Message No: DSQ10427.

Ibm QMF for z/OS Messages and Codes Reference definisce il messaggio QMF DSQ10427 come SQLCODE -30081. Il riferimento ai codici IBM DB2 per z/OS definisce SQLCODE -30081 come errore di comunicazione.

La soluzione consiste nel verificare che l'elenco di eccezioni di Windows Firewall includa il programma MsDrdaService.exe nel computer del servizio DRDA.

  1. Scegliere Pannello di controllo dal menu Start, fare clic su Sistema e sicurezza, fare clic su Windows Firewall, scegliere Consenti programma o funzionalità tramite Windows Firewall, fare clic su Modifica impostazioni, fare clic su Consenti un altro programma, fare clic su Sfoglia, immettere "%SNAROOT%\MsDrdaService.exe", quindi fare clic su Aggiungi e quindi fare clic su OK.

  2. Riavviare il servizio DRDA.

Istruzione SELECT o CALL del client DRDA non riuscita

I programmi client DRDA associano un set di pacchetti standard che contengono istruzioni DECLARE CURSOR di base, con cui definire come recuperare e restituire i risultati nelle istruzioni SELECT e CALL. Se l'istruzione ha esito negativo, verificare se il pacchetto o la raccolta è elencato nel file IgnoreStandardPackages.txt. Se elencato, rimuovere il riferimento, riassociare ed eseguire nuovamente l'istruzione.

Errore di connessione al database relazionale di Access

Il servizio DRDA si connetterà a un database di SQL Server usando la stringa di connessione nel MsDrdaService.exe.config in risposta a una richiesta DRDA ACCRDB (Access Relational Database). In determinate circostanze, il tentativo di connessione al database di SQL Server potrebbe non riuscire con l'errore seguente.

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).

Il servizio DRDA tornerà al client DRDA il seguente errore IBM DB2.

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

In questi casi, è consigliabile usare la documentazione di Microsoft SQL Server e le procedure consigliate per determinare la causa dell'errore di connessione.

Problema con l'errore di autenticazione quando si usa ESSO avviato dall'host

Quando si ricevono connessioni in entrata da DB2 per z/OS che utilizzano l'autenticazione del servizio DRDA, il servizio DRDA eseguirà l'autenticazione basandosi esclusivamente sul nome utente. DRDA ACCSEC (Access Security) SECMEC (Meccanismo di sicurezza) è USRIDONL (solo identificativo utente).

Il servizio DRDA può scrivere l'errore seguente nel listener di tracce durante l'elaborazione del DRDA SECCHK (Controllo di sicurezza).

  • Impossibile autenticare l'utente: SSO LogonExternalUser non riuscito usando userid/passwd specificato.

    Per supportare questo metodo di autenticazione tramite Enterprise Single Sign-On avviato dall'host, è necessario impostare la proprietà "Verify external credentials" (Verifica credenziali esterne) su True nell'applicazione affiliata.

Problema durante l'elaborazione di BNDSQLSTT quando i nomi dei parametri contengono trattini

In base a MSDN, Microsoft SQL Server non riconosce i nomi delle variabili e i parametri della stored procedure delimitati. Questi tipi di identificatori devono essere conformi alle regole per gli identificatori regolari. Vedete https://msdn.microsoft.com/library/ms176027.aspx. Tuttavia, i nomi dei parametri PL/I e COBOL contengono trattini e altri caratteri speciali. La soluzione proposta per il servizio DRDA è di elaborare BGNBND BNDSQLSTT, rimuovendo i caratteri speciali e sostituendoli con un singolo underscore. Ad esempio, il servizio DRDA sostituisce il nome del parametro SQL statico "PARM-1" con il nome del parametro della stored procedure di SQL Server "PARM_1". Il servizio DRDA usa il valore sostituito durante l'elaborazione di BGNBIND BNDSQLSTT in una stored procedure di SQL Server o in un file di definizione SQL statico per DB2 XML. Vedere l'elenco di caratteri non validi nel riferimento T-SQL all'indirizzo https://msdn.microsoft.com/library/aa224033(v=SQL.80).aspx.

Valore originale Valore sostituito
tilde (~)
trattino (-)
punto esclamativo (!)
parentesi graffa sinistra ({)
percento (%)
parentesi graffa chiusa (})
simbolo caret (^)
apostrofo (')
e commerciale (&)
punto (.)
parentesi sinistra (()
backslash (\)
parentesi destra ())
accento grave (`)

Il servizio DRDA sostituisce caratteri non validi con un singolo carattere di sottolineatura.

Problema con l'elaborazione di BGNBND BNDSQLSTT quando il token di coerenza è illeggibile

La soluzione è che il DRDA AS elabori BGNBND BNDSQLSTT utilizzando una rappresentazione esadecimale del token di coerenza a 8 byte.

Problema con il timeout di connessione durante la connessione al partner di mirroring di SQL Server

Possibili errori durante il mirroring del database

Problema nel caricamento del listener di associazione personalizzato all'avvio del servizio

Il servizio DRDA restituirà un avviso se non è in grado di caricare un listener di associazione personalizzato all'avvio del servizio. L'avviso non impedisce l'avvio del servizio DRDA.

Questo problema può essere causato quando il servizio DRDA non può accedere al listener di binding personalizzato o alla directory in cui il listener di binding personalizzato è configurato per scrivere la copia di binding su file XML o file di tracciamento. L'amministratore deve impostare i diritti appropriati per l'elenco di controllo di accesso su queste directory.

Tutti i membri del gruppo utenti di HIS Runtime devono avere diritti di lettura ed esecuzione per la directory di sistema dei file di programma in cui è installata la libreria di collegamento dinamico del listener di binding personalizzato. Tutti i membri del gruppo HIS Runtime Users devono disporre dei diritti di scrittura, lettura ed esecuzione per creare copie di binding nelle directory in cui il listener personalizzato di binding scriverà i file di binding nei formati XML e di traccia.

Problema quando il listener di associazione personalizzata non restituisce un valore nell'interfaccia di callback.

Il servizio DRDA non restituirà un BGNBNDRM (Begin Bind Error Reply Message) al client richiedente DRDA quando un listener di associazione personalizzato non riesce a restituire al servizio DRDA l'istruzione DDL CREATE PROCEDURE. L'attributo errorWhenNoCallback indica al servizio DRDA di restituire BGNBNDRM (Begin Bind Reply Message) al client DRDA AR, quando il componente listener di associazione personalizzato non restituisce informazioni sull'interfaccia di callback. Questo attributo facoltativo accetta un valore booleano . Il valore predefinito è 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>

Valori predefiniti per packageBindListener nel file di configurazione dell'applicazione del servizio DRDA.

Problema con l'avvio del servizio DRDA come applicazione della riga di comando

Quando si avvia il servizio DRDA come applicazione da riga di comando, il programma può fallire causando un errore.

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

La soluzione consiste nell'arrestare il servizio DRDA già in esecuzione come servizio Windows.

Usando una finestra di comando, è possibile arrestare e avviare il servizio DRDA.

  1. Scegliere Tutti i programmi dal menu Start, scegliere Microsoft Visual Studio 2010, Visual Studio Tools, fare clic con il pulsante destro del mouse su Visual Studio x64 Win64 Command Prompt (2010) e scegliere Esegui come amministratore. Verrà visualizzata la finestra di dialogo Controllo account utente . Fai clic su per continuare.

  2. Dal prompt dei comandi immettere net stop msdrdaservice e premere INVIO.

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

    Usando una finestra di comando, è possibile eseguire il servizio DRDA come applicazione.

  3. Scegliere Tutti i programmi dal menu Start, scegliere Microsoft Visual Studio 2010, Visual Studio Tools, fare clic con il pulsante destro del mouse su Visual Studio x64 Win64 Command Prompt (2010) e scegliere Esegui come amministratore. Verrà visualizzata la finestra di dialogo Controllo account utente . Fai clic su per continuare.

  4. Dal prompt dei comandi immettere net stop msdrdaservice e premere INVIO.

    C:\Windows\system32>net stop msdrdaservice
    The Microsoft Service for DRDA service is stopping.
    The Microsoft Service for DRDA service was stopped successfully.
    
  5. Dal prompt dei comandi immettere cd C:\Windows\system32>cd C:\Programmi\Microsoft Host Integration Server 2013\system e premere INVIO.

    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
    

    Annotazioni

    Il log writer del servizio DRDA mostrerà informazioni nella finestra della console.

Impossibile caricare il listener dell'associazione di pacchetti personalizzati

All'avvio del servizio, se il servizio DRDA non è in grado di caricare un listener di associazione di pacchetti personalizzato, il servizio DRDA registra l'avviso seguente.

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 "

In fase di esecuzione, se MsDrdaService non è in grado di caricare un listener di associazione di pacchetti personalizzato, MsDrdaService non restituirà un errore.

Annotazioni

Il servizio DRDA continuerà a essere eseguito senza alcun avviso aggiuntivo. Il servizio DRDA supporta più listener di associazione di pacchetti personalizzati simultanei. Il professionista IT o lo sviluppatore deve correggere il problema, in base all'avviso iniziale dopo l'avvio del servizio DRDA.

La query su SYSIBM.SYSDUMMY1 restituisce SQLCODE -204

Per definire uno schema SYSIBM e una tabella SYSDUMMY1, modificare la clausola USE per fare riferimento al database SQL Server di destinazione e quindi eseguire l'istruzione .

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

Il binding interno del servizio DRDA includerà questo commento durante l'esecuzione dell'istruzione SQL 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 per creare lo schema SYSIBM e la tabella SYSDUMMY1.

Query restituisce un valore di parametro vuoto

L'istruzione CREATE PROCEDURE deve includere un commento, per indicare che verranno usati uno o più parametri OUTPUT per restituire i dati dall'istruzione SELECT.

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

Il bind interno del servizio DRDA includerà questo commento durante l'esecuzione della dichiarazione CREATE PROCEDURE.

Query restituisce un set di risultati vuoto

Quando si esegue DECLARE CURSOR FOR SELECT, il servizio DRDA può restituire un set di risultati vuoto e l'errore seguente.

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

L'istruzione CREATE PROCEDURE deve includere un commento, per indicare che la stored procedure restituirà un set di risultati.

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

Il legame interno del servizio DRDA includerà questo commento durante l'esecuzione del comando CREATE PROCEDURE.

La copia di binding ha esito negativo con SQLCODE -904

Quando si esegue DRDA BGNBND (Begin Bind) per copiare un pacchetto da DB2 per z/OS a SQL Server, usando il pannello DB2 Admin Bind Copy Package, il sistema DB2 può restituire un codice SQLCODE -904.

Questo problema può essere causato da una configurazione di sicurezza errata, associata al profilo 3270 usato per accedere alla sessione host.

L'esecuzione del pacchetto non riesce con SQLCODE 805

Quando si esegue un pacchetto SQL statico da DB2 per z/OS a SQL Server, usando un programma collegato db2 per z/OS in locale (TSO, CICS), il sistema DB2 può restituire un codice SQLCODE -805.

Questo problema può essere causato da una mappatura errata di DB2 per z/OS alla convenzione completa di denominazione dei pacchetti di SQL Server. Verificare che la copia di associazione produsse una stored procedure nello schema di SQL Server corrispondente al valore letterale DB2 per z/OS o al nome della raccolta corrispondente. Verificare inoltre che gli Aliases nel file MsDrdaService.exe.config includano qualsiasi mappatura richiesta tra le posizioni DB2 e i nomi dei database di SQL Server, o tra le raccolte DB2 e i nomi degli schemi di SQL Server.

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

Controllare inoltre i valori delimitati da virgole per l'attributo packageProcedureSchemaList all'interno dell'elemento di database del MsDrdaService.exe.config.

packageProcedureSchemaList="DBO,DSN8910"