SQL Server agent je nástroj integrovaný do SQL Serveru, jehož hlavním účelem je automatické plánování a spouštění úloh. Prostřednictvím SQL Agenta si můžeme založit tzv. Job a v rámci Jobu naplánovat jednotlivé úlohy – třeba spuštění skriptu, SSIS package, powershellu a mnoho dalšího. SQL Server agent je ale bohužel dostupný až od edice Standard a výše. Tím pádem jej v Edici SQL Server Express nenajdeme. Existuje ale alternativa.

V minulém článku o SQL Server Command utility 1 jsem ukazoval, jak se dá přes příkazový řádek spustit SQL skript. Tuto znalost zde využijeme a v kombinaci s Windows Task schedulerem 2 si ukážeme, jak je možné definovat libovolné množství po sobě následujících SQL úloh a tyto spuštění těchto úloh si naplánovat na určitý čas.

Task scheduler jako náhrada za SQL Server agent

Jak bylo zmíněno, tak jako náhradu za SQL Agenta využijeme nástroj integrovaný v operačním systému Windows, a to Task scheduler. Je to nástroj, který umožňuje vytvořit:

  • Tasky (Úlohy) – obdoba Jobu u SQL Server Agent
  • Actions (Akce) – obdoba Stepu u SQL Server Agent
  • Triggery (Časové plány) – obdoba Scheldules u SQL Server Agent

Princip je velice jednoduchý a ukážu jej na srovnání a později pro jistotu ještě na příkladu.

Vytvoření SQL Server Agent jobu a stepů (úloh)

U SQL Server agenta vytváříme Joby a do každého jobu umístíme Stepy (úlohy) a spuštění jobu naplánujeme na určitý čas (viz. obrázky).

SQL Server Agent - Job   SQL Server Agent - Detail Jednoho Stepu (úlohy)

Jak funguje Windows task scheduler

U Tasku přes Windows task scheduler je princip podobný jak můžete vidět na obrázku níže – stojíme nad detailem 1 Tasku jménem Test.

  • Na kartě Actions vidíme jednotlivé kroky, které mají být v rámci tasku spuštěny
  • Na kartě Triggers vidíme naplánovaný čas spuštění daného Tasku

Windows scheduler - Detail Tasku  Windows task scheduler - Trigger

Příklad – Jak nahradit SQL Server Agent – Postup

Zde ukážu jeden z možných postupů, jak to udělat. Dejme tomu, že potřebujeme připravit 2 úlohy. První úloha je podobná jako ta z minulého článku o sqlcmd a dále přidáme ještě jednu úlohu – to znamená že:

  1. Založíme tabulku “Biportal_Step_1” a vložíme do ní 1 záznam “Hello World”
  2. Dále založíme tabulku “Biportal_Step_2” a vložíme do ní záznamy “Hello World 1″,”Hello World 2″,”Hello World 3″,”Hello World 4″,”Hello World 5”

Když to shrnu, tak přes task scheduler spustíme 2 skripty:

  • sqlcmd -S SQL_INSTANCE -Q “USE [Temp];CREATE TABLE Biportal_Step_1 ([ID] INT IDENTITY(1,1) PRIMARY KEY, [Text] VARCHAR(255));INSERT INTO Biportal_Step_1 ([Text]) VALUES(‘Hello world’);”
  • sqlcmd -S SQL_INSTANCE -Q “USE [Temp];CREATE TABLE Biportal_Step_1 ([ID] INT IDENTITY(1,1) PRIMARY KEY, [Text] VARCHAR(255));INSERT INTO [Temp].[dbo].[Biportal_Step_2] ([Text]) VALUES (‘Hello World 1’),(‘Hello World 2’),(‘Hello World 3’),(‘Hello World 4’),(‘Hello World 5’);”

Připravíme folder pro bat soubory

Když chceme spustit nějakou úlohu přes task scheduler, tak nejlepším postupem je vytvořit si batch soubory (dávky). Je to jednoduché:

  • Založíme si Folder – nazvěme ho třeba “SQL Automation”
  • Otevřeme Notepad a nachystáme si dávky, každý .bat soubor reprezentuje 1 úlohu. V našem případě si tedy připravíme 2 soubory

