Si je veux effectuer certaines opérations de database sur une base régulière, je pourrais:
Utilisez SQL Server Agent (si SQL Server) pour appeler périodiquement la procédure stockée et / ou exécuter le T-SQL
Exécuter un process externe (planifié par le planificateur de tâches du operating system par exemple) qui exécute l'opération de database
etc.
Deux questions:
Je vous remercie.
Je pense que la meilleure approche pour les critères de décision est ce qu'est le travail. Si c'est une tâche SQL Server complètement interne ou un set de tâches qui ne se rapportent pas au monde extérieur, je dirais qu'un travail SQL est le meilleur pari. Si d'un autre côté, vous récupérez des données et que vous faites quelque chose avec SQL Server, ce qui est très difficile en T-SQL ou prend du time, le service externe est peut-être le meilleur choix.
Une autre possibilité est d'avoir une queue de tâches quelque part, et lorsque des applications qui utilisent la database exécutent une opération, elles font également certaines tâches hors de la queue. Wikipedia fait quelque chose comme ça avec sa queue. La planification n'est pas aussi sûre qu'avec les autres methods, mais vous pouvez par exemple vous empêcher de faire le ménage lorsque votre server est lourdement chargé.
Edit: Ce n'est pas forcément meilleur ou pire que les autres techniques. Il convient aux tâches qui ne doivent pas être exécutées à une date précise, mais qui doivent être effectuées «de time en time» ou «bientôt, mais pas nécessairement en ce moment».
Avantages
Désavantages
Vous ne pouvez pas vraiment countr sur des process externes. Toutes les solutions 'OS' que j'ai vues n'ont pas marché dans le monde réel: une database va bien au-delà des données, principalement grâce à la stratégie de sauvegarde / restauration, la stratégie de haute disponibilité, la stratégie de reprise après sinistre et toutes les autres 'ities' vous payez dans votre licence SQL Server. Un programmateur basé sur OS sera un composant externe totalement inconscient et non embedded avec l'un d'entre eux. C'est à dire. vous ne pouvez pas sauvegarder / restaurer votre emploi du time avec vos données, il ne peut pas basculer avec votre database, vous ne pouvez pas l'envoyer à un site de récupération après sinistre distant via votre canal d'envoi de données SQL.
Si vous avez un agent (c'est-à-dire pas une édition Express), utilisez l'agent. A une longue histoire d'utilisation et le savoir-faire autour est important. Le seul problème avec Agent est sa dépendance à msdb qui le déconnecte de la database de l'application et ne fonctionne donc pas bien avec les solutions de disponibilité et de restauration basées sur la mise en miroir.
Pour les éditions Express (c'est-à-dire pas d'agent), la meilleure option consiste à lancer votre propre planificateur en fonction des temporisateurs de conversation (au less dans SQL 2k5 et forward). Vous utilisez des conversations pour vous envoyer des messages au moment voulu et vous appuyez sur des procédures activées pour exécuter les tâches. Ils sont transactionnels et embeddeds à votre database, vous pouvez donc vous y fier après une restauration et après un basculement en miroir ou en cluster. Malheureusement, le savoir-faire sur la façon de les utiliser est assez court, j'ai plusieurs articles sur le sujet sur mon site rusanu.com . J'ai vu des systèmes répliquant une bonne quantité d'API agent sur Express en se basant entièrement sur les minuteurs de conversation.
Je vais généralement avec la méthode de planification des systèmes d'exploitation (planificateur de tâches pour Windows, cron pour Unix).
Je gère plusieurs plates-forms de database (SQL Server, Oracle, Informix) et je souhaite que la planification des tâches rest la plus générique possible.
De plus, dans notre environnement de production, nous devons impliquer un DBA pour tout dépannage / redémarrage des travaux en cours dans la database. Nous avons un meilleur access aux servers d'applications avec les tâches planifiées sur eux.
J'irais avec SQL Server Agent. C'est bien embedded avec SQL Server; diverses fonctionnalités de SQL Server utilisent Agent (Log Shipping, par exemple). Vous pouvez créer un travail d'agent pour exécuter un ou plusieurs packages SSIS, par exemple.
Il est également embedded avec la notification de l'opérateur, et peut être scripté, ou bien exécuté via SMO.