Przykładowa baza danych AdventureWorks oraz jej nowszy odpowiednik WideWorldImporters to prawdziwe objawienie dla osób chcących nauczyć się podstaw obsługi systemu SQL Server oraz sposobów interakcji z bazą danych. Dzięki zawartym w nich obiektom możemy zapoznać się z wieloma aspektami i dobrymi praktykami przechowywania i wydobywania z bazy informacji, a także szybko i bez żadnych konsekwencji przećwiczyć oraz poeksperymentować z oferowanymi funkcjami i mechanizmami operującymi na zgromadzonych w bazie danych. Jednak nie oszukujmy się - głównym celem, dla którego będziemy pozyskiwać i wdrażać w naszym środowisku instancje serwera SQL Server, jest chęć zdefiniowania w nich naszych własnych baz danych zdolnych do przechowywania informacji utożsamianych z aktywami naszego biznesu, wartościami niematerialnymi i prawnymi oraz zasobami ludzkimi, którymi dysponujemy.
Kiedy mówimy o procesie tworzenia nowej relacyjnej bazy danych, mamy zazwyczaj na myśli projektowanie poszczególnych tabel i definiowanie między nimi odpowiednich związków. W praktyce proces tworzenia nowej bazy danych rozpoczyna się jednak od scharakteryzowania jej fizycznych aspektów. Oczywiście z logicznego punktu widzenia każda baza danych jest zbiorem tabel oraz wielu innych obiektów o zdefiniowanej strukturze i funkcjonalności, zdolnych do przechowywania i przeszukiwania milionów rekordów danych. Jeśli jednak na relacyjną bazę danych spojrzymy spoza systemu SQL Server, zobaczymy wówczas, że z tej perspektywy jest ona po prostu zbiorem powiązanych ze sobą plików binarnych przechowywanych w obrębie systemu plików. W rzeczywistości więc proces tworzenia nowej bazy danych musimy rozpocząć od określenia liczby oraz własności tych plików, stanowiących niejako fizyczny kontener na informacje o charakterze strukturalnym (wartości w wierszach i kolumnach) bądź też niestrukturalnym (dokumenty, zdjęcia czy pliki multimedialne).
Tworzenie bazy danych za pomocą narzędzia SQL Server Management Studio
Aby utworzyć nową, pustą bazę danych z wykorzystaniem graficznego narzędzia zarządzania Microsoft SQL Server Management Studio, należy kliknąć prawym przyciskiem myszy węzeł Databases, a następnie wybrać opcję New Database (Nowa baza danych), widoczną na samej górze menu kontekstowego. Na ekranie pojawi się okno dialogowe New Database, w którym będziemy mogli precyzyjnie zdefiniować parametry tworzonej przez nas bazy danych.
Okno dialogowe New Database podzielone jest na kilka odrębnych stron widocznych w wydzielonym panelu o nazwie Select a page (Wybierz stronę), z których każda przechowuje określoną grupę ustawień. Bezpośrednio po otwarciu okna dialogowego zaprezentowana zostaje strona ustawień General (Ogólne) zawierająca dwa obowiązkowe pola tekstowe do wypełnienia: Database name (Nazwa bazy danych) oraz Owner (Właściciel). Obydwa te pola wypełniamy zgodnie z ich przeznaczeniem, po czym możemy przystąpić do określenia parametrów dla plików będących fizyczną reprezentacją tworzonej bazy danych.
Pole Owner wypełniane jest domyślną wartością <default> reprezentującą konto bieżącego użytkownika tworzącego bazę danych, przy czym korzystając z przycisku wielokropka wyświetlającego okno dialogowe Select Database Owner będziemy mogli wskazać innego właściciela bazy danych. Okno to zawiera tradycyjną już funkcję wyszukiwania konta w systemie lub domenie.
Pliki bazy danych
Na każdą nową bazę danych składają się domyślnie dwa pliki. Pierwszy plik, typu ROWS Data, przechowywał będzie całą zawartość bazy danych, jaka zostanie do niej wprowadzona w czasie jej istnienia. Jest to więc zbiór wszystkich rekordów (wierszy) tej bazy danych, który otrzymuje standardowo nazwę zgodną z wprowadzoną przez nas nazwą bazy danych. Fizycznie na dysku plik ten będzie oznaczony rozszerzeniem MDF. Jak wskazują nam kolejne kolumny w tabeli ustawień Database files, plik ten należy domyślnie do grupy plików PRIMARY (grupa podstawowa), a jego początkowy rozmiar (wartość Initial Size) to 8 MB. O grupach plików powiemy sobie nieco później, natomiast teraz tylko wspomnimy, że choć przynależność rekordów danych do grup plików możemy zmodyfikować na stronie Filegroups w części Select a page, to jednak na tym etapie nie możemy tego zrobić, gdyż główny plik bazy danych musi być częścią grupy podstawowej. Nasza baza w miarę przyjmowania kolejnych danych rosnąć będzie stopniowo o 64 MB (wartość Autogrowth), a jej maksymalny rozmiar jest nieograniczony (wartość Maxsize) - w praktyce limit bazy danych wyznaczać nam będą oczywiście dostępne zasoby magazynowe naszego serwera lub wykorzystywana edycja systemu SQL Server.
Drugim obowiązkowym plikiem tworzącym bazę danych jest plik dziennika. Jest to plik typu LOG, którego nazwą będzie standardowo nazwa pozyskana z pola Database name z dopiskiem _log. Plik dziennika nie należy do żadnej grupy plików (wartość Not Applicable w kolumnie Filegroup), domyślnie tworzony jest z rozmiarem 8 MB i w miarę potrzeb jego pojemność wzrasta o kolejne 64 MB.
Oba te pliki przechowywane są w lokalizacji wskazanej w kolumnie Path. Zależnie od potrzeb, a już na pewno w środowisku produkcyjnym ze względów wydajnościowych, możemy rozdzielić te pliki na osobne katalogi, osobne partycje lub osobne lokalizacje magazynowania (dyski fizyczne). Lokalizacje dla tych plików mogą być praktycznie dowolne, przy czym należy pamiętać, że system musi dysponować dla nich odpowiednimi uprawnieniami dostępu. Jak już wspomnieliśmy, oba te pliki będą również rosnąć w miarę upływu czasu. Domyślne wartości dla ich rozmiaru i automatycznego rozrostu są stosunkowo niewielkie, więc w przypadku wprowadzania do bazy dużych ilości danych może ona rozrastać się zbyt często, co stwarza większe ryzyko jej fragmentacji (jak w przypadku każdego innego pliku na dysku, dla którego nie ma aktualnie dostępnej wymaganej ciągłej wolnej przestrzeni). Jeśli mamy już jakieś doświadczenie z bazami SQL Server, a przy tym znamy dokładne przeznaczenie nowo tworzonej bazy danych oraz jej potencjalny rozmiar maksymalny, będziemy mogli lepiej oszacować te parametry. Jeśli już na starcie utworzymy sobie bazę o większym rozmiarze niż proponowany nam rozmiar domyślny, a przy tym odpowiednio dobierzemy wartości jej automatycznego rozrostu, wówczas potrzebne na dane miejsce na dysku zostanie zarezerwowane z góry, a sama baza będzie rozrastać się rzadziej, co w efekcie końcowym przełoży się na mniejszy poziom jej fragmentacji i większą wydajność.
Parametry automatycznego rozrostu i maksymalnego rozmiaru pliku dostosowujemy za pomocą okna dialogowego Change Autogrowth for <NazwaBazyDanych>, które możemy wyświetlić poprzez kliknięcie przycisku wielokropka w kolumnie Autogrowth / Maxsize. W oknie tym możemy całkowicie wyłączyć funkcję Autogrowth, wprost zdefiniować w procentach lub megabajtach wielkość automatycznego rozrostu, a także wprowadzić lub zdjąć ograniczenie co do maksymalnej wielkości pliku bazy danych (lub jej dziennika). Należy jednak pamiętać, że jeśli ograniczyliśmy naszą bazę danych do określonego rozmiaru maksymalnego, wówczas po zapełnieniu bazy danymi do wskazanego limitu dalsze wstawianie do niej rekordów nie będzie już możliwe. Oczywiście bazę należy stale monitorować, by nie dopuścić do przekroczenia ustalonego limitu rozmiaru, a w przypadku braku takiego limitu - do zapełnienia całego dostępnego miejsca na dysku.
Po zakończeniu ustalania parametrów dla nowej bazy danych klikamy przycisk OK. Operacja tworzenia nowej bazy może potrwać kilka lub kilkanaście minut, w zależności od wybranych ustawień. Po utworzeniu bazy danych pod węzłem Databases w oknie Object Explorer widoczny będzie podwęzeł zatytułowany nazwą nowo utworzonej bazy. Jeśli pasek stanu w oknie SQL Server Management Studio wskazuje komunikat Ready (Gotowy), a mimo to okno Object Explorer nie wyświetla węzła nowej bazy danych, należy ręcznie odświeżyć zawartość okna Object Explorer poprzez kliknięcie prawym przyciskiem węzła Databases i wybranie opcji Refresh (Odśwież). Sytuacja ta ma zwykle miejsce w przypadku tworzenia lub modyfikowania obiektów z poziomu języka T-SQL.
Oba omówione powyżej pliki bazy danych możemy również podejrzeć bezpośrednio z poziomu systemu plików. Po przejściu do katalogów określonych podczas ustalania parametrów bazy danych w kolumnie Path, w lokalizacjach tych powinny widnieć pliki o zdefiniowanym przez nas rozmiarze i nazwie. Plik rekordów (wierszy) bazy danych oznaczony będzie rozszerzeniem MDF, zaś plik dziennika bazy danych oznaczony będzie rozszerzeniem LDF.
Każda instancja serwera bazy danych SQL Server może przechowywać więcej niż jedną bazę danych. Oczywiście to, czy wszystkie bazy danych będziemy gromadzić w jednej instancji na pojedynczym serwerze (wirtualnym lub fizycznym), czy też poszczególne bazy przydzielimy do osobnych instancji na serwerach dedykowanych lub farmie serwerów, zależeć będzie od jej konkretnego zastosowania. Tak czy inaczej, proces tworzenia nowej bazy danych w dowolnej instancji przebiegać będzie w zasadzie zawsze tak samo. Przed rozpoczęciem procesu tworzenia nowej bazy danych należy upewnić się, że jesteśmy połączeni z wybranym serwerem SQL Server, na którym baza ta ma zostać utworzona.
Należy podkreślić, że nowa baza danych użytkownika tworzona jest w oparciu o systemową bazę danych model, która niczym szablon stanowi pewien podstawowy zbiór domyślnych ustawień dla każdej nowo tworzonej bazy danych. Innymi słowy, domyślne ustawienia tworzonej bazy danych zależeć będą od tego, czy oraz w jaki sposób skonfigurowaliśmy systemową bazę model. Jeśli więc utworzymy sobie nową bazę danych z domyślnymi ustawieniami, będą one takie, jak określono je w globalnym modelu. Są to oczywiście domyślne ustawienia początkowe, które możemy dowolnie zmodyfikować w trakcie lub już po utworzeniu nowej bazy danych.
Tworzenie nowej bazy danych za pomocą poleceń języka T-SQL
Nową bazę danych możemy również utworzyć z wykorzystaniem języka T-SQL, co w przypadku bazy danych o wartościach domyślnych sprowadza się do wykonania jednej prostej komendy będącej częścią języka Data Definition Language (DDL).
Utworzenie nowej bazy danych z ustawieniami domyślnymi (wyznaczanymi przez systemową bazę model) polega na wykonaniu polecenia CREATE sparowanego ze słowem kluczowym DATABASE, które przyjmuje argument będący nazwą tworzonej bazy danych. Na przykład, aby utworzyć nową bazę danych o nazwie DrugaBaza, należy wydać następujące polecenie T-SQL:
CREATE DATABASE DrugaBaza; GO
Po wykonaniu powyższego polecenia za pomocą przycisku Execute lub wciśnięciu klawisza F5 zostanie utworzona baza danych o nazwie DrugaBaza, skonfigurowana w oparciu o bieżące ustawienia domyślne. Podobnie jak w przypadku pozostałych operacji wchodzących w zakres języka DDL może zajść konieczność odświeżenia okna Object Explorer w celu ujrzenia w nim spodziewanych wyników.
Szczegółowe informacje dotyczące tworzenia niestandardowej bazy danych z poziomu języka T-SQL - w tym pełna składnia, możliwe argumenty oraz kilka przykładów - znajdują się w oficjalnej dokumentacji technicznej systemu SQL Server.
Tworzenie bazy danych z poziomu powłoki Windows PowerShell
Nową bazę danych z domyślnymi ustawieniami możemy również utworzyć bezpośrednio za pomocą poleceń powłoki Windows PowerShell (przy założeniu, że baza o tej nazwie jeszcze nie istnieje). Aby było to możliwe, należy uruchomić okno powłoki Windows PowerShell, a następnie wydać odpowiednie polecenie rozpoznawane przez system SQL Server. W starszych wersjach systemu SQL Server proces ten polegał na uruchomieniu powłoki PowerShell z poziomu systemu Windows, co z kolei wymagało zaimportowania odpowiedniego modułu rozszerzającego możliwości tej powłoki o polecenia cmdlet dla serwera SQL Server, czego dokonywaliśmy za pomocą poniższej komendy:
Import-Module SQLPS -DisableNameChecking
Od wersji SQL Server 2014 powłokę PowerShell możemy jednak uruchomić bezpośrednio z poziomu narzędzia SQL Server Management Studio, co spowoduje automatyczne zaimportowanie powyższego modułu do bieżącej sesji Windows PowerShell. Aby tego dokonać, wystarczy kliknąć prawym przyciskiem myszy węzeł Databases (lub docelową bazę danych ulokowaną pod tym węzłem, jeśli to na niej chcemy pracować) w oknie Object Explorer, a następnie wybrać opcję Start PowerShell
Bez względu na to, jakim sposobem posłużymy się do uruchomienia powłoki PowerShell, w celu utworzenia w niej nowej bazy danych określamy najpierw docelową instancję serwera SQL Server:
$Instancja = "NazwaInstancji" $Serwer = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server -ArgumentList $Instancja
Po zachowaniu w zmiennej docelowego serwera wybieramy nazwę dla tworzonej bazy danych. Wykorzystujemy ją jako argument przy tworzeniu nowego obiektu typu Database na wskazanym serwerze, po czym na tak skonstruowanym obiekcie bazy danych wywołujemy funkcję Create:
$NazwaBazy = "NazwaBazyDanych" $Baza = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Database($Serwer, $NazwaBazy) $Baza.Create()
Utworzenie nowej bazy danych o zadanej nazwie możemy potwierdzić poprzez wylistowanie wszystkich baz danych w obrębie wskazanej instancji serwera:
$Serwer.Databaseslub
$Serwer.Databases | Select Name, Status