Ponieważ SMO jest warstwą wykorzystywaną także przez SQL Server Management Studio, to praktycznie wszystkie rzeczy jakie można zrobić korzystając z SSMS można też wykonać korzystając z SMO.
Poniższy przykład ilustruje jak utworzyć bazę danych zmieniając jej ustawienia domyślne. Zaczynamy od załadowania SMO i podłączenia się do określonej instancji SQL
1 |
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") |
1 |
$SqlServer = New-Object Microsoft.SqlServer.Management.Smo.Server localhost |
Oto jeden z najważniejszych momentów. Tworzymy obiekt bazy. Właściwie kolejną instrukcją mogłoby być $db.Create(), ale wtedy baza przyjęłą by wszystkie wartości domyślne
1 |
$db = New-Object Microsoft.SqlServer.management.Smo.Database($sqlserver,’MyTest’) |
1 |
Teraz tworzymy obiekt ‘FileGroup’. Ten obiekt należy dołączyć do kolekcji FileGroups bazy danych |
1 |
$fileGroup = New-Object Microsoft.SqlServer.Management.Smo.Filegroup($db,’PRIMARY’) |
1 |
$db.FileGroups.Add($fileGroup) |
Następny krok to utworzenie pliku danych. Dodatkowo zmieniamy jeszcze rozmiar i lokalizację pliku. Liczba definiująca rozmiar zostanie podczas tworzenia bazy zinterpretowana jako ilość kilobajtów, czyli tu tworzymy bazę o rozmiarze 5MB. Tak przygotowany obiekt pliku należy na końcu dodać do obiektu FileGroup do kolekcji Files
1 |
$dataFile = New-Object Microsoft.SqlServer.Management.Smo.DataFile($fileGroup,’MyTest_data’) |
1 |
$dataFile.FileName = ‘c:\temp\MyTest_data.mdf’ |
1 |
$dataFile.Size = 5*1024 |
1 |
$fileGroup.Files.Add($dataFile) |
Podobnie postępujemy z plikiem log, który jednak dodajemy do kolekcji logfiles obiektu bazy danych (pliki log nie są dzielone na grupy plików)
1 |
$logFile = New-Object Microsoft.SqlServer.Management.Smo.LogFile($db, ’MyTest_log’) |
1 |
$logFile.FileName = ‘c:\temp\MyTest_log.ldf’ |
1 |
$logFile.Size=2*1024 |
1 |
$db.LogFiles.Add($logFile) |
Na tym etapie można sprawdzić jakie polecenie zostanie wykorzystane do utworzenia bazy danych:
1 |
$db.Script() |
Teraz pozostaje utworzyć bazę…
1 |
$db.Create() |
… a kiedy nie będzie już potrzebna można ją równie prosto usunąć:
1 |
$db.Drop() |