Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Podstawy automatyzacji zadań SQL Server

Jest to artykuł wprowadzający na temat automatyzacji w serwerze SQL, skupiający się głównie na podstawowych pojęciach. Omówimy kilka standardowych praktyk i kilka przykładów, które pomogą początkującym rozpocząć automatyzację serwera SQL.

W tym artykule podkreślono również znaczenie automatyzacji zadań serwera SQL w celu zaoszczędzenia czasu i wysiłku wymaganego do ręcznego wykonywania tych zadań.

Dodatkowo przyjrzymy się przypadkom, w których automatyzacja zadań serwera SQL nie jest dobrym pomysłem, mimo że automatyzacja oszczędza czas i wysiłek.

Informacje o automatyzacji SQL Server

Najpierw zapoznajmy się z terminem „automatyzacja” i czym dokładnie jest automatyzacja zadań serwera SQL.

Co to jest automatyzacja?

Automatyzacja to szerokie pojęcie, które obejmuje szeroki zakres rzeczy, ale ogólnie oznacza narzędzia programistyczne i urządzenia, które umożliwiają automatyczne wykonywanie zestawu zadań przy niewielkiej lub żadnej interwencji człowieka.

Co to jest automatyzacja SQL Server?

Automatyzacja SQL Server może mieć również kilka znaczeń, ale najczęściej dotyczy automatyzacji zadań administracyjnych SQL Server w celu zaoszczędzenia czasu i wysiłku.

Administratorzy baz danych lub zespoły ds. infrastruktury odpowiedzialne za zarządzanie SQL Server i hostowanymi bazami danych często spędzają dużo czasu na wykonywaniu zadań związanych z konserwacją baz danych, które można zautomatyzować za pomocą różnych metod i zaplanować w określonych odstępach czasu.

W tym artykule koncentrujemy się głównie na automatyzacji zadań administracyjnych SQL Server.

Kiedy należy zautomatyzować zadania SQL

Automatyzacja zadania administracyjnego programu SQL Server wymaga starannego planowania przed jego wdrożeniem. Każde zadanie administracyjne SQL, takie jak tworzenie kopii zapasowych, konserwacja bazy danych lub monitorowanie bazy danych, powinno być idealnie zautomatyzowane, jeśli służy temu celowi, nie powodując żadnych innych problemów.

Kiedy nie powinieneś automatyzować zadań SQL

Pomimo tego, że automatyzacja jest bardzo przydatna w większości przypadków, nadal istnieją pewne zadania, które lepiej wykonywać ręcznie.

Na przykład, jeśli wykonanie zadania administracyjnego bazy danych zajmuje 5 minut, a zautomatyzowanie tego zadania wymaga 15 godzin pisania i testowania skryptów automatyzacji, bardziej efektywne jest wykonanie tego zadania ręcznie.bacsql

Są pewne zadania, których nie wolno automatyzować. Na przykład często częścią pracy administratora baz danych jest sprawdzanie zmian w bazie danych przed wdrożeniem jej na aktywnym serwerze. Ma to na celu zapewnienie zgodności zmian z docelową bazą danych. Automatyzacja tego zadania wiąże się z większym ryzykiem niż korzyściami, więc lepiej pozostawić to bez zmian.

Ogólnie rzecz biorąc, jeśli jakiekolwiek zadanie związane z bazą danych wymaga ręcznej interwencji (tj. musi być widziane lub zarządzane przez osobę/zespół, aby przejść do następnego kroku/etapu) zgodnie z zasadami i przepisami Twojej firmy, wówczas pełna automatyzacja tego zadania jest niewykonalne, chyba że zostanie to zatwierdzone przez najwyższe kierownictwo firmy.

Przykłady automatyzacji SQL

Przyjrzyjmy się teraz kilku przykładom automatyzacji SQL.

Scenariusz kopii zapasowej bazy danych (perspektywa DBA)

Administratorzy baz danych (DBA) zajmują się korporacyjnymi bazami danych, a ich codzienne zadania obejmują obsługę żądań związanych z bazą danych i zarządzanie serwerem bazy danych.

DBA spędza większość czasu na zarządzaniu i wdrażaniu małych zmian w bazach danych oraz dbaniu o serwer bazy danych.

DBA musi wykonywać następujące spójne zadania:

  1. Tworzenie codziennej kopii zapasowej bazy danych na koniec każdego dnia roboczego
  2. Twórz cotygodniową kopię zapasową na koniec każdego tygodnia
  3. Utwórz miesięczną kopię zapasową na koniec każdego miesiąca.

Codzienna kopia zapasowa zajmuje pół godziny i jest ostatnią rzeczą, jaką DBA robi, gdy wyjeżdża na cały dzień. Chociaż mogą wykonywać wiele zadań jednocześnie po rozpoczęciu codziennego procesu tworzenia kopii zapasowej, nadal muszą mieć oko na to, w jaki sposób upewni się, że tworzenie kopii zapasowej zostanie zakończone. Dzieje się tak, ponieważ kopia zapasowa powinna być przechowywana na dysku kopii zapasowej, gdy jest gotowa.