Příprava batch souborů

Vytvoříme bat soubory a nahrajeme do folderu

Do každého ze souborů vložíme naše skripty v následujícím formátu (ukázka Step 1 – Create table Biporta_Step_1.bat):

Ukázka batch souboru

Vysvětlení batch souboru: Nejprve spustíme příkazový řádek (první start:), poté náš první skript (druhý start) a nakonec relaci ukončíme. Klikneme next

Vytvoříme task v task scheduleru

Poté co máme připraveny oba soubory, tak otevřeme Task scheduler a klikneme na “Create basic task” a náš nový task nazveme “Biportal_SQL_Automation”

Create Task

Nastavíme task scheduler trigger a čas spuštění

O krok dále nastavujeme Trigger – tzn. frekvenci, s jakou chceme aby se task spouštěl. V našem případě máme jednorázový SQL úkol, kteoru budeme pouštět pouze jednou, ale většinou budete potřebovat pouštět úlohy opakovaně – např 1x denně. Zvolíme tedy Daily a klikneme next

Task scheduler - Daily Trigger

V dalším okně nastavujeme čas spuštění Tasku a klikneme next

Daily Trigger - nastavení času spuštění

Nastavení akce – start a program

V dalším okně nastavujeme akci, kterou má Task scheduler vykonat, v našem případě budeme chtít spustit program. Volíme tedy Start program a klikneme next.

Windows task scheduler- Action

Nastavíme cestu na batch soubor

V posledním kroku nastavujeme cestu na náš batch soubor (viz 1), který má být spuštěn a klikneme next.

Start program

Okno akcí – task se podařilo založit

Zobrazí se nám souhrnné okno a po jeho potvrzení máme vytvořen task. Zatím má task ale pouze 1 akci (step). Musíme ještě nastavit náš druhý step. proto poklikáme na náš task a otevřeme jej, Přejdeme na kartu “Actions”, klikneme na “New”, nastavíme cestu na druhy batch soubor a potvrdíme. Nyní bychom měli mít nastaven task, který obsahuje 2 akce. Tyto akce se pouští ve vámi zvolený čas (nastaveno v kroku 5).

Windows schedule Actions

Otestování tasku

Tak si zkusíme task pustit a uvidíme co se stane. Klikneme pravým tlačítkem na task a dáme “Run”. Zkontrolujeme jestli je vše v pořádku – vypadá to ok a my umíme nahradit SQL Agenta 😉

Výsledek příkladu windows task scheduler

5/5 - (5 votes)

Použité zdroje
  1. Microsoft, sqlcmd utility [on-line]. [cit. 2018-06-28]. Dostupné z WWW: https://learn.microsoft.com/en-us/sql/tools/sqlcmd-utility?view=sql-server-ver16 
  2. Microsoft, Windows Task Scheduler [on-line]. [cit. 2018-06-28]. Dostupné z WWW: https://learn.microsoft.com/en-us/windows/win32/taskschd/task-scheduler-start-page 

Ing. Jan Zedníček - Data Engineer & Controlling

Jmenuji se Honza Zedníček a působím jako freelancer. Pracoval jsem dříve také jako BI developer, finanční controller a analytik. Vše pro společnosti z oblasti IT, bankovnictví, consultingu a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a občas neúspěšně odpálím pár balónků v golfu 🏌️

Již cca 10 let zapisuji na tento web různé návody určené zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

🔥 Přihlašte se do naší Excel facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »

2 comments on “SQL Server Agent pro SQL Express + návod

  1. Dobrý den pane Zedníčku,

    děkuji za článek o Agentovi. Prosím mohl byste popsat jak nejlépe vyřešit následující situaci.

    Je potřeba spustit bat soubor, spouští selecty v ERP. Do ERP ale nemá přístup účet/user SQL Server Agent Service Account, který spoušít ten SQL job. Když jsem googlil, tak se musí nastavit credentials (identita) user, který má přístup do daného ERP. Setkal jste se s tím? Případně mohl byste prosím poradit jak to řešit?

Leave a Reply

Your email address will not be published. Required fields are marked *