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.
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.
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.
Nei seguenti articoli del Books Online è contenuta una descrizione dei file di log di Sql Server 2005 e come analizzarli
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
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:
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