Powershell i SQL 01 – Co to jest SQL Server Management Objects (SMO)

28-maj-2015

SQL Server Management Objects (SMO) – pozwalają na tworzenie własnych aplikacji, które będą zarządzać serwerem SQL. Tutaj skupiamy się na tworzeniu skryptów powershell, które będą sięgać do SQL Server, aby konfigurować lub odczytywać konfigurację serwera SQL, ale możliwe jest również wykorzystywanie tych samych metod w C# lub Visual Basic.
Klasy obecne w modelu SMO dzielimy na:

  • Instance classes – klasy mocno związane z konkretną instancją SQL, a dalej idąc z bazami danych, a dalej z tabelami, indeksami triggerami itd. Pozwalają na tworzenie obiektów odpowiadających obiektom występującym w SQL.
  • Utility classes – klasy nie związane bezpośrednio z żadnym obiektem na serwerze SQL, ale pozwalające na wykonanie pewnych specyficznych czynności jak np. transfer danych, skryptowanie obiektów, czy backup i restore.

SMO instaluje się na systemie, gdy podczas instalacji wybierzesz Client Tools SDK. Jeśli chcesz zainstalować tylko SMO, bez instalowania SQL Server wybierz Shared Management Objects z SQL Server feature pack. (Szczegóły https://msdn.microsoft.com/en-us/library/ms162169.aspx).

Pracując z SMO pracujesz z obiektami znajdującymi się w kilku namespace. Najważniejszy jest obiekt Server, który znajduje się w namespace Microsoft.SqlServer.Management.Smo. Inne ważniejsze namespace to:

  • Microsoft.SqlServer.Management.Smo – zawiera klasy instancji (patrz wyżej), które pozwalają na pracę z instancją SQL i tym wszystkim, co na tej instancji się znajduje.
  • Microsoft.SqlServer.Management.Smo.Agent – zawiera klasy pozwalające na pracę z SQL Server Agent
  • Microsoft.SqlServer.Management.Smo.WMI – zawiera klasy „nakładki” na obiekty WMI
  • Microsoft.SqlServer.Management.Smo.RegisteredServers – zawiera klasy, które pozwalają pracować z registered servers.

Przed rozpoczęciem pracy z obiektami SMO należy załadować do pamięci odpowiedni assembly. Wykonasz to instrukcją:

[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") 
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMOExtended”)

Zwróć uwagę, że nazwy namespace różnią się od nazwy ładowanego assembly. Utworzenie obiektu odpowiadającego serwerowi SQL wykonasz komendą:

$SqlServer = New-Object Microsoft.SqlServer.Management.SMO.Server (‘Server\Instance’)

Alternatywne składnie tego samego polecenia to:

$SqlServer = New-Object –TypeName Microsoft.SqlServer.Management.SMO.Server -ArgumentList ‘Server\Instance’

Lub

$SqlServer = New-Object Microsoft.SqlServer.Management.SMO.Server ‘Server\Instance’

Dobry artykuł wprowadzający w zagadnienia związane z automatyzowaniem SQL, w tym z opisem klas znajdujących się w w/w namespace znajduje się pod adresem: https://technet.microsoft.com/en-us/library/dd938892(v=sql.100).aspx

SMO to jeden z wielu sposobów korzystania/zarządzania SQL z poziomu powershell. Oprócz tego można jeszcze:

  • Załadować moduł sqlps komendą:
Import-Module sqlps

co pozwoli na korzystanie z SMO oraz udostępni szereg cmdletów z modułu i i napęd SQLSERVER:

  • Uruchomić okrojony shell z załadowanym wstępnie modułem sqlps. Wystarczy w tym celu w sesji powershell wpisać
sqlps

lub uruchomić powershella z poziomu SQL Server Management Studio.

  • Skorzystać z metod programistycznych platformy .NET z namespace System.Data.SqlClient. Ta metoda pozwala na wykonywanie poleceń SQL na docelowej instancji, a więc w rezultacie wykonanie większości zadań administracyjnych.

Komentarze:

  1. Mobilo » Blog Archive » Powershell i SQL 02 – Wykorzystanie metod .NET napisał,

    […] tego, że wcale nie trzeba ładować żadnych dodatkowych bibliotek (porównaj z artykułem „Co to jest SMO„). Tworząc obiekt, wywołujesz po prostu konstruktor danej klasy. Tutaj tworzymy obiekt […]

  2. Mobilo » Blog Archive » Powershell i SQL 03 – Wykonywanie czynności dla każdej bazy danych napisał,

    […] Kolejny krok, który będzie się powtarzał również w następnych artykułach, więc warto go zapamiętać, to utworzenie obiektu odpowiadającego za instancję, na której chcesz pracować. U nas będzie to domyślna instancja na lokalnym komputerze. Tworzenie obiektu dokładniej pokazałem w części nr 1: […]

Autor: Rafał Kraik