Risoluzione dei problemi relativi agli errori di protocollo all'avvio del Motore di database
Quando in Motore di database di SQL Server viene rilevato un errore di protocollo durante l'avvio, viene scritto un messaggio di errore nel log degli errori di SQL Server e nel registro eventi di Windows nel formato seguente:
"Errore: 17182, gravità: 16, stato: 1."
"Inizializzazione di TDSSNIClient non riuscita con errore <x>, codice di stato <y>."
In questo messaggio <x> è il codice di errore sottostante restituito dal sottosistema di comunicazione o di protezione e <y> è lo stato di un errore di protocollo interno di SQL Server.
[!NOTA]
Il protocollo Shared Memory e il protocollo Named Pipes condividono alcuni aspetti della loro implementazione. L'esito negativo di un protocollo può infatti determinare l'esito negativo dell'altro protocollo. Se l'errore persiste nonostante il protocollo indicato nel messaggio di errore venga disattivato, provare a riavviare il Motore di database dopo aver disattivato entrambi i protocolli Shared Memory e Named Pipes.
Interpretazione del codice di errore
Il codice di errore sottostante, <x>, in genere è il codice di errore restituito dal livello rete di Windows o da una chiamata a Security Support Provider Interface (SSPI). Per i codici di errore di rete di Windows, l'esecuzione del comando net helpmsg può rivelarsi utile per l'interpretazione del codice. I codici di errore SSPI non sono invece altrettanto facili da decifrare. Può essere necessario eseguire ricerche nella Microsoft Knowledge Base o, se è installato l'SDK del sistema operativo, esaminare il file WinError.h.
Interpretazione del codice di stato degli errori di protocollo
Gli stati degli errori di protocollo di SQL Server sono elencati nella tabella seguente. Si noti che la maggior parte degli stati di errore indica una condizione di errore interno, ma esaminando il valore specifico è possibile ottenere informazioni più dettagliate sulla particolare area di protocollo a cui appartiene l'errore. Ad esempio, se il valore è incluso tra 7 e 30 (0x0A e 0x1E), l'errore proviene dall'elaborazione del protocollo TCP/IP. I codici di stato nel messaggio di errore vengono presentati in formato esadecimale. Nella tabella seguente viene indicato l'equivalente decimale per maggiore chiarezza.
Intervallo di codici di stato in formato esadecimale |
Intervallo di codici di stato in formato decimale |
Area di protocollo |
---|---|---|
0x03 |
3 |
Shared Memory |
0x07-0x1E |
7-30 |
TCP/IP |
0x1F-0x23 |
31-35 |
Connessione amministrativa dedicata (DAC, Dedicated Administrator Connection) |
0x35 |
53 |
Named Pipes |
0x36 |
54 |
VIA (Virtual Interface Adapter) |
0x38 |
56 |
SSL (Secure Sockets Layer) |
0x40-0x4F |
64-79 |
Shared Memory |
0x50-0x5F |
80-95 |
Named Pipes |
0x60-0x6F |
96-111 |
VIA |
0x70-0x7F |
112-127 |
HTTP |
0x80-0x8F |
128-143 |
SSL |
0x90-0x9F |
144-159 |
Generale |
Nella tabella seguente vengono elencati alcuni codici di errore comuni.
Codice di stato |
Descrizione |
---|---|
0x03 |
Errore durante l'avvio del supporto Shared Memory |
0x04 |
Tutti i protocolli disattivati |
0x0A |
Impossibile inizializzare il listener TCP/IP |
0x1C |
Server configurato per restare in attesa su un indirizzo IP specifico in un ambiente cluster |
0x1E |
Indirizzo IP duplicato rilevato nella rete |
0x35 |
Errore durante l'avvio del supporto Named Pipes |
0x36 |
Errore durante l'avvio del supporto VIA |
0x38 |
Errore durante il recupero o l'utilizzo del certificato SSL |
0x3A |
Impossibile inizializzare i listener di comunicazione |
0x40 |
Impossibile inizializzare il listener Shared Memory |
0x50 |
Impossibile inizializzare il listener Named Pipes |
0x60 |
Impossibile inizializzare il listener VIA |
0x70 |
Impossibile inizializzare il listener HTTP |
0x80 |
Impossibile inizializzare il supporto SSL |
Esempi
Di seguito viene riportato un esempio di un tipico errore che si verifica durante l'avvio: "Inizializzazione di TDSSNIClient non riuscita con errore 0x80092004, codice di stato 0x38."
Il valore 0x80092004 è un codice di errore SSPI che viene convertito in CRYPT_E_NOT_FOUND. 0x38 è un codice di errore interno che indica che il livello comunicazioni di SQL Server non è in grado di inizializzare il listener. Questo errore viene generato da SSL, quando non è possibile individuare il certificato.
Errori restituiti quando tutti i protocolli sono disattivati
Quando tutti i protocolli sono disattivati è possibile che si verifichino gli errori seguenti:
"Errore: 17182, gravità: 16, stato: 1."
"Inizializzazione di TDSSNIClient non riuscita con errore 0xd, codice di stato 0x4."
"Errore: 17182, gravità: 16, stato: 1."
"Inizializzazione di TDSSNIClient non riuscita con errore 0xd, codice di stato 0x1."
"Errore: 17826, gravità: 18, stato: 3."
"Impossibile avviare la libreria di rete a causa di un errore interno della libreria di rete. Per individuare la causa, nel log degli errori esaminare gli errori immediatamente precedenti."
"Errore: 17120, gravità: 16, stato: 1."
"Impossibile generare il thread FRunCM. Per informazioni sui possibili problemi correlati, vedere il log degli errori di SQL Server e i registri eventi di Windows."
Vedere anche