Wyślij zapytanie Dołącz do Sii

SQL Server Management Objects (SMO) to zbiór obiektów .NET, które zostały stworzone w celu programistycznego zarządzania SQL Serwerem. Pierwszy raz wprowadzone zostały w SQL Server 2005 jako cześć SQL Server Feature Pack i obecnie dostępne są we wszystkich wersjach SQL Server łącznie z Express Edition.

SMO

Za pomocą SMO, jesteśmy w stanie zaprojektować aplikacją zbliżoną w funkcjonalności do Microsoft SQL Server Management Studio. Aby korzystać z SMO musimy zainstalować Client Tools SDK, który jest dostępny przy instalacji SQL Servera lub Shared Management Objects z SQL Server Feature Pack. Domyślnie SMO assembly jest instalowane w folderze (w przypadku SQL Server 2014) :

C:\Program Files\Microsoft SQL Server\120\SDK\Assemblies\

WYKORZYSTANIE SMO ZA POMOCA POWERSHELL

Załadowanie odpowiedniego assembly i podłączenie się do instancji SQL Server

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')
$ServerName =
$serverInstance = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $ServerName

Wyświetlenie informacji o wersji i statusie instancji SQL Server.

$serverInstance |select Product,Edition,Version,Status

Wyświetlenie listy wszystkich baz na serwerze i informacja o ostatniej dacie backupów i rozmiarze.

$serverInstance.Databases | select Name,LastBackupDate,LastDifferentialBackupDate,Size

Dzięki SMO możemy również wyświetlać obiekty i definicje obiektów w poszczególnych bazach.
Poniżej wyświetlamy listę widoków w bazie SiiBI z datami ich utworzenia, ostatniej modyfikacji oraz definicją.

$db = $serverInstance.Databases['SiiBI']
$db.Views | Select Name,CreateDate,DateLastModified,TextBody

Wyświetlenie wszystkich tabel z ilością wierszy jesteśmy w stanie zrealizować za pomocą jednej linijki kodu.

	$db.Tables | select Name, RowCount

Za pomocą SMO możemy również tworzyć nowe obiekty jak bazy, tabele, widoki czy procedury składowane.

$dtint = [Microsoft.SqlServer.Management.Smo.Datatype]::Int
 
$NewTable = New-Object Microsoft.SqlServer.Management.Smo.Table ($db,"NewTable","dbo")
$NewColumn = New-Object Microsoft.SqlServer.Management.Smo.Column ($NewTable, "NewColumn", $dtbigint)
$NewTable.Columns.Add($NewColumn)
 
$NewTable.Create()

Dzięki SMO możemy automatyzować zadania, które np. w SSMS wymagały by od nas ręcznego wyklikania. Poniższy skrypt zapisuje do plików definicje wszystkich tabel w bazie.

$location = 'D:\TEMP'
$mydate=get-date -format yyyy_MM_dd_hh_mm
 
$ScriptingOptions = New-Object Microsoft.SqlServer.Management.Smo.ScriptingOptions
$ScriptingOptions.IncludeDatabaseContext = 1
$ScriptingOptions.ToFileOnly = 1
 
foreach($t in $db.Tables)
{
$ScriptingOptions.FileName = join-path -path $location $($t.Name+"_"+$mydate+".sql")
$t.Script($ScriptingOptions)
}

AMO

Analysis Management Objects (AMO) podobnie jak SMO to biblioteka obiektów .NET to programistycznego zarządzania instancją Microsoft SQL Server Analysis Services. Domyślnie AMO assembly jest instalowane w tym samym folderze co SMO (w przypadku SQL Server 2014) :

C:\Program Files\Microsoft SQL Server\120\SDK\Assemblies\

