Skrypt wsadowy ułatwiający utrzymanie bazy danych SQL Server
Oprócz tworzenia kopii zapasowych istnieje wiele zadań i funkcji dostępnych w SQL Server, które mogą zarówno poprawić wydajność, jak i niezawodność baz danych. Wcześniej pokazaliśmy, jak tworzyć kopie zapasowe baz danych SQL Server za pomocą prostego skryptu wiersza poleceń, więc w ten sam sposób udostępniamy skrypt, który umożliwia łatwe wykonywanie typowych zadań konserwacyjnych.
Kompaktowanie / zmniejszanie bazy danych [/ Compact]
Istnieje kilka czynników, które przyczyniają się do fizycznego miejsca na dysku używanego przez bazę danych SQL Server. Żeby wymienić tylko kilka:
- Z czasem, gdy rekordy są dodawane, usuwane i aktualizowane, SQL stale się powiększa i zmniejsza tabele, a także generuje tymczasowe struktury danych w celu wykonywania manipulacji zapytaniami. Aby dostosować się do potrzeb związanych z pamięcią dyskową, SQL Server zwiększy rozmiar bazy danych (zwykle o 10%) w razie potrzeby, aby rozmiar pliku bazy danych nie ulegał ciągłym zmianom. Chociaż jest to idealne rozwiązanie dla wydajności, może spowodować rozłączenie z wykorzystywaną przestrzenią dyskową, ponieważ jeśli na przykład dodasz bardzo dużą liczbę rekordów, co spowoduje wzrost bazy danych, a następnie usunie te rekordy, SQL Server nie będzie automatycznie odzyskiwał tego rekordu miejsca na dysku.
- Jeśli korzystasz z trybu pełnego odzyskiwania w swoich bazach danych, plik logu transakcyjnego (LDF) może być dość duży, szczególnie w bazach danych z dużą ilością aktualizacji.
Kompaktowanie (lub zmniejszanie) bazy danych spowoduje odzyskanie nieużywanej przestrzeni dyskowej. W przypadku małych baz danych (200 MB lub mniej) zwykle nie będzie to zbyt wiele, ale w przypadku dużych baz danych (1 GB lub więcej) odzyskana przestrzeń może być znacząca.
Ponowne indeksowanie bazy danych [/ Reindex]
Podobnie jak ciągłe tworzenie, edycja i usuwanie plików może prowadzić do fragmentacji dysku, wstawianie, aktualizowanie i usuwanie rekordów w bazie danych może prowadzić do fragmentacji tabeli. Praktyczne wyniki są takie same, ponieważ operacje odczytu i zapisu są obciążone wydajnością. Chociaż nie jest to idealna analogia, ponowne indeksowanie tabel w bazie danych powoduje ich defragmentację. W niektórych przypadkach może to znacznie zwiększyć szybkość pobierania danych.
Ze względu na sposób działania programu SQL Server tabele muszą zostać ponownie zindeksowane osobno. W przypadku baz danych z dużą liczbą tabel może to być ręczne, ale nasz skrypt trafia do każdej tabeli w odpowiedniej bazie danych i odbudowuje wszystkie indeksy.
Sprawdzanie integralności [/ Verify]
Aby baza danych pozostała funkcjonalna i zapewniła dokładne wyniki, istnieje wiele elementów integralności, które muszą istnieć. Na szczęście fizyczne i / lub logiczne problemy z integralnością nie są zbyt powszechne, ale dobrą praktyką jest czasami przeprowadzanie procesu weryfikacji integralności w bazach danych i przeglądanie wyników..
Kiedy proces weryfikacji przebiega przez nasz skrypt, zgłaszane są tylko błędy, więc żadna wiadomość nie jest dobrą wiadomością.
Korzystanie ze skryptu
Skrypt wsadowy SQLMaint jest zgodny z SQL 2005 i nowszym i musi być uruchamiany na komputerze, na którym jest zainstalowane narzędzie SQLCMD (zainstalowane jako część instalacji SQL Server). Zaleca się upuszczenie tego skryptu do zestawu lokalizacji w zmiennej PATH systemu Windows (tj. C: Windows), aby można było łatwo wywołać ją tak, jak każdą inną aplikację z wiersza poleceń.
Aby wyświetlić informacje pomocy, wystarczy wpisać:
SQLMaint /?
Przykłady
Aby uruchomić kompakt, a następnie sprawdź w bazie danych "MyDB" za pomocą zaufanego połączenia:
SQLMaint MyDB / Compact / Verify
Aby uruchomić reindeks, a następnie kompaktuj na "MyDB" na nazwanej instancji "Special", używając "sa" użytkownika z hasłem "123456":
SQLMaint MyDB /S:.Special / U: sa / P: 123456 / Reindex / Compact
Używanie od wewnątrz skryptu wsadowego
Podczas gdy skrypt wsadowy SQLMaint może być używany jak aplikacja z wiersza poleceń, gdy używasz go wewnątrz innego skryptu wsadowego, musi on być poprzedzony słowem kluczowym CALL.
Na przykład ten skrypt uruchamia wszystkie zadania konserwacyjne w każdej niesystemowej bazie danych na domyślnej instalacji programu SQL Server przy użyciu zaufanego uwierzytelniania:
@ECHO OFF
SETLOCAL EnableExtensions
SET DBList = "% TEMP% DBList.txt"
SqlCmd -E -h-1 -w 300-Q "SET NoCount ON; SELECT Name FROM master.dbo.sysDatabases WHERE Name Not IN ("master", "model", "msdb", "tempdb") ">% DBList%
FOR / F "usebackq tokeny = 1" %% i IN (% DBList%) DO (
CALL SQLMaint "%% i" / Compact / Reindex / Verify
ECHO +++++++++++
)
IF EXIST% DBList% DEL / F / Q% DBList%
ENDLOCAL
Pobierz skrypt SQLMaint Batch ze strony SysadminGeek.com