In questo post descriverò un esempio pratico di come è stato analizzato e risolto un errore durante il tentativo di aggiunta di un nodo ad un Sql Server in cluster.

Problema

Sql Server 2005 è stato disinstallato da uno dei nodi di un cluster tramite la procedura di rimozione di un nodo descritta in questo articolo
How to: Add or Remove Nodes in a SQL Server 2005 Failover Cluster (Setup)

Il tentativo di aggiungere nuovamente il nodo al cluster fallisce.

Dati da raccogliere

Tutte le informazioni per poter individuare un problema avvenuto durante il setup di Sql Server 2005 sono contenute nei file di log posizionati in %ProgramFiles%\microsoft sql server\90\setup bootstrap\log

In caso di installazioni di Sql Server in cluster, i log sono consolidati in un'unica cartella senza la necessità di doverli recuperare su ciascun nodo del cluster.

Analisi dei dati

Nei seguenti articoli del Books Online è contenuta una descrizione dei file di log di Sql Server 2005 e come analizzarli

Verificare il summary.txt

Il primo file da verificare è il summary.txt il quale contiene un riassunto per ciascuna componente installata.

Per questo particolare problema il file summary.txt presentava un errore durante l’installazione del database engine e indicava il log SQLSetup000X_<sqlsrv>_SQL.log come il file contenente l’errore.

Machine : Sqlx
Product : Microsoft SQL Server 2005 (64-bit)
Product Version : 9.00.1399.06
Install : Failed
Log File : \\sql\C$\Program Files\Microsoft SQL Server\90\Setup Bootstrap\LOG\Files\
SQLSetup000X_<sqlsrv>_SQL.log
Last Action : SetInstanceProperty
Error String : The setup has encountered an unexpected error while Setting Internal Properties. The error is: 183
Error Number : 29528

Verificare il file di log contenente l’errore e indicato nel summary.txt

Per individuare l’errore corrispondente nel file di log SQLSetup000X_<srv>_SQL.log è necessario aprirlo in notepad ed effettuare una ricerca per “Return value 3”.

La prima azione che va in errore è quella indicata nelle linee del file di log che precedono la stringa “Return value 3”.

Come si può verificare da un estratto del file di log SQLSetup000X_<srv>_SQL.log sotto riportato, cercando per “Return value 3” , si individua l’azione generante l’errore.

In questa situazione specifica l’errore consisteva in un tentativo di creare un file già esistente

Doing Action: SetInstanceProperty
PerfTime Start: SetInstanceProperty : Mon Oct 27 15:06:05 2008
<Func Name='SetInstanceProperty'>
MSI (s) (08!30) [15:06:05:344]: PROPERTY CHANGE: Adding SqlOriginalMachineName property. Its value is 'SQLX'.
MSI (s) (08!30) [15:06:05:344]: PROPERTY CHANGE: Adding SqlLegacyRegPath property. Its value is 'Microsoft SQL Server\INSTANCE'.
Loaded DLL:
C:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\xmlrw.dll
Version: 2.0.3609.0
Error Code: 0x800700b7 (183)
Windows Error Text: Cannot create a file when that file already exists.
Source File Name: sqlca\sqlcax.cpp
Compiler Timestamp: Wed Sep 21 01:10:12 2005
Function Name: SetInstanceProperty
Source Line Number: 969
Error Code: 183
MSI (s) (08!30) [15:08:48:663]: Product: Microsoft SQL Server 2005 (64-bit) -- Error 29528. The setup has encountered an unexpected error while Setting Internal Properties. The error is: 183
Error 29528. The setup has encountered an unexpected error while Setting Internal Properties. The error is: 183
<EndFunc Name='LaunchFunction' Return='183' GetLastError='0'>
Action ended 15:08:48: SetInstanceProperty.3EA9D9BF_D9D2_4023_B2A7_9E2137B2FB1B. Return value 3.
Action ended 15:08:48: INSTALL. Return value 3.

