Archivio

Archive for marzo 2012

Primavera

23 marzo 2012 1 commento
Categorie:Giardinaggio, Natura

SQL Server 2012 installation issue

18 marzo 2012 3 commenti

Volendo non farmi mancare proprio nulla ed essendo appena stata rilasciata la RTM di SQL Server 2012 (quello che fino alla RC0 era conosciuto in codice col nome di “Denali”), ho voluto installare la RTM su uno dei miei server virtuali con Windows Server 2008 R2 Datacenter.

Ho scaricato quindi la iso dal sito Technet ed ho avviato il setup che si presenta così:

Scelgo “Installation” e parte il wizard, scelgo di installare tutte le features, clicco quasi sempre “Next” tranne pochi casi in cui devo cliccare “Add current user” (per l’amministrazione del server) e, poco prima del termine, compare un errore nell’avviamento di cinque dei servizi tra i quali lo stesso Database Engine (qui ho riprodotto l’errore che compariva anche con la RC0).

L’errore dettagliato di seguito riporta i servizi che non partono:

Feature: Reporting Services – Native

Status: Failed: see logs for details

Reason for failure: An error occurred for a dependency of the feature causing the setup process for the feature to fail.

Next Step: Use the following information to resolve the error, uninstall this feature, and then run the setup process again.

Component name: SQL Server Database Engine Services Instance Features

Component error code: 0x851A0019

Error description: Wait on the Database Engine recovery handle failed. Check the SQL Server error log for potential causes.

Error help link: http://go.microsoft.com/fwlink?LinkId=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=11.0.1750.32&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4025&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4025

Feature: Database Engine Services

Status: Failed: see logs for details

Reason for failure: An error occurred during the setup process of the feature.

Next Step: Use the following information to resolve the error, uninstall this feature, and then run the setup process again.

Component name: SQL Server Database Engine Services Instance Features

Component error code: 0x851A0019

Error description: Wait on the Database Engine recovery handle failed. Check the SQL Server error log for potential causes.

Error help link: http://go.microsoft.com/fwlink?LinkId=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=11.0.1750.32&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4025&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4025

Feature: Data Quality Services

Status: Failed: see logs for details

Reason for failure: An error occurred for a dependency of the feature causing the setup process for the feature to fail.

Next Step: Use the following information to resolve the error, uninstall this feature, and then run the setup process again.

Component name: SQL Server Database Engine Services Instance Features

Component error code: 0x851A0019

Error description: Wait on the Database Engine recovery handle failed. Check the SQL Server error log for potential causes.

Error help link: http://go.microsoft.com/fwlink?LinkId=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=11.0.1750.32&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4025&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4025

Feature: Full-Text and Semantic Extractions for Search

Status: Failed: see logs for details

Reason for failure: An error occurred for a dependency of the feature causing the setup process for the feature to fail.

Next Step: Use the following information to resolve the error, uninstall this feature, and then run the setup process again.

Component name: SQL Server Database Engine Services Instance Features

Component error code: 0x851A0019

Error description: Wait on the Database Engine recovery handle failed. Check the SQL Server error log for potential causes.

Error help link: http://go.microsoft.com/fwlink?LinkId=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=11.0.1750.32&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4025&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4025

Feature: SQL Server Replication

Status: Failed: see logs for details

Reason for failure: An error occurred for a dependency of the feature causing the setup process for the feature to fail.

Next Step: Use the following information to resolve the error, uninstall this feature, and then run the setup process again.

Component name: SQL Server Database Engine Services Instance Features

Component error code: 0x851A0019

Error description: Wait on the Database Engine recovery handle failed. Check the SQL Server error log for potential causes.

Error help link: http://go.microsoft.com/fwlink?LinkId=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=11.0.1750.32&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4025&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4025

Questi errori indicano in pratica che i servizi evidenziati poco sopra non si avviano con l’account messo di default dal wizard d’installazione.

Nei sistemi Windows 7 e Windows Server 2008 R2 per l’avvio dei servizi vengono utilizzati infatti i virtual accounts come rappresentato nella seguente tabella

Component Windows Vista and Windows Server 2008 Windows 7 and Windows Server 2008 R2
Database   Engine NETWORK   SERVICE Virtual   Account*
SQL Server   Agent NETWORK   SERVICE Virtual   Account*
SSAS NETWORK   SERVICE Virtual   Account*
SSIS NETWORK   SERVICE Virtual   Account*
SSRS NETWORK   SERVICE Virtual   Account*
SQL Server Distributed Replay Controller NETWORK   SERVICE Virtual   Account*
SQL Server Distributed Replay Client NETWORK   SERVICE Virtual   Account*
FD Launcher (Full-text Search) LOCAL   SERVICE Virtual   Account
SQL Server   Browser LOCAL   SERVICE LOCAL   SERVICE
SQL Server   VSS Writer LOCAL   SYSTEM LOCAL   SYSTEM

