Powershell i SQL 14 – Tworzenie bazy danych z wykorzystaniem SMO

5-Lis-2016

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

 [Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")
$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

 $db = New-Object Microsoft.SqlServer.management.Smo.Database($sqlserver,’MyTest’)
 Teraz tworzymy obiekt ‘FileGroup’. Ten obiekt należy dołączyć do kolekcji FileGroups bazy danych
 $fileGroup =  New-Object Microsoft.SqlServer.Management.Smo.Filegroup($db,’PRIMARY’)
$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

 $dataFile = New-Object Microsoft.SqlServer.Management.Smo.DataFile($fileGroup,’MyTest_data’)
$dataFile.FileName = ‘c:\temp\MyTest_data.mdf’
$dataFile.Size = 5*1024
$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)

 $logFile = New-Object Microsoft.SqlServer.Management.Smo.LogFile($db, ’MyTest_log’)
$logFile.FileName = ‘c:\temp\MyTest_log.ldf’
$logFile.Size=2*1024
$db.LogFiles.Add($logFile)

Na tym etapie można sprawdzić jakie polecenie zostanie wykorzystane do utworzenia bazy danych:

 $db.Script()

script_create

Teraz pozostaje utworzyć bazę…

 $db.Create()

… a kiedy nie będzie już potrzebna można ją równie prosto usunąć:

 $db.Drop()

 

Dodaj komentarz:

Autor: Rafał Kraik