Sapendo che l’istanza era stata precedentemente rimossa dal nodo in cui si è verificato il problema e indicando il setup un errore relativo al tentativo di creare un file già esistente, abbiamo proceduto manualmente alla rimozione dell’istanza di Sql Server sul nodo avente il problema secondo la procedura sotto riportata.

Prima di indicare i punti della procedura utilizzata in questo specifico problema è bene tener presente che generalmente le procedure di rimozione manuale di un’istanza di Sql Server sono documentate pubblicamente nel seguente articolo: How to uninstall an instance of SQL Server 2005 manually

Di seguito le attività effettuate sul nodo affetto dal problema in questa specifica situazione:

  • Backup delle chiavi di registry al fine di garantire il server da danni causati da eventuali errori
    How to back up and restore the registry in Windows
  • Localizzazione della seguente chiave di registry HKLM\Software\Microsoft\Microsoft SQL Server\Instance Name\Sql ed individuazione del valore MSSql.X relativo all’istanza avente il problema
  • All’interno di HKLM\Software\Microsoft\Microsoft SQL Server\Instance Name\Sql rimozione della chiave relativa all’istanza in questione
  • Rinomina della cartella relativa all’istanza c:\program files\microsoft SQL Server\MSSQL.X
  • Rimozione di HKLM\Software\Microsoft\Microsoft SQL Server\MSSQL.X
  • Rimozione di
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServer$InstanceName
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT$InstanceName
  • Riavvio del nodo

Il successivo tentativo di aggiunta dell’istanza al nodo del cluster fallì con un nuovo errore.

Partendo sempre dalla verifica del file summary.txt è stato possibile individuare il secondo errore:

Machine : SQLX
Product : Microsoft SQL Server 2005 (64-bit)
Product Version : 9.00.1399.06
Install : Failed
Log File : \\Sqlx\C$\Program Files\Microsoft SQL Server\90\Setup Bootstrap\LOG\Files\
SQLSetup000X_<sqlsrv>_SQL.log
Last Action : InstallFinalize
Error String : The setup has encountered an unexpected error while Completing Commit. The error is:
The cluster resource could not be found.
Error Number : 29528

Il file di log SQLSetup000X_<sqlsrv>_SQL.log indicato nel summary.txt non conteneva il nome della risorsa cluster non trovata.

Pertanto, non avendo ulteriori informazioni se non l’indicazione nel file di log di una risorsa cluster non trovata, sono state verificate le chiavi di registry associate alle risorse cluster relative ad un’installazione di Sql Server in cluster.

Durante la verifica delle chiavi di registry relative a Sql Server, Sql Server Agent e Full Text Search è emerso che la chiave relativa a Sql Server Agent non presentava i valori di VirtualServerName e InstanceName   che devono essere presenti per tale risorsa in un’installazione di Sql Server in cluster

Di seguito le chiavi verificate:

HKEY_LOCAL_MACHINE\Cluster\Resources\ 710f2e43-4387-4066-848f-c1e189f82349
    Name    REG_SZ    SQL Server Agent (SQLINSTANCE)

HKEY_LOCAL_MACHINE\Cluster\Resources\ 710f2e43-4387-4066-848f-c1e189f82349\Parameters
    ServiceName    REG_SZ    SQLAgent$QLINSTANCE
    StartupParameters    REG_SZ   
    UseNetworkName    REG_DWORD    0x0

Di seguito , come dovrebbero apparire i valori di VirtualServerName e InstanceName per la risorsa Sql Server Agent

Per ricreare correttamente la chiave di registry relative alla risorsa Sql server Agent è stato seguito il seguente articolo
How to manually re-create the resource-specific registry keys for SQL Server cluster resources

Una volta ricreata correttamente la chiave di registry per la risorsa Sql Server Agent è stato possibile risolvere questo ultimo errore “The cluster resource could not be found” e aggiungere l’istanza di Sql Server al nodo del cluster.

 

Raffaella Canobbio
Support Escalation Engineer
Microsoft Enterprise SQL Support