Wstęp

Proces instalacji to czynność długotrwała. Dodatkowo wymaga on co jakiś czas uwagi, choćby po to, aby potwierdzić warunki licencji, lub wcisnąć przycisk Dalej, albo podjąć jakąś decyzję. Na szczęście instalacja nie zdarza się zbyt często, więc wymienione niedogodności nie są zbyt uciążliwe.

Zdarzają się jednak sytuacje, kiedy zaczynają być sporą przeszkodą. Wyobraźmy sobie, że na pendrive dostarczamy klientowi jakąś bazę (np.: dla edycji Express MSSQL serwera), na której za pomocą przygotowanych przez nas skoroszytów Excela, może on wykonywać różne analizy. Z pewnością nie należy oczekiwać, że poradzi on sobie z instalacją serwera (nawet jeśli dostarczymy ją razem z bazą).

Inną osobą, dla której przeszkodą może być instalacja serwera, będzie nowicjusz chcący rozpocząć naukę języka T-SQL. Nie ma on żadnego pojęcia o poziomach dostępu, instancjach i tym podobnych pytaniach, które w trakcie instalacji mogą się pojawić. Narzędzie, które pozwoli mu szybko i bezproblemowo uzyskać działający serwer MSSQL będzie bardzo pomocne.

Na tle opisanych sytuacji nawet wspomniana na początku jednorazowa instalacja może być warta przygotowania jej w wersji automatycznej. Zawsze bowiem można ją w prosty sposób powtórzyć, jeśli zajdzie taka potrzeba (choćby po awarii systemu). I zawsze będzie to dokładnie taka sama instalacja, czego nie można oczekiwać w przypadku konieczności przypominania sobie wszystkich parametrów tej pierwotnie wykonywanej kilka miesięcy temu (kto z nas będzie pamiętać, jak to się tak naprawdę instalowało).

Przepis na automat

Co zatem należy zrobić, aby przygotować instalację automatyczną, w pełni powtarzalną? Właściwie niewiele, albowiem instalator serwera MSSQL posiada już w sobie taką funkcjonalność. Wystarczy jedynie wywołać go z odpowiednim zestawem parametrów i wszystko zrobi się samo. Zestaw tych parametrów dla każdej wersji MSSQL jest inny. Dla wersji 2008 (i wyższych) serwera SQL wraz z poleceniem instalacji wygląda on tak:

setup.exe
	/QS /ACTION=Install /FEATURES=SQL,Tools /INSTANCENAME=MSSQL
	/SECURITYMODE=SQL /SAPWD=asSA1#9$ /ADDCURRENTUSERASSQLADMIN=True
	/SQLSYSADMINACCOUNTS=BUILTIN\Administratorzy
	/SQLSVCACCOUNT="NT AUTHORITY\SYSTEM"
	/SQLSVCSTARTUPTYPE=Automatic /NPENABLED=1 /TCPENABLED=1
	/IAcceptSQLServerLicenseTerms=1

lub wszystko w jednej linii:

setup.exe /QS /ACTION=Install /FEATURES= SQL, Tools /INSTANCENAME=MSSQL /SECURITYMODE=SQL /SAPWD=asSA1#9$ /ADDCURRENTUSERASSQLADMIN=True /SQLSYSADMINACCOUNTS=BUILTIN\Administratorzy /SQLSVCACCOUNT="NT AUTHORITY\SYSTEM"  /SQLSVCSTARTUPTYPE=Automatic /NPENABLED=1 /TCPENABLED=1  /IAcceptSQLServerLicenseTerms=1

Na potrzeby powyższego przykładu zakładam, że instalator to aplikacja o nazwie setup.exe (różne edycje serwera MSSQL maja bowiem różne nazwy instalatora).

Instalacja oczywiście musi następować z konta Windows o uprawnieniach administratora. Powyższe polecenie zainstaluje serwer SQL o nazwie MSSQL wraz z niezbędnymi narzędziami. Konto, z którego nastąpi instalacja stanie się jednocześnie kontem administratora serwera MSSQL.

Przepisy alternatywne

Czy to jedyny sposób na automatyczną instalację? Nie. Możliwe jest jeszcze zawarcie większości powyższych parametrów w pliku konfiguracyjnym (ParametryInstalacji.ini) i uruchomienie instalacji w ten sposób:

setup.exe /ConfigurationFile=ParametryInstalacji.ini

Interesująca cechą tej metody jest to, że plik konfiguracji można wygenerować automatycznie rozpoczynając instalację ręczną i przerywając ją w momencie dotarcia do kroku Ready to install, w którym to miejscu wyspecyfikowana jest ścieżka do wygenerowanego pliku konfiguracji. Więcej informacji na ten temat można uzyskać z tego dokumentu How to: Install SQL Server Using a Configuration File.

Niestety w przypadku edycji Express Serwera SQL może się to nie udać, ponieważ przygotowany dla niej instalatora ma uproszczony zestaw kroków instalacji i wspomniany krok Ready to install w nim nie występuje. Na szczęście jest na to rozwiązanie – należy uruchomić program instalacyjne z dwoma parametrami, tj.:

