Główna » jak » Skrypt wsadowy ułatwiający utrzymanie bazy danych SQL Server

    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