dove, nel caso specifico, i virtual accounts sono i seguenti

NT Service\ReportServer

NT Service\MSSQLSERVER

NT Service\MSSQLFDLauncher

NT Service\SQL Server Distributed Replay Client

NT Service\SQLSERVERAGENT

NT Service\MSSQLServerOLAPService

NT Service\SQL Server Distributed Replay Controller

NT Service\MsDtsServer110

Con un po’ di ricerche ed anche con il supporto di Davide Mauri (MVP SQL Server) pervengo a questa soluzione

http://blogs.msdn.com/b/sqlsakthi/archive/2010/08/31/quot-wait-on-the-database-engine-recovery-handle-failed-quot-while-installing-sql-server-2008.aspx

che indirettamente richiama questo articolo della KB

http://support.microsoft.com/kb/920114/en-us

ma anche provando a seguire le indicazioni della soluzione linkata andando ad aggiungere l’account NT Service\MSSQLSERVER con diritto = “full control” alla cartella PROTECT, quando tento di avviare il servizio del db engine ottengo in successione i seguenti errori  17190, 17182, 17182, 17826, 17120 tutti di origine MSSQLSERVER e il servizio non si avvia.

Provo allora a seguire l’indicazione fornita qui

http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/88b12134-55dc-408f-8250-ee79df359714

ma cambiando l’account di avvio dei servizi, sia dalla Management Console dei Servizi sia da SQL Server Configuration Manager, ed utilizzando Localsystem oppure Network Service a quel punto il servizio si avvia ma, eseguendo SQL Server Management Studio non è possibile loggarsi al Database Engine nè con le credenziali di un domain admin nè con quelle di “sa” messe appositamente durante il wizard d’installazione perchè in entrambi i casi si ottiene l’enigmatico errore di SQL Server 18546

http://blogs.msdn.com/b/sql_protocols/archive/2006/02/21/536201.aspx

Rileggendo con attenzione i links precedenti e, in particolare l’ultimo, collego il problema al certificato self-signed che SQL Server utilizza per crittografare le password e deduco che la soluzione della modifica dei permessi è corretta ma farla “a posteriori” non serve a nulla come dimostrato dalle mie prove perciò mi armo di santa pazienza e disinstallo nuovamente tutto e riavvio la macchina virtuale.

Dopo il riavvio eseguo Windows Update facendo applicare tutti gli aggiornamenti disponibili sui server di update di Microsoft onde evitare che manchi qualche patch connessa al servizio dei certificati, modifico le ACL della cartella %userprofile%\AppData\Microsoft\Roaming\Microsoft\Protect

concedendo diritto = “full control” all’account builtin “NT AUTHORITY\Network Service” come mostrato nell’immagine qui sotto

poi eseguo il setup d’installazione di SQL Server 2012 con i soliti “Next” ma, al passo in cui si definiscono gli accounts di avvio dei servizi, modifico l’account di avvio di tutti i servizi

dall’account proposto di default il cui tipo generico è “NT Service\SQLSERVERAGENT” con l’account builtin “NT AUTHORITY\Network Service” come mostrato qui

e finalmente l’installazione viene completata con successo senza alcun errore, tutti i servizi ad avvio automatico si avviano ed è possibile connettersi da SSMS al Database Engine con le utenze stabilite.

Buon SQL Server 2012 a tutti! 🙂

La mia prima applicazione nel Cloud

Volevo provare il brivido del Cloud perciò ho deciso di cimentarmi con la prima applicazione di test da pubblicare su Windows Azure ed ho utilizzato una buona guida per sviluppare e deployare una applicazione Asp.Net MVC 3 con connessione a SQL Azure.

La guida step-by-step è disponibile a questo link:

https://www.windowsazure.com/it-it/develop/net/tutorials/web-app-with-sql-azure/

Il primo step è solo quello di creare una applicazione ASP.NET MVC 3 predefinita, cambiare il titolo e pubblicarla in Azure. Parto quindi da Visual Studio 2010 con un’applicazione MVC 3 in cui ho cambiato solo il titolo in .Layout.vbhtml e, dopo l’autenticazione, inizio il deployment in Azure direttamente da Visual Studio

contemporaneamente dalla console di Azure si vede l’inizializzazione del ruolo e dell’istanza

In Visual Studio è possibile seguire passo passo il deployment

