Zaawansowane systemy baz danych Wykonali: Krzysztof Fitał Michał Sobol O czym będziemy dziś mówili Tworzenie bazy dany Typy danych Zarządzanie bazą Generowanie skyptów Tworzenie bazy Aby utworzyć bazę danych w SQL Serverze można skorzystać z: Database Creation Wizard, SQL Server Enterprise Managera, wyrażenia CREATE DATABASE. Database Creation Wizard Uruchom SQL Server Enterprise Managera - wybierz z menu Start opcję Programy, następnie Microsoft SQL Server 2000 i Enterprise Manager. Połącz się z kopią SQL Servera. Kliknij na Tools a następnie na Wizards Database Creation Wizard W otwartym oknie rozwijamy Database, następnie wybieramy Create Database Wizard Database Creation Wizard Na 2 ekranie możemy wpisać: -Nazwę bazy dancyh -Nazwę pliku bazy danych -Nazwę pliku dziennika Database Creation Wizard Na 3 ekranie podajemy początkowe rozmiary plików tworzonej bazy danych Database Creation Wizard Na 4 ekranie definiujemy wartość przyrostu pliku bazdy danych oraz możemy zdefinować maksymalny rozmiar pliku. Database Creation Wizard Na 5 ekranie podajemy początkowy rozmiar pliku dziennika (logfile) Database Creation Wizard Na 6 ekranie definiujemy wartość przyrostu pliku dziennika bazdy danych oraz możemy zdefinować maksymalny rozmiar tego pliku. Database Creation Wizard Na ostatnim ekranie widzimy wszystkie informacje o nowo tworzonej bazie danych także pozostaje nam kliknięcie na zakończ. Powinnien wyskoczyć komunikat, że baza została pomyślnie stworzona. SQL Server Enterprise Managera Uruchom SQL Server Enterprise Managera — wybierz z menu Start opcję Programy, następnie Microsoft SQL Server 2000 i Enterprise Manager. Połącz się z kopią SQL Servera. Rozwiń folder Databases, jak pokazano na rysunku SQL Server Enterprise Managera Kliknij prawym klawiszem ikonę folderu Databases lub pustą przestrzeń w prawym panelu, następnie wybierz New Database z menu kontekstowego. Pojawi się okno dialogowe Database Properites z aktywną zakładką General. Wpisz nazwę bazy danych. Następnie możesz przejść do zakładki Data Files, aby zobaczyć nowy plik bazy danych o rozmiarze wstępnie ustawionym na 1 MB w domyślnym folderze ...\Data. SQL Server Enterprise Managera Jeśli chcesz zmienić właściwości plików bazy danych, kliknij odpowiednie pole i wprowadź modyfikacje (w przykładzie pozostawiono wartości domyślne). Możesz dodać kolejne pliki bazy przejdź do wolnego pola w kolumnie File Name i ustaw właściwości dodatkowego pliku. Kliknij zakładkę Transaction Log. Warto zauważyć, że domyślną nazwą dziennika jest NazwaBazy_Log, a jego rozmiar to 1 MB. SQL Server Enterprise Managera Po kliknięciu na OK., okno powinno wyglądać podobnie, jak pokazane na rysunku. Jeżeli stworzone przez Ciebie bazy nie są widoczne, kliknij prawym przyciskiem myszy folder Databases i wybierz z menu, które się pojawi, pozycję Refresh. Wyrażenia CREATE DATABASE Składnia polecenia CREATE DATABASE wygląda następująco: CREATE DATABASE nazwa bazydanych [ON { [PRIMARY] (NAME = nazwa logiczna, FILENAME = ‘nazwa fizyczna‘ [,SIZE = rozmiar] [,MAXSIZE = max rozmiar [UNLIMITED] [,FILEGROWTH =wart. przyrostu ] ) } [....n] ] [LOG ON {(NAME = nazwa logiczna, FILENAME = nazwa fizyczna‘ [,SIZE = rozmiar] [,MAXSIZE = max rozmiar [UNLIMITED] [,FILEGROWTH =wart. przyrostu ] ) } [....n] ] [,COLLATE strona kodowa] [FOR LOAD | FOR ATTACH] Wyrażenia CREATE DATABASE Wyrażenia CREATE DATABASE nazwa bazydanych - odnosi się do bazy danych jako całości. ON PRIMARY - określa, do których grup plików przynależy baza danych. Domyślną grupą plików jest Primary. NAME - określa nazwę logiczną, która będzie używana w SQL Serverze do odnoszenia się do fizycznego pliku bazy danych na dysku. FILENAME - jest to ścieżka i nazwa pliku, określająca lokalizację danych na dysku twardym. Wymagany jest lokalny dysk twardy. SIZE - określa, jak duży powinien być plik bazy danych. Wartość ta może być wyrażona w megabajtach lub kilobajtach. Domyślnym rozmiarem jest wielkość pliku Model. Aby określić jednostkę (megabajt lub kilobajt), należy dołączyć sufiks MB lub KB do parametru rozmiaru. Przykładowo, 10 MB utworzy plik o wielkości 10 megabajtów. Megabajty mogą być używane tylko do określenia pełnych liczb. Aby utworzyć 2,5 megabajtową bazę danych, należy użyć kilobajtów, czyli 2 560 KB. Wyrażenia CREATE DATABASE MAXSIZE - określa maksymalny rozmiar, do którego baza danych może się rozrastać. Jeżeli nie zostanie on określony, włączony jest automatyczny wzrost. Baza danych może rozrastać się, aż zajmie cały dysk twardy. Parametr ten jest również wyrażony w megabajtach lub kilobajtach. FILEGROWTH - określa wartość przyrostu, używanego do automatycznego powiększania pliku bazy danych. Parametr ten może być wyrażony w megabajtach, kilobajtach lub jako procent rozmiaru pliku w czasie powiększania go. Jeśli nie jest on określony, domyślnie przyjmuje się 1 MB. Parametr FILEGROWTH nie może przekroczyć wartości parametru MAXSIZE. LOG ON - opisuje, gdzie położone są pliki dziennika transakcji i jaki jest ich rozmiar. Wyrażenia CREATE DATABASE COLLATE - nowa opcja w SQL Serverze 2000, określa językową stronę kodową w pojedynczej bazie danych. Może to być strona kodowa dostępna w SQL Serverze lub w systemie Windows. Jeżeli ten parametr nie zostanie określony, domyślnie przyjmowana jest wartość z kopii SQL Servera 2000. Strona kodowa może być również określona na poziomie tabeli i pojedynczej kolumny. FOR LOAD - ustawia dla bazy danych własność DBO Use Only. Opcja ta jest wprowadzona jedynie dla zachowania zgodności wstecz z SQL Serverem 6.5 i nie powinna być używana w SQL Serverze 2000. FOR ATTACH - dołącza ponownie zbiór plików, które tworzą bazę danych. Pliki bazy danych muszą być wcześniej utworzone i oddzielone od SQL Servera 2000. Typy danych Kategoria Typ danych Tekstowy char(n), varchar(n) Przechowuje łańcuchy znaków Binarny binary(n), varbinary(n) Całkowity Komentarz Przechowuje informacje binarne w parach po 2 bajty int, smallint, bigint, Przechowuje tinyint wartości całkowite Typy danych Kategoria Typ danych Komentarz Przybliżony numeryczny float, real Przechowuje przybliżone wartości liczbowe Dokładny numeryczny decimal, numeric Przechowuje dokładne informacje liczbowe Specjalny bit, text, image, sql_variant, table znakowe większe niż 8 000 bajtów lub dane obrazu. sql__variant Typy danych Kategoria Typ danych Komentarz Data i czas datetime, smaildatetime Przechowuje wartości daty i czasu Waluta money, smallmoney Przechowuje wartości walutowe Automatycznie zwiększany rowversion (formalnie timestamp) Przechowuje wartości typów danych zwiększanych automatycznie lub ustawionych przez SQL Server Typy danych Kategoria Typ Danych Mapuje typ danych ANS do typów danych SQL Servera Synonimy Dane Unicode Komentarz nchar, ntest, nvarchar Przechowuje dane w formacie Unicode (podwójny bajt na znak) Zdefiniowany przez użytkownika Można tworzyć własne typy danych do przechowywania informacji Wyliczeniowy Przechowuje wyrażenia, służące do wyliczenia wartości kolumny. Nie przechowuje danych, jedynie wyliczenia, które służą do utworzenia tych danych. Typy danych - NULL Nullability (dopuszczanie w kolumnie wartości NULL) odnosi się do tego, czy wpis w danej kolumnie jest wymagany. Jeżeli kolumna ma zgłaszać, że wpisana wartość jest nieznana, należy ustawić wartość NULL. Jeżeli założeniem jest, że każdy wiersz musi mieć wpis w tej kolumnie, należy określić kolumnę jako NOT NULL. Typy danych - tekstowe Łańcuchy zawierają dane znakowe, utworzone z liter, liczb i symboli. Można przechowywać dane znakowe w formacie o ustalonej lub zmiennej długości pola za pomocą słów kluczowych char(n) lub varchar(n). Można przechowywać maksymalnie 8 000 znaków w tych typach danych. Typy danych - binarne Typ binarny przechowuje dane binarne. Są one przechowywane jako seria zer i jedynek, reprezentowanych na wejściu i wyjściu jako pary heksadecymalne. Te heksadecymalne pary są tworzone ze znaków od 0 do 9 i od A do F. Jak w przypadku danych typu łańcuchowego, tu też można określić maksymalnie 8 000 bajtów dla danych typu binary(n) i varbinary(n). Typy danych – liczby całkowite Istnieją cztery rodzaje danych typu całkowitego (integer), które mogą przechowywać dokładne, skalarne wartości: bigint, int, smallint i tinyint. Różnica pomiędzy typami danych całkowitych występuje w ilości przestrzeni pamięci, której wymagają, oraz w zakresie wartości, jakie mogą przechowywać. Typ Długość Zakres tinyint 1 0-255 smallint 2 ± 32 767 int 4 ±2 147 483 657 bigint 8 ± 2^63 Typy danych liczbowych przybliżonych Przybliżonymi typami danych liczbowych są float i real. Liczby, które są przechowywane za pomocą tych typów danych, składają się z dwóch części: mantysy i wykładnika. Algorytm, używany do określenia takiej pary, nie jest szczególnie precyzyjny. Inaczej mówiąc, można nie otrzymać z powrotem tego, co zostało wprowadzone. Dokładne typy danych liczbowych Dokładne typy danych liczbowych to decimal i numeric. Dokładność jest utrzymywana do najmniej znaczącej cyfry. Jeżeli zostaje zadeklarowany dokładny typ danych numerycznych, należy określić dwa składniki: precyzję i skalę. Jeżeli nie zostaną one określone, SQL Server używa domyślnych wartości 18 i 0. Typy danych - specjalne Specjalne typy danych: Bit Text Image RowGUID Sql_variant Typy danych - bit Typ danych bit jest logicznym typem danych, używanym do przechowywania informacji Boolean. Jest on używany jako flaga, aby oznaczyć zdarzenia typu włączone/wyłączone, prawda/fałsz lub tak/nie. Wartości przechowywane przez ten typ to 0 lub 1 Kolumny typu bit mogą mieć wartość NULL (nieznaną), ale nie mogą być indeksowane. Typy danych bit wymagają pojedynczego bajta pamięci na przechowywanie. Typy danych – text i image Można użyć typów danych text i image, jeżeli wymagania przechowywania przekroczą 8 000 znaków co jest limitem kolumny. Często występują odwołania do nich jako do danych typu BLOB. Typy danych text i image mogą przechowywać na deklarację do 2 GB danych binarnych lub tekstowych. Jeżeli zostają zadeklarowane dane typu text lub image, do wiersza dodawany jest 16-bajtowy wskaźnik. Wskazuje on na osobne 8 kB strony danych - tu są przechowywane dodatkowe informacje na temat danych. Jeżeli przekroczą one 8 kB na stronę danych, tworzone są wskaźniki do dodatkowych stron danych BLOB. Typy danych – sql-variant Typ danych sql_variant jest podobny do typu danych Visual Basica variant. Typ sql_variant pozwala na przechowywanie w nim prawie każdego innego podstawowego typu danych SQL Servera. Wyjątki stanowią: ntext, timestamp i sql_variant. Typy danych – data i czas Dane daty i czasu mogą być przechowywane w typach datetime i smalldatetime. Warto zauważyć, że data i czas są zawsze przechowywane razem, w pojedynczej wartości. Dane daty i czasu mogą występować w kilku różnych formatach. Typy danych – data i czas Daty w typie datetime są przechowywane z dokładnością do milisekund. W tym przypadku używane jest 8 bajtów — 4 dla liczby dni od 1 stycznia 1900 oraz 4 liczby sekund po północy (daty wcześniejsze niż ten przedział są przechowywane jako liczby ujemne, tworząc zakres dat od 1/1/1753 do 12/31/9999). Dokładność dat jest w zakresie 3,33 milisekund. Typ danych smalldatetime używa 4 bajtów. Daty przechowywane tym sposobem są dokładne co do minuty. Jedna wartość smallint (2 bajty) wewnętrznie jest używana do określenia liczby dni po 1 stycznia 1900; druga wartość smallint jest używana do określenia liczby sekund po północy. Typy danych - waluta Dwoma typami danych waluty są money i smallmoney. Obydwa mają skalę równą cztery, co oznacza, że mogą przechowywać cztery cyfry po przecinku dziesiętnym. Te typy danych mogą przechowywać informacje inne niż wartości dolarowe, dla użytku międzynarodowego. Nie są dostępne żadne funkcje konwersji walutowej w serwerze SQL. Kiedy zostaną wprowadzone dane walutowe, należy poprzedzić je znakiem dolara. Typy danych - użytkownika Można tworzyć typy danych, zdefiniowane przez użytkownika dla specyficznej bazy danych lub można umieszczać je w bazie danych model. Należy pamiętać, że ta baza danych jest szablonem do tworzenia nowych baz. Utworzone przez użytkownika typy danych będą dostępne we wszystkich kolejnych bazach danych. Aby utworzyć typ danych, zdefiniowany przez użytkownika, należy skorzystać z typu danych, który został dostarczony przez system. Przykładowo, jeśli tworzy się typ danych zwany EmployeelD i definiuje się go, należy określić, czy jest to typ znakowy, czy całkowity. Typy danych - użytkownika Należy najpierw utworzyć własny typ danych, a dopiero po tym dodać go do tabeli. Aby utworzyć własny typ danych, należy skorzystać z SQL Server Enterprise Managera lub z systemowej procedury składowej sp_addtype. Typy danych - użytkownika Tworzenie za pomocą sp_addtype EXEC sp_addtype NAZWA ‘typ’, ‘czy null’ np: EXEC sp_addtype PracID ‘char(5)’, ‘NULL’ Po zadeklarowaniu typów, zdefiniowanych przez użytkownika, można ich używać w bazie danych tak często, jak tylko zachodzi taka potrzeba. Zarządzanie bazą Będziemy tutaj mówić o następująych zagdanieniach: Rozbudowywanie bazy danych Wykonywanie backup’ów Plik dziennika Zarządzanie bazą Tworzenie tabeli Zarządzanie bazą Gdy już utworzymy nową tabele, możemy dodawać kolejne wiersze do niej Zarządzanie bazą Polecenia operujące na danych w tabeli: INSERT UPDATE DELETE DELETE FROM Table WHERE CategoryName LIKE ‘ever%’ DROP DROP TABLE Table Zarządzanie bazą Buckup Bazy Wybieramy baze którą chcemy buckup’ować. Klikamy prawym przyciekiem myszy, wybieramy z menu All Tasks a następnie Backup Database Zarządzanie bazą Zarządzanie bazą Zarządzanie bazą Można również zmniejszyć rozmiar całej bazy danych poleceniem DBCC SHRINKDATABASE' Jego składnia jest następująca: DBCC SHRINKDATABASE { (database_name [. target_percent] [.{NOTRUNCATE | TRUNCATEONLY}]) } Zarządzanie bazą Znaczenie składni: Database_name - jest nazwą bazy danych, która będzie zmniejszana. Target_percent - jest procentowym określeniem wolnej przestrzeni w bazie danych po zmniejszeniu. NOTRUNCATE - wymusza pozostawienie wolnej przestrzeni w plikach bazy danych. Parametr target_percent jest ignorowany. Domyślnie zwolniona przestrzeń jest z powrotem dostępna dla systemu operacyjnego. TRUNKCATEONLY - wymusza, aby nieużywana przestrzeń w plikach danych była oddawana do systemu operacyjnego. Po wybraniu TRUNCATEONLY parametr target_percent jest ignorowany i cała wolna przestrzeń jest zwracana do systemu. Zarządzanie bazą Polecenie SHRINKDATABASE zmniejsza wszystkie pliki danych w bazie, pozostawiając wyznaczony procent wolnej przestrzeni. Używane na końcu strony plików danych są przesuwane poniżej ustalonego procentowego progu. Na przykład w bazie danych o wielkości 10 MB, przechowującej jedynie 5 MB danych, można ustawić parametr target_percent na 20. Oznacza to, że 20% bazy danych ma być pozostawione jako wolna przestrzeń. Wszystkie wiersze utworzone w bazie danych są przemieszczane, tym samym wszelkie wolne miejsce na początku bazy danych jest usuwane. Proces ten jest podobny do defragmentacji dysków. Jest tylko 5 MB danych i ma pozostać 20% wolnej przestrzeni; 20% z 5 MB to 1 MB, czyli rozmiar bazy danych zostanie zmieniony na 6 MB, a pozostałe 4 MB zostają oddane z powrotem do systemu operacyjnego. Zarządzanie bazą Nie można zmniejszyć bazy danych bardziej niż do obszaru, który jest potrzebny do przechowywania danych, nie można także jej zminimalizować do rozmiaru mniejszego niż baza model. Nie można również zmniejszyć bazy danych do rozmiarów mniejszych niż pierwotne, które były określone przy jej tworzeniu (za pomocą polecenia CREATE DATABASE). Zarządzanie bazą Usuwanie bazy danych Czasem konieczne staje się usunięcie bazy danych z systemu. Może ona na przykład nie być już dłużej potrzebna. W każdym przypadku usuwanie bazy danych z SQL Serwera jest względnie proste. Można ją usunąć zarówno za pomocą SQL Server Enterprise Managera, jak też języka Transact-SQL. Zarządzanie bazą Zanim usunie się bazę danych, należy uświadomić sobie kilka istotnych zależności: Usunięcie bazy danych powoduje wyeliminowanie informacji na temat tabel systemowych oraz usunięcie z systemu plików danych i dziennika. Usunięta baza danych może być przywrócona jedynie za pomocą odtwarzania z kopii bezpieczeństwa. Podczas usuwania z bazy nie może korzystać żaden użytkownik. Aby usunąć bazę danych, należy mieć uprawnienia roli db_owner (lub serwer_sysadmin). Polecenie DROP DATABASE należy wydawać po zalogowaniu do bazy master. Zarządzanie bazą Składnia polecenia DROP DATABASE wygląda następująco: DROP DATABASE database_nam, database_nam2 Polecenie DROP DATABASE umożliwia usunięcie jednorazowo wielu baz danych. Generowanie skryptów Po co są skrypty Dzięki skryptom możemy w łatwy sposób utworzyć obiekty bazy danych i zabezpieczenia. SQL Server może również odtworzyć strukturę obiektów bazy danych i zabezpieczeń, przy pomocy wcześniej wygenerowanego skryptu, który może być później uruchamiany Generowanie skryptów W celu uzyskania dostępu do funkcji, tworzących skrypty z SQL Server Enterprise Managera, należy kliknąć prawym klawiszem bazę danych, następnie Wszystkie zadania, Generale SQL Scripts, aby otworzyć okno dialogowe Generowanie skryptów Z okna Generate SQL Scripts można wybrać, jaki rodzaj skryptu ma być generowany. Zakładka General zawiera obiekty, które mają zostać wykorzystane przy tworzeniu skryptu. Jednym z rodzajów skryptów są skrypty bezpieczeństwa. Aby je wygenerować należy zaznaczyć wszystkie obiekty Generowanie skryptów Po kliknięciu zakładki Formatting warto zauważyć, że domyślną opcją jest generowanie skryptu, który usuwa obiekty i je tworzy. Należy usunąć obydwie z tych możliwości oraz wszelkie inne opcje, ustawione z zakładki Formatting, Generowanie skryptów Następnie trzeba kliknąć zakładkę Options, aby wybrać odpowiednie opcje wykonywania skryptów bezpieczeństwa . Aby w danym momencie wykonać skrypt, należy wcisnąć przycisk OK. Następnie system zapyta o nazwę pliku skryptu i jego położenie. Generowanie skryptów Można również wcisnąć przycisk Preview na zakładce General, który powoduje, że skrypty są generowane w oknie podglądu. Jeżeli został wybrany przycisk Preview, można kopiować cały skrypt do Schowka Windows poprzez wciśnięcie przycisku Copy Generowanie skryptów Skrypty replikacji Kolejny przykładem skryptów są skrypty replikacji zawierające polecenia TransactSQL, niezbędne do tworzenia i konfiguracji danego scenariusza replikacji Generowanie skryptów Skrypty takie mają następujące zalety: Można używać skryptu do identycznej konfiguracji wielu serwerów. Takie działanie oszczędzi kłopotów z ciągłym używaniem kreatorów. Można używać skryptów do śledzenia różnych wersji środowiska replikacyjnego. Jeżeli w środowisku są wykonywane zmiany, można tworzyć dodatkowe skrypty. Można łatwo i szybko dostosować środowisko replikacyjne do swoich potrzeb. Można używać skryptów jako część procesu odzyskiwania oraz do reinstalowania dowolnych aspektów środowiska replikacji. Generowanie skryptów Należy pamiętać że gdy został utworzony skrypt dla wielu serwerów, należy dokonać kilku niewielkich modyfikacji. Głównie należy zmienić nazwę komputera, do którego odwołuje się skrypt. Pomimo że wprowadzanie zmian może być czasochłonne, jest na pewno szybsze niż kilkakrotne przechodzenie przez proces kreatora.