If-Koubou

Skrypt wsadowy ułatwiający utrzymanie bazy danych SQL Server

Skrypt wsadowy ułatwiający utrzymanie bazy danych SQL Server (Jak)

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 biegiem czasu, gdy rekordy są dodawane, usuwane i aktualizowane, SQL stale rośnie i zmniejsza tabele, a także generuje tymczasowe struktury danych do 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 zmieniał się stale. Chociaż jest to idealne rozwiązanie dla wydajności, może powodować 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 duże, ale w przypadku dużych baz danych (1 GB lub więcej) powierzchnia odzyskana może być znaczna.

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 była zarówno funkcjonalna, jak i zapewniał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 (to znaczy C: Windows), aby można było łatwo wywołać ją jak każdą inną aplikację z wiersza poleceń.

Aby wyświetlić informacje pomocy, po prostu wpisz:

SQLMaint /?

Przykłady

Aby uruchomić kompakt, a następnie sprawdź w bazie danych "MyDB" przy użyciu zaufanego połączenia:

SQLMaint MyDB / Compact / Verify

Aby uruchomić reindeks, a następnie kompakt na "MyDB" na nazwanej instancji "Special", używając użytkownika "sa" z hasłem "123456":

SQLMaint MyDB /S:.Special / U: sa / P: 123456 / Reindex / Compact

Korzystanie z wewnątrz skryptu wsadowego

Podczas gdy skrypt wsadowy SQLMaint może być używany jak aplikacja z wiersza poleceń, gdy używasz go w innym skrypcie wsadowym, 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