Quel est le meilleur moyen d’exécuter un package DTS MS SQL Server 2000 à partir d’un déclencheur?

StackOverflow https://stackoverflow.com/questions/252069

  •  05-07-2019
  •  | 
  •  

Question

J'ai regardé autour de moi et trouvé des idées sur la façon de procéder, mais pas de meilleure façon définitive. Une des idées était d'utiliser sp_start_job pour lancer un travail SQL Server Agent exécutant le package DTS. Si c’est le meilleur moyen de le faire, la question suivante sera alors: "Comment planifier un package DTS à partir d’un travail et le rendre non récurrent?"

Merci, Tim

Était-ce utile?

La solution

xp_cmdshell vous permettrait d'exécuter dtsrun.

Autres conseils

Je ne conseillerais pas de lier ce type de fonctionnalité à un déclencheur. Les déclencheurs sont supposés être rapides. Je ne pense pas qu'il soit possible de lancer un package DTS aussi rapide que je voudrais un déclencheur. Si cela vous interpelle, je suggérerais alors que votre déclencheur insère simplement une ligne dans une table spéciale, puis crée un travail qui s'exécute aussi souvent que vous le souhaitez, à chaque minute (toutes les minutes? Toutes les 10 secondes?) Qui surveille cette table. et lance le package DTS approprié selon les besoins.

Au lieu d'utiliser xp_cmdshell, j'ai fait ceci:

Lorsqu'une certaine valeur d'une table est modifiée, le déclencheur utilise msdb.sp_start_job pour démarrer un travail. Ce travail ne doit pas être exécuté selon un planning, uniquement lorsqu'il est lancé par un utilisateur. J'ai configuré la planification du travail pour qu'elle s'exécute une fois, ce qui est maintenant dans le passé, et j'ai décoché la case activée.

Ce travail comporte une étape, DTSRun / ~ Z0xHEXENCRYPTEDVALUE. Le package DTS copie certaines lignes de ce serveur vers un autre serveur sur une plate-forme différente et, en cas de succès, réinitialise les valeurs de la table avec le déclencheur pour la prochaine fois. Le déclencheur vérifie une valeur de table avant d'appeler sp_start_job, afin que le travail ne démarre que sous certaines conditions, et non à chaque fois.

Etant donné que sp_start_job s'exécute de manière asynchrone, le déclencheur se termine rapidement. Le seul inconvénient, c’est que j’ai besoin d’interroger la valeur qui a été réinitialisée en cas de succès et d’informer l’utilisateur que cela a fonctionné, ou après un certain délai, cela n’a pas fonctionné.

L’alternative serait d’utiliser xp_cmdshell si j’avais besoin d’un fonctionnement synchrone, ce qui pourrait ne pas être une bonne idée depuis l’intérieur d’un déclencheur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top