it-swarm-eu.dev

Jak úspěšně spustit dávkový soubor v úloze agenta SQL?

Mám úlohu SQL Agent Job, která generuje konkrétní sestavu v souboru PDF a poté zkopíruje PDF do síťového adresáře) a poté odstraní soubor PDF v souboru zdrojový adresář.

Úlohy SQL se skládají ze dvou kroků: 1. Generování sestavy 2. Zkopírování sestavy do síťového umístění.

Pro krok 2 jsem vytvořil bat-soubor, který se zabývá kopírováním a odstraněním pdf souboru.

Soubor bat je následující:

set source_dir=C:\Reports\Energie\Uur
set dest_dir=\\KWS2-WEB-SERVER\Share\Reports\Uur

C:\Windows\System32\Robocopy.exe %source_dir% %dest_dir% /MOV /Z

Když ale spustím svou úlohu, přestane reagovat na druhý krok. Stav zůstane pouze na „Provádění“.

Toto je řádek, který jsem uvedl v kroku (umístění souboru bat k provedení):

cmd.exe /c "C:\Reports\rapport_uur_copy.bat"

Moje nastavení úlohy jsou následující:

Krok 1

Typ: Operační systém (CmdExec) On Success: Přejděte na další krok

On Failure: Ukončení selhání hlášení úlohy

Krok 2

Typ: Operační systém (CmdExec)

On Success: Ukončete úspěch hlášení úloh

On Failure: Ukončení selhání hlášení úlohy

Některá fakta:

  • Mám oprávnění ke čtení/zápisu v síťovém adresáři
  • Kroky spouštím jako účet správce (přihlášený uživatel, výchozí)
  • Krok 1 uspěl
  • Používám Windows Server 2008 R2 Standard
  • Mám SQL Server 2008 R2
  • Když spustím skript z cmd ručně, funguje to (pod účtem administrátora).
5
Nazeem

Vypadá to, že je třeba nakonfigurovat druhý krok vaší úlohy tak, aby fungoval jako účet domény, s oprávněními k zápisu do sdílené složky \ KWS2-WEB-SERVER\Share\Reports\Uur a také ke čtení do složky C:\Reports\Energie\Uur.

Nejprve budete muset přidat pověření k serveru SQL. Ve složce Security> Credentials budete muset kliknout pravým tlačítkem a zvolit New Credential ... Vyplňte tyto informace a klikněte na OK.

Po dokončení budete muset vytvořit server proxy, který bude používat toto pověření. Ve složce SQL Server Agent> Proxies> Operating System (CmdExec) budete muset kliknout pravým tlačítkem a zvolit New Proxy ... Použít pověření, které jste vytvořili dříve.

Nyní můžete nakonfigurovat svůj druhý krok úlohy tak, aby používal proxy, který jste právě vytvořili, pomocí Spustit jako: rozevírací stránku stránky kroku úlohy.

2
Brian Bentley

Obvykle, když se takováto úloha zablokuje, je to proto, že provedení příkazu čeká na odpověď. Protože jakékoli spuštění příkazu spuštěné ze serveru SQL je spuštěno jako prostředí a nemůžete vidět prostředí, nemůže získat odpověď. Kdybych byl tebou, zkusil bych spustit netopýr ručně a uvidíme, jestli budeš požádán o odpověď. Pokud ano, tuto část (aby nevyžadovala odpověď) a zkuste to znovu.

Pokud to sami nepomůžete, zkuste to spustit pomocí xp_cmdshell a zjistěte, zda se vám nějaký výstup nevrací. To může stále viset i když.

2
Kenneth Fisher

Každý krok, který oddělíte s\CR\LF ve skriptu, který jste předtím napsali, lze v agentu AgentJob provést pouze v případě, že vyberete jednu z těchto dvou možností:

  • Samostatná linka Everey ve vašem netopýru skriptu musí být samostatným krokem v agentu
  • smažte všechny\CR\LF a ve svém kroku AgentJob a vložte && mezi vašimi příkazy
1
Clevemayer

Měl jsem stejný přesný problém. Moje úloha SQL by pověsila a řekla „Provedení ...“ a nikdy nedokončena.

Přidejte do svého .bat souboru „- trust-model always“.

V podstatě se váš soubor .bat spustí, když jej spouštíte ručně, protože jste vlastníkem. To vám věří. Když spustíte .bat jako jiný uživatel, cmd skutečně zobrazí varování a zeptá se vás, zda mu důvěřujete. Vaše práce visí, protože cmd čeká na vaši odpověď. Přidáním slova „- trust-model always“ tuto otázku přeskočíte a umožníte dokončení operace .bat.

Věř mi. :)

1
snarkmark