setup.exe /ACTION=Install /UIMODE=Normal

Poniżej przykład pliku konfiguracyjnego, zawierający m.in. zaprezentowany wcześniej zestaw parametrów:

[OPTIONS]
; instalator ma dokonać instalacji
ACTION="Install"
; co ma zostać zainstalowane
FEATURES=SQL,Tools
; akceptacja warunków licencji - skoro użytkownik nie ma szans tego zrobić.
IAcceptSQLServerLicenseTerms=1
; nazwa instancji serwera SQL
INSTANCENAME="MSSQL"
; identyfikator instancji serwera SQL (wykorzystywany do struktury folderów, rejestru i nazw usług)
INSTANCEID="MSSQL"
; autentykacja ma być mieszana
SECURITYMODE="SQL"
; a hasłow SA następujące
SAPWD="asSA1#9$"
; administratorem serwera będzie użytkownik, na koncie którego dokonywana jest instalacja
ADDCURRENTUSERASSQLADMIN="True"
; do roli sysadmins dodani zostaną wszyscy administratorzy lokalni komputera
SQLSYSADMINACCOUNTS="BUILTIN\Administratorzy"
; bez interakcji z użytkownikiem
QUIET="False"
; wyłącznie prezentacja postępu instalacji
QUIETSIMPLE="True"
; SQL Server uruchamiany automatycznie
SQLSVCSTARTUPTYPE="Automatic"
; Konto dla usługi SQL Server
SQLSVCACCOUNT="NT AUTHORITY\SYSTEM"
; włączenie protokołu TCP/IP
TCPENABLED="1"
; włączenie protokołu Named Pipes
NPENABLED="1"
; folder dla baz danych użytkownika (każda baza zakładana przez użytkownika trafi do tego folderu)
; SQLUSERDBDIR="d:\SQLServerUserDB"

Jeszcze inny sposób instalacji automatycznej, to skorzystanie Microsoft Web Platform Installer (Web PI), darmowego narzędzia ułatwiającego pobieranie i instalowanie m.in. SQL Server Express.

Jest reguła – są wyjątki

Choć instalacja będzie przebiegać automatycznie należy wspomnieć, że w systemach Windows Vista i Windows 7 istnieje mechanizm UAC, który może wymagać dodatkowej ingerencji użytkownika już po uruchomieniu instalacji automatycznej. Konieczne będzie jeszcze wyrażenie zgody na uruchomienie programu instalacyjnego.

Niektóre edycje MSSQL 2008 – np. Express – są przygotowane w formie samo rozpakowującego się archiwum. W tym przypadku automat rozpakowujący nie rozumie podanych parametrów, więc nie przekazuje ich dalej, tj. do właściwego programu instalacyjnego. Dlatego należy rozpakować takie archiwum niezależnie, np. za pomocą darmowego 7-zip i dopiero otrzymany w ten sposób setup.exe uruchomić z podanymi wyżej parametrami.

I co dalej?

Aby połączyć się z poziomu SQL Server Management Studio uruchamianego na komputerze, na którym dokonano instalacji automatycznej MSSQL, wymagane będzie podanie nazwy: .\MSSQL (w polu Server Name), zaś w polu Authentication, wybranie opcji Windows Authentication. Jeżeli serwer instalowano na serwerze sieciowym (SerwerSieci), wówczas połączenie z dowolnej stacji roboczej uzyskuje się uzupełniając nazwę serwera (tak naprawdę tzw. instancji) MSSQL nazwą serwera sieciowego (np. SerwerSieci\MSSQL, zamiast kropki będzie SerwerSieci). Jeżeli posiadamy konto systemu Windows na tym serwerze, będą to wszystkie parametry połączenia, w przeciwnym wypadku należy jeszcze zmienić sposób uwierzytelniania (pole Authentication) na SQL Server Authentication, a jako konto podać SA i uzupełnić hasłem asSA1#9$.

Księga zaklęć