Dzięki AMO możemy tworzyć modyfikować , usuwać I przeglądać obiekty jak wymiary, kostki, bazy OLAP itd. Możemy również procesować i skryptować obiekty. Warto zaznaczyć, że za pomocą AMO nie jesteśmy w stanie wysyłać zapytań MDX do kostek (w odróżnieniu do SMO i zapytań T-SQL), do tego potrzebujemy ADOMD.NET.
Podobnie jak w przypadku SMO również możemy wyświetlać metadane różnych obiektów w instancji SSAS, tzw. Major Objects. Major objects są to klasy które reprezentują kompletny obiekt jako cała encja a nie cześć jakiegoś innego obiektu. Do Major objects wliczamy Server, Cube, Dimension, MiningStructure ponieważ są to samodzielne encje. Obiekt typu Level na przykład nie jest major object gdyż jest częścią Dimension.

Poniższy rysunek przedstawia major objects do których mamy dostęp dzięki AMO.

1 - SQL Server Management Objects (SMO) oraz Analysis Management Objects (AMO)
2 - SQL Server Management Objects (SMO) oraz Analysis Management Objects (AMO)

WYKORZYSTANIE AMO ZA POMOCA POWERSHELL

Załadowanie odpowiedniego assembly i podłączenie się do instancji SQL Server Analysis Services.

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.AnalysisServices')
$serverName =
$server = New-Object Microsoft.AnalysisServices.Server
$server.connect($serverName)

Wyświetlenie informacji o wersji instancji SSAS.

$server |select ProductName, version, Edition, ServerMode

Wyświetlenie informacji o wersji instancji SSAS.

$server.Databases |select name, LastSchemaUpdate, LastUpdate, LastProcessed

Bardzo praktycznym zastosowaniem AMO może być tworzenie backupów definicji baz OLAP, w przypadku korzystania z SSMS zmuszeni bylibyśmy tworzyć skrypty ręcznie dla każdej bazy. Poniżej przykład prostego skryptu który zapisuje definicje baz jako skrypty xmla.

$location = 'D:\Temp\'
$serverName =
$mydate=get-date -format yyyy_MM_dd_hh_mm
 
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.AnalysisServices')
 
$server = New-Object Microsoft.AnalysisServices.Server
$server.connect($serverName)
 
foreach ($d in $server.Databases )
{
$stringbuilder = New-Object System.Text.StringBuilder
$stringwriter = New-Object System.IO.StringWriter($stringbuilder)
$xmlOut = New-Object System.Xml.XmlTextWriter($stringwriter)
$xmlOut.Formatting = [System.Xml.Formatting]::Indented
$scriptObject = New-Object Microsoft.AnalysisServices.Scripter
 
$MSASObject=[Microsoft.AnalysisServices.MajorObject[]] @($d)
 
$ScriptObject.ScriptCreate($MSASObject,$xmlOut,$false)
$filename= join-path -path $location $($d.Name+"_"+$mydate+".xmla")
$stringbuilder.ToString() |out-file -filepath $filename
}

Przedstawione proste przykłady to tylko wierzchołek góry lodowej jeśli chodzi o możliwości SMO i AMO. Dzięki tym 2 bibliotekom zyskujemy narzędzia, dające nam jeszcze więcej możliwość w realizacji zadań i zarządzaniu SQL Serverem.

Ocena:
Autor
Avatar
Khalil Kamil Al Naal

Developer rozwiązań Business Intelligence. Od 5 lat związany głównie z technologiami Microsoft, starający się zgłębić tajniki SQL Server oraz nowych technologii związanych z Big Data. W Sii wspiera rozwijanie wewnętrznego systemu raportowego oraz bierze udział w projektach dla klientów zewnętrznych.

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Może Cię również zainteresować

Pokaż więcej artykułów

Bądź na bieżąco

Zasubskrybuj naszego bloga i otrzymuj informacje o najnowszych wpisach.

Otrzymaj ofertę

Jeśli chcesz dowiedzieć się więcej na temat oferty Sii, skontaktuj się z nami.

Wyślij zapytanie Wyślij zapytanie

Natalia Competency Center Director

Get an offer

Dołącz do Sii

Znajdź idealną pracę – zapoznaj się z naszą ofertą rekrutacyjną i aplikuj.

Aplikuj Aplikuj

Paweł Process Owner

Join Sii

ZATWIERDŹ

This content is available only in one language version.
You will be redirected to home page.

Are you sure you want to leave this page?