J'ai un travail d'agent SQL qui génère un rapport spécifique dans un fichier PDF, puis copie le PDF dans un répertoire réseau, puis supprime le fichier PDF dans le fichier répertoire source.
Les travaux SQL se composent de 2 étapes: 1. Générez le rapport 2. Copiez le rapport à l'emplacement réseau.
Pour l'étape 2, j'ai créé un fichier bat qui gère la copie et la suppression du fichier pdf.
Le fichier bat est le suivant:
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
Cependant, lorsque j'exécute mon Job, il se bloque à la deuxième étape. Le statut reste juste sur "Exécution".
Voici la ligne que j'ai indiquée dans l'étape (emplacement du fichier bat à exécuter):
cmd.exe /c "C:\Reports\rapport_uur_copy.bat"
Mes paramètres de travail sont les suivants:
Étape 1
Type: système d'exploitation (CmdExec) En cas de succès: passez à l'étape suivante
En cas d'échec: quitter l'échec de rapport de travail
Étape 2
Type: système d'exploitation (CmdExec)
En cas de succès: quittez le travail en déclarant le succès
En cas d'échec: quitter l'échec de rapport de travail
Quelques faits:
Il semble que vous devez configurer la deuxième étape de votre travail pour qu'elle s'exécute en tant que compte de domaine avec des autorisations pour écrire dans le partage \ KWS2-WEB-SERVER\Share\Reports\Uur ainsi que l'accès en lecture dans le dossier C:\Reports\Energie\Uur.
Vous devez d'abord ajouter des informations d'identification à SQL Server. Dans le dossier Security> Credentials, vous devrez cliquer avec le bouton droit de la souris et choisir New Credential ... Remplissez ces informations et cliquez sur OK.
Une fois cette opération terminée, vous devrez créer un proxy qui utilise ces informations d'identification. Dans le dossier Agent SQL Server> Proxies> Système d'exploitation (CmdExec), vous devrez cliquer avec le bouton droit et choisir Nouveau proxy ... Utilisez les informations d'identification que vous avez créées précédemment.
Vous pouvez maintenant configurer votre deuxième étape de travail pour utiliser le proxy que vous venez de créer à l'aide de la liste déroulante Exécuter en tant que: de la page de l'étape de travail.
Généralement, lorsqu'un travail comme celui-ci se bloque, c'est parce que l'exécution de la commande attend une réponse. Étant donné que toute exécution de commande exécutée à partir de SQL Server est exécutée en tant que shell et que vous ne pouvez pas voir le shell, il ne peut pas obtenir de réponse. Si j'étais vous, j'essaierais d'exécuter le fichier bat manuellement et de voir si on vous demandait une réponse. Si c'est le cas, corrigez cette partie (afin qu'elle ne demande pas de réponse) et réessayez.
Si l'exécuter vous-même ne vous aide pas, essayez de l'exécuter via xp_cmdshell et voyez si vous obtenez une sortie. Il se peut cependant qu'il se bloque.
Chaque étape que vous séparez de\CR\LF dans un script que vous avez écrit précédemment uniquement peut être exécutée dans AgentJob si vous choisissez l'une de ces deux options:
&&
entre vos commandesJ'ai eu le même problème exact. Mon travail SQL se bloquait et disait "Exécution ..." et ne se terminait jamais.
Ajoutez "--trust-model always" à votre fichier .bat.
Fondamentalement, votre fichier .bat s'exécute lorsque vous l'exécutez manuellement car vous en êtes le propriétaire. Il vous fait confiance. Lorsque vous exécutez le .bat en tant qu'utilisateur différent, la cmd affiche en fait un avertissement et vous demande si vous lui faites confiance. Votre travail est suspendu car la cmd attend votre réponse. L'ajout de "--trust-model always" sautera cette question et permettra au .bat de se terminer.
Croyez-moi. :)