e, fino a quando l’istanza in Azure non viene messa in “up and running”, sotto Visual Studio continuiamo a vedere un “unknown state” ma, dopo un po’ di minuti, otteniamo un “Complete” come mostrato qui sotto

e finalmente la “bozza” di applicazione è pubblicata nel Cloud.

A questo punto bisogna aggiungere il controller con il nome di HomeController e creare la nuova istanza di SQL Azure configurando opportunamente il firewall di Azure per permettere l’accesso all’istanza di SQL.

Fatto ciò è opportuno disporre delle due trasformazioni del file Web.config che introducono le variazioni della configurazione base qualora si stia provando l’applicazione in debug o si usi l’applicazione rilasciata in produzione.

Le due trasformazioni dovrebbero già essere presenti in un progetto MVC 3 con i nomi Web.Debug.config e Web.Release.config ma se non lo fossero è possibile crearle facendo tasto destro sul Web.config e scegliendo “Add Config Transforms”.

Purtroppo nel mio caso l’opzione “Add Config Transforms” era disabilitata e i file per inserire le trasformate di configurazione non erano disponibili.

Che fare ?

La soluzione è stata recuperata qui

http://stackoverflow.com/questions/3577931/web-config-transformation-option-is-greyed-out

ed è la seguente:

I couldn’t see the transform files because vb.net in its infinite wisdom decided not to natively show the associated config files. Apparently there is no choice but to select “show all files” in order to see them.”

Una volta visibile il file Web.Release.config ho potuto scrivere la trasformazione indicata all’interno del file stesso.

A questo punto ho preso in considerazione quanto indicato nella nota che riporto integralmente:

“Nota: l’utente amministrativo ha accesso a tutti i database nel server. Per creare un utente di SQL Azure con autorizzazioni più limitate, effettuare i passaggi in Aggiunta di utenti al database di SQL Azure. Modificare la stringa di connessione per poter utilizzare la password e il nome utente appena creati anziché la password e il nome utente di amministratore.”

Poichè SQL Azure non dispone ancora di sufficienti strumenti di amministrazione per la manipolazione di utenti, il blog-post linkato è perfetto per quanto riguarda le informazioni necessarie alla creazione di utenti e per l’attribuzione a questi utenti di uno o più ruoli nel database, purtroppo non è corretto nel link necessario a connettersi a SQL Azure usando Sql Server Management Studio infatti il link riportato rimanda qui

http://blogs.msdn.com/b/sqlazure/archive/2010/05/18/10014309.aspx

mentre ho trovato le informazioni necessarie e precise a questo link

http://blogs.msdn.com/b/ramaprasanna/archive/2009/09/04/connecting-to-sql-azure-from-sql-management-studio-2008.aspx

Ovviamente, affinchè la connessione vada a buon fine è necessario modificare ancora la configurazione del firewall a protezione di SQL Azure andando ad aggiungere tra gli indirizzi consentiti anche l’ip della vostra macchina di sviluppo su internet.

A questo punto ho potuto procedere alla pubblicazione facendo notare che le modifiche alla ConnectionString sono state apportate solo nella trasformata We.Release.config e pertanto la pubblicazione su Azure va modificata mettendo

  • Environment: Production
  • Build configuration: Release

Una volta pubblicata in Azure l’applicazione non funzionava ancora perchè purtroppo nella guida si sono dimenticati di precisare in questo punto

  1. Nella sezione <configuration> / <connectionStrings> sostituire tutti gli elementi come indicato di seguito. Sostituire il segnaposto <serverName> con il nome del server creato. Per <user> e <password> immettere la password e il nome utente di amministratore creati in precedenza.

<connectionStrings> <add name=”ToDoDb” connectionString=”data source=<serverName>.database.windows.net;Initial Catalog=ToDoDb;User ID=<user>@<serverName>;Password=<password>;Encrypt=true;Trusted_Connection=false;MultipleActiveResultSets=True” providerName=”System.Data.SqlClient”/> <add name=”DefaultConnection” connectionString=”data source=<serverName>.database.windows.net;Initial Catalog=ToDoDb;User ID=<user>@<serverName>;Password=<password>;Encrypt=true;Trusted_Connection=false;MultipleActiveResultSets=True” providerName=”System.Data.SqlClient”/> </connectionStrings>

che all’interno di ciascuna connectionsString modificata va aggiunto anche

xdt:Transform=”SetAttributes” xdt:Locator=”Match(name)”

e questo alla fine permette l’uso delle connectionStrings modificate quando l’applicazione viene pubblicato come “Build configuration: Release” nel Cloud infatti a questo punto ho potuto inserire la mia prima attività nella lista

Ciao e buon Azure a tutti.

Categorie:Azure, Cloud, Developer, Sviluppo