Na koniec wypadałoby wytłumaczyć znaczenie wszystkich użytych parametrów, aby nie pozostawiać u czytelnika niedosytu. Objaśnię je zgodnie z kolejnością użycia:

  • QS – powoduje, że instalacja będzie przebiegała bez konieczności angażowania użytkownika. Prezentowany będzie jedynie postęp instalacji, aby uruchamiający widział, że instalacja jest w toku. Warto nadmienić, że możliwa jest też całkowicie cicha instalacja, bez informacji o postępie – uzyskuje się ją używając parametru Q.
  • ACTION – ten parametr chyba nie wymaga wyjaśnienia. Instruuje on instalator, jaka akcja ma zostać podjęta. W tym przypadku jest to instalacja (Install).
  • FEATURES – definiuje zakres instalowanych składników serwera, w powyższym przypadku obejmuje ona wszystkie składniki oraz dodatkowo narzędzia (w tym SQL Server Management Studio) – o ile dana instalacja je zawiera.
  • INSTANCENAME – nazwa instancji serwera, potocznie nazywana nazwą serwera SQL (choć tak naprawdę na nazwę te składa się nazwa komputera, na którym serwer pracuje i nazwa instancji). Jeśli serwer jest instalowany na komputerze, z którego będzie on używany wówczas do połączenia wystarczy użyć nazwy (local)\MSSQL lub .\MSSQL.
  • SECURITYMODE – określa sposób dostępu do serwera SQL, użyty tutaj atrybut SQL oznacza, że uwierzytelnianie może być realizowane także za pomocą systemu kont serwera SQL, a nie wyłącznie za pomocą kont systemu Windows (które jest domyślnym sposobem dostępu).
  • SAPWD – hasło dla konta administracyjnego MSSQL (SA), niezbędne, ponieważ dopuszczono uwierzytelnianie poprzez konta serwera SQL.
  • ADDCURRENTUSERASSQLADMIN – konto, z którego dokonywana jest instalacja będzie kontem administracyjnym serwera SQL.
  • SQLSYSADMINACCOUNTS – służy do określenia grupy kont systemu Windows, które zostaną skojarzone z rolą sysadmin (administratorów instancji SQL Server) czyli będą mogły administrować tymże serwerem.
  • SQLSVCACCOUNT – definiuje konto Windows, z poziomu którego będzie uruchamiany proces serwera MSSQL. Podane w przykładzie konto System może rodzić zastrzeżenia ze strony administratorów, jego wybór wynika jednak stąd, że pozwala zainstalować MSSQL na systemach od XP wzwyż.
  • SQLSVCSTARTUPTYPE – określa sposób uruchamiania usługi serwera MSSQL, w powyższym przykładzie usługa będzie uruchamiana automatycznie, co oznacza, że z chwilą uruchomienia komputera serwer MSSQL rozpocznie swoją pracę.
  • NPENABLED – włączenie protokołu Named Pipes dla serwera MSSQL.
  • TCPENABLED – włączenie protokołu TCP dla serwera MSSQL.
  • IAcceptSQLServerLicenseTerms – z atrybutem 1 powoduje, że automatycznie zostaną zaakceptowane warunki licencyjne dla instalowanego serwera.
  • SQLUSERDBDIR – folder dla baz danych użytkownika (każda baza zakładana przez użytkownika trafi do tego folderu)

Pełna lista parametrów instalatora została umieszczona w MSDN: How to: Install SQL Server from the Command Prompt.

Dopieszczanie

Automatycznie można także odblokować dla serwera SQL zaporę Windows. Oto stosowny plik wsadowy dla systemów Vista, Windows 7 i Windows Serwer 2010:

rem odblokowanie portu
netsh advfirewall firewall add rule name="SQL Port" dir=in protocol=TCP action=allow localport=1433 profile=any
rem odblokowanie SQL Server
netsh advfirewall firewall add rule name="SQL Server" dir=in action=allow program="%programfiles%\Microsoft SQL Server\MSSQL10_50.ILC\MSSQL\Binn\sqlservr.exe" profile=any
rem odblokowanie SQL Browser
netsh advfirewall firewall add rule name="SQL Browser" dir=in action=allow program="%programfiles%\Microsoft SQL Server\90\Shared\sqlbrowser.exe" profile=any

oraz dla systemów XP i Windows Serwer 2003:

rem odblokowanie portu
netsh firewall set portopening protocol=TCP port=1433 name="SQL Port" mode=ENABLE profile=ALL
rem odblokowanie SQL Server
netsh firewall set allowedprogram program="%programfiles%\Microsoft SQL Server\MSSQL10_50.ILC\MSSQL\Binn\sqlservr.exe" name="SQL Server" mode=ENABLE profile=ALL
rem odblokowanie SQL Browser
netsh firewall set allowedprogram program="%programfiles%\Microsoft SQL Server\90\Shared\sqlbrowser.exe" name="SQL Browser" mode=ENABLE profile=ALL

Epilog

Podane polecenie można umieścić w pliku wsadu procesora poleceń (czyli pisząc po ludzku 🙂 w pliku *.BAT) i taki plik zapisać jako swoisty „gotowiec”, którego można potem użyć samemu lub przekazać innej osobie. Należy zawsze pamiętać o tym, aby instalację przeprowadzać z konta, które jest administratorem maszyny, na której instalowany jest serwer MSSQL.

Post Scriptum

Tak jak możliwa jest instalacja tą metodą, tak samo możliwa jest deinstalacja konkretnej instancji serwera (w naszym przykładzie instancji nazwanej MSSQL). Oto przepis:

setup.exe /QS /ACTION=Uninstall /FEATURES= SQL,Tools /INSTANCENAME=MSSQL

Niestety, oprócz tego, konieczne będzie usunięcie folderu C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQL. Aby się ono powiodło musi być wykonane z poziomu konta administracyjnego, tak samo zresztą, jak sama deinstalacja.