Nawet jeśli zignorujemy czas poświęcony na cotygodniowe i comiesięczne kopie zapasowe, czas potrzebny na wykonanie dziennej kopii zapasowej będzie się wydłużał, im częściej wykonujesz ten proces, ponieważ baza danych będzie zawierała coraz więcej danych. Nawet jeśli na początku tworzenie kopii zapasowej zajmuje pół godziny, ten czas może wzrosnąć do około jednej godziny w ciągu kilku tygodni lub miesięcy, w zależności od wzrostu ilości danych w systemie bazy danych.

Jest to niezmienne zadanie, które musi być stale powtarzane, więc administrator może się znudzić lub stracić koncentrację, popełnić błędy lub przegapić dzień lub dwa.

Jeśli administrator baz danych zautomatyzuje to zadanie SQL, zaoszczędzi to nie tylko czasu i wysiłku. Szanse na popełnienie błędu zostaną zminimalizowane.

Codzienny proces tworzenia kopii zapasowej można zaplanować tak, aby rozpoczynał się w porze nocnej, gdy interakcja z bazą danych jest niewielka. Następnego dnia administrator DBA może sprawdzić kopię zapasową i wykorzystać ostatnią godzinę dnia roboczego (która była wcześniej wykorzystywana w procesie tworzenia kopii zapasowej) do ważniejszych i pilniejszych zadań.

Scenariusz rozwoju i wdrażania bazy danych

Rozważmy bardzo powszechny przykład tworzenia i wdrażania bazy danych (celowo wykluczam testowanie, aby pozostać w zakresie tego artykułu). Deweloper bazy danych używa narzędzia do tworzenia baz danych, takiego jak SQL Server Data Tools (SSDT), do dodawania nowych tabel do bazy danych. Po wykonaniu tej czynności zapisują zmiany w projekcie bazy danych SQL. Zmiany te są następnie wysyłane do administratora baz danych lub zespołu ds. infrastruktury, który musi przejrzeć te zmiany i wdrożyć je na aktywnym serwerze.

Ważne punkty są następujące:

  1. Programiści baz danych nie powinni publikować zmian w swoich bazach danych bezpośrednio na aktywnym serwerze zgodnie ze standardowymi praktykami
  2. Administratorzy baz danych lub zespół ds. infrastruktury zarządzający aktywnym serwerem nie mogą publikować żadnych zmian w aktywnej bazie danych przed sprawdzeniem tych zmian, aby upewnić się, że nie kwestionują spójności bazy danych.

Jak możesz zrozumieć z tego, co omówiliśmy, całkowita automatyzacja zadań związanych z tworzeniem i wdrażaniem bazy danych jest niepraktyczna i stwarza wiele zagrożeń bezpieczeństwa.

Więc najlepszą decyzją byłoby zautomatyzowanie kroków, które zależą od DBA lub zespołu ds. infrastruktury.

Zadania konserwacji indeksu bazy danych

Indeksy bazy danych odgrywają istotną rolę w szybszym pobieraniu zestawu wyników (wierszy) z baz danych. Te indeksy wymagają jednak z czasem konserwacji. Konserwacja indeksu bazy danych może być wykonywana ręcznie poza godzinami szczytu lub zautomatyzowana. Może to być bardzo czasochłonne zadanie, więc lepiej zautomatyzować to zadanie, zwłaszcza gdy trzeba zarządzać tak wieloma innymi rzeczami związanymi z serwerem bazy danych.

Jednak niektórzy eksperci argumentują z tym punktem widzenia i zalecają ograniczenie konserwacji indeksu do pewnego stopnia, aby mieć oko na proces lub nawet robić to całkowicie ręcznie.

Jeśli chodzi o utrzymanie indeksu, następujące rzeczy mogą poprawić wydajność indeksu bazy danych:

  1. Odbuduj indeks
  2. Zreorganizuj indeks
  3. Indeks defragmentacji
  4. Aktualizuj statystyki

Jak zautomatyzować zadania SQL

Spójrzmy teraz na podstawowe wymagania dotyczące automatyzacji zadania SQL, a następnie na bardzo prosty przykład.

Konfiguruj przykładową bazę danych

Ten przewodnik wymaga następującej jednotabelowej przykładowej bazy danych o nazwie UniversityV6 należy skonfigurować w następujący sposób:

-- (1) Create the UniversityV6 sample database
CREATE DATABASE UniversityV6;
GO

USE UniversityV6

CREATE TABLE [dbo].[Student] (
    [StudentId] INT           IDENTITY (1, 1) NOT NULL,
    [Name]      VARCHAR (30)  NULL,
    [Course]    VARCHAR (30)  NULL,
    [Marks]     INT           NULL,
    [ExamDate]  DATETIME2 (7) NULL,
    CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED ([StudentId] ASC)
);
GO

Uruchom skrypt, aby utworzyć przykładową bazę danych:

Uruchamianie agenta serwera SQL

Automatyzacja zadania SQL zwykle zależy od agenta SQL Server, chyba że zdecydujesz się wybrać alternatywną trasę.

Pierwszą rzeczą, której potrzebujesz, jest upewnienie się, że agent SQL Server jest uruchomiony. Jeśli nie jest uruchomiony, musisz go ręcznie uruchomić i utrzymać w ruchu.

Połącz się z instancją SQL Server i poszukaj węzła SQL Server Agent w Eksploratorze obiektów. Jeśli w tym węźle wyświetlana jest czerwona ikona „stop”, oznacza to, że nie został jeszcze uruchomiony:

Kliknij prawym przyciskiem myszy Agent serwera SQL węzeł i kliknij Rozpocznij:

Następnie musisz potwierdzić, że chcesz uruchomić usługę agenta SQL Server na swoim serwerze. Kliknij Tak aby to zrobić:

Po uruchomieniu SQL Server Agent będzie miał obok niego małą zieloną ikonę. Możesz także rozwinąć węzeł teraz:

Utwórz nową pracę

Kliknij prawym przyciskiem myszy Praca folder i kliknij Nowe zadanie… :

Wpisz „Automatyczne zadanie Backup UniversityV6 ” i kliknij opcję Kroki na lewym pasku nawigacyjnym:

Dodaj nowy etap pracy

Następnie kliknij Nowy , wpisz „Backup UniversityV6” jako nazwę kroku, dodaj następujący skrypt SQL i kliknij OK :

-- Backup the UniversityV6 sample database using the date time stamp
DECLARE @BackupName VARCHAR(100)
SET @BackupName=CONCAT('C:\Backup\UniversityV6-',FORMAT(GETDATE(),'yyyy-MM-dd-hh-mm-tt'),'.bak')
BACKUP DATABASE UniversityV6 TO [email protected] WITH COMPRESSION, INIT;
GO

Kliknij OK aby zakończyć konfigurowanie pracy.

Wyświetl utworzoną pracę

Przewiń w dół do SQL Server Agent i zlokalizuj nowo utworzone zadanie:

Przetestuj zadanie (zadanie automatyczne)

Kliknij prawym przyciskiem myszy automatyczne zadanie Backup UniversityV6 i kliknij Rozpocznij pracę w kroku…:

Zadanie rozpocznie się i zakończy:

Sprawdź lokalizację kopii zapasowej

Teraz przejdź do lokalizacji, w której to automatyczne zadanie utworzyło nową kopię zapasową:

Gratulacje! Pomyślnie zautomatyzowałeś zadanie tworzenia kopii zapasowej bazy danych. Możesz teraz przechowywać go na dowolnym dysku kopii zapasowej, po prostu zmieniając nazwę litery dysku.

Pamiętaj, że zawsze powinieneś zapisywać kopię zapasową na dysku zapasowym innym niż dysk systemowy C:. Możesz zaplanować uruchamianie tego zadania w częstych odstępach czasu, klikając zadanie prawym przyciskiem myszy, klikając P właściwości , a następnie klikając Harmonogramy :

Rzeczy do zrobienia

Teraz, gdy możesz zautomatyzować podstawowe zadania tworzenia kopii zapasowych baz danych, spróbuj następujących rozwiązań, aby poprawić swoje umiejętności:

  1. Zaplanuj to zadanie, aby było uruchamiane codziennie po południu przez tydzień jako test
  2. Utwórz nową tabelę o nazwie Statystyki w przykładowej bazie danych z następującymi kolumnami:
    1. StatID (INT)
    2. Data statystyczna (DATETIME2)
    3. TotalRows (INT)

Teraz sprawdź się, tworząc automatyczne zadanie (nowe zadanie) rejestrowania liczby wierszy dla Studenta tabela wraz z datą/godziną w Statystykach stół. Staraj się często zapełniać tabelę Studentów.

Zaplanuj uruchamianie zadania co godzinę i sprawdź, czy Statystyki tabela odzwierciedla Twoje wstawienia danych, pokazując liczbę wierszy w tabeli co godzinę.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wykonać zapytanie SQL bez wyświetlania wyników

  2. jak pominąć zły wiersz w źródle pliku płaskiego ssis?

  3. Dlaczego zapytanie parametryczne generuje znacznie wolniejszy plan zapytań w porównaniu z zapytaniem niesparametryzowanym?

  4. Idź, gdy sterownik SQL Server nie może się pomyślnie połączyć, logowanie nie powiodło się

  5. Zapytanie serwera SQL, aby uzyskać listę kolumn w tabeli wraz z typami danych, ograniczeniami NOT NULL i PRIMARY KEY