comment planifier un travail pour une requête SQL à exécuter quotidiennement?

121

J'ai besoin de savoir comment exécuter une requête SQL quotidiennement à l'aide d'un travail de l'Agent SQL Server, avec les paramètres de configuration minimum requis.

Bobj-C
la source
quelle version de SQL Server utilisez-vous?
Faber
1
Voici la solution pour l'édition express: stackoverflow.com/a/7201189/259881
HasanG

Réponses:

164
  1. Développez le nœud SQL Server Agent et cliquez avec le bouton droit sur le nœud Jobs dans SQL Server Agent et sélectionnez 'New Job'

  2. Dans la 'New Job'fenêtre, entrez le nom du travail et une description dans l' 'General'onglet.

  3. Sélectionnez 'Steps'sur le côté gauche de la fenêtre et cliquez 'New'en bas.

  4. Dans la 'Steps'fenêtre, entrez un nom d'étape et sélectionnez la base de données sur laquelle vous souhaitez exécuter la requête.

  5. Collez la commande T-SQL que vous souhaitez exécuter dans la fenêtre de commande et cliquez sur 'OK'.

  6. Cliquez sur le 'Schedule'menu à gauche de la fenêtre Nouvelle tâche et entrez les informations de planification (par exemple, un jour et une heure).

  7. Cliquez 'OK'- et cela devrait être tout.

(Il y a bien sûr d'autres options que vous pouvez ajouter - mais je dirais que c'est le strict minimum dont vous avez besoin pour obtenir un travail configuré et planifié)

L-Note
la source
comment faire cela sur SQL Server Express? l'agent est-il livré avec SQL Server Express avec des services avancés '?'
Bilal Fazlani le
6
Il va sans dire qu'en fonction de la personne sous laquelle vous vous connectez, vous ne pourrez peut-être pas du tout voir le nœud SQL Server Agent ... Tout le monde ne se connecte pas en tant que sa. Plus d'informations (plutôt sèches) ici .. msdn.microsoft.com/en-us/library/ms188283.aspx
Fetchez la vache
si le nœud de l'Agent SQL Server n'est pas extensible avec une étiquette «Agent XPs désactivé», exécutez ce code sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Agent XPs', 1; GO RECONFIGURE GO Explication est sous ce lien: msdn.microsoft.com/en-us/library/ms178127.aspx
Barry Guvenkaya
4
Peut-être utiliser des scripts BAT, CMD, Powershell pour le faire par programme
Kiquenet
115

J'ai fait un GIF animé des étapes de la réponse acceptée. Ceci est de MSSQL Server 2012

Planifier un travail SQL

S.Mason
la source
8
Un GIF - quelle créativité! :)
Zeek2
9
Cela devrait être la réponse la plus positive dans stackoverflow.!
Goutham Anush
1
Faut-il se connecter avec sa? Je ne suis pas connecté avec sa et je n'ai pas vu l'agent de serveur SQL. Je pense que je n'ai pas assez de droits pour le voir.
Alper le
1
Pour voir la zone de l'Agent SQL Server dans l'arborescence des menus, l'utilisateur avec lequel vous êtes connecté a besoin des autorisations correctes sur la base de données MSDB (MSDB est une base de données intégrée que SSMS utilise pour des choses comme les autorisations). Depuis l'explorateur principal de l'arborescence, accédez à Sécurité> Connexions> votre nom d'utilisateur> clic droit> propriétés> mappages d'utilisateurs> vérifiez msdb> puis vérifiez ci-dessous SQLAgentOperatorRole
S.Mason
19

Pour ce faire dans t-sql, vous pouvez utiliser les procédures stockées système suivantes pour planifier un travail quotidien. Cet exemple est programmé tous les jours à 1h00. Consultez l'aide de Microsoft pour plus de détails sur la syntaxe des procédures stockées individuelles et la plage de paramètres valide.

DECLARE @job_name NVARCHAR(128), @description NVARCHAR(512), @owner_login_name NVARCHAR(128), @database_name NVARCHAR(128);

SET @job_name = N'Some Title';
SET @description = N'Periodically do something';
SET @owner_login_name = N'login';
SET @database_name = N'Database_Name';

-- Delete job if it already exists:
IF EXISTS(SELECT job_id FROM msdb.dbo.sysjobs WHERE (name = @job_name))
BEGIN
    EXEC msdb.dbo.sp_delete_job
        @job_name = @job_name;
END

-- Create the job:
EXEC  msdb.dbo.sp_add_job
    @job_name=@job_name, 
    @enabled=1, 
    @notify_level_eventlog=0, 
    @notify_level_email=2, 
    @notify_level_netsend=2, 
    @notify_level_page=2, 
    @delete_level=0, 
    @description=@description, 
    @category_name=N'[Uncategorized (Local)]', 
    @owner_login_name=@owner_login_name;

-- Add server:
EXEC msdb.dbo.sp_add_jobserver @job_name=@job_name;

-- Add step to execute SQL:
EXEC msdb.dbo.sp_add_jobstep
    @job_name=@job_name,
    @step_name=N'Execute SQL', 
    @step_id=1, 
    @cmdexec_success_code=0, 
    @on_success_action=1, 
    @on_fail_action=2, 
    @retry_attempts=0, 
    @retry_interval=0, 
    @os_run_priority=0, 
    @subsystem=N'TSQL', 
    @command=N'EXEC my_stored_procedure; -- OR ANY SQL STATEMENT', 
    @database_name=@database_name, 
    @flags=0;

-- Update job to set start step:
EXEC msdb.dbo.sp_update_job
    @job_name=@job_name, 
    @enabled=1, 
    @start_step_id=1, 
    @notify_level_eventlog=0, 
    @notify_level_email=2, 
    @notify_level_netsend=2, 
    @notify_level_page=2, 
    @delete_level=0, 
    @description=@description, 
    @category_name=N'[Uncategorized (Local)]', 
    @owner_login_name=@owner_login_name, 
    @notify_email_operator_name=N'', 
    @notify_netsend_operator_name=N'', 
    @notify_page_operator_name=N'';

-- Schedule job:
EXEC msdb.dbo.sp_add_jobschedule
    @job_name=@job_name,
    @name=N'Daily',
    @enabled=1,
    @freq_type=4,
    @freq_interval=1, 
    @freq_subday_type=1, 
    @freq_subday_interval=0, 
    @freq_relative_interval=0, 
    @freq_recurrence_factor=1, 
    @active_start_date=20170101, --YYYYMMDD
    @active_end_date=99991231, --YYYYMMDD (this represents no end date)
    @active_start_time=010000, --HHMMSS
    @active_end_time=235959; --HHMMSS
Doug Lampe
la source
2
impressionnant. exactement ce dont j'ai besoin. Merci :)
AJ.
9

Utilisation de T-SQL: mon travail exécute une procédure stockée. Vous pouvez facilement changer @commandpour exécuter votre sql.

EXEC msdb.dbo.sp_add_job  
   @job_name = N'MakeDailyJob',   
   @enabled = 1,   
   @description = N'Procedure execution every day' ; 

 EXEC msdb.dbo.sp_add_jobstep  
    @job_name = N'MakeDailyJob',   
    @step_name = N'Run Procedure',   
    @subsystem = N'TSQL',   
    @command = 'exec BackupFromConfig';

 EXEC msdb.dbo.sp_add_schedule  
    @schedule_name = N'Everyday schedule',   
    @freq_type = 4,  -- daily start
    @freq_interval = 1,
    @active_start_time = '230000' ;   -- start time 23:00:00

 EXEC msdb.dbo.sp_attach_schedule  
   @job_name = N'MakeDailyJob',  
   @schedule_name = N'Everyday schedule' ;

 EXEC msdb.dbo.sp_add_jobserver  
   @job_name = N'MakeDailyJob',  
   @server_name = @@servername ;
efysis
la source
-1

Voici un exemple de code:

Exec sp_add_schedule
    @schedule_name = N'SchedulName' 
    @freq_type = 1
    @active_start_time = 08300
bandit
la source
21
ajouter une explication de votre code dans votre réponse est généralement une bonne idée (même si cela vous semble évident).
Nathan Hughes
Cette réponse ne contient pas suffisamment d'explications. Sans suffisamment d'explications, les lecteurs ne peuvent pas comprendre cette réponse.
Jino Shaji
-2

si vous voulez une sauvegarde quotidienne // suivant le magasin de scripts sql dans C: \ Users \ admin \ Desktop \ DBScript \ DBBackUpSQL.sql

DECLARE @pathName NVARCHAR(512),
 @databaseName NVARCHAR(512) SET @databaseName = 'Databasename' SET @pathName = 'C:\DBBackup\DBData\DBBackUp' + Convert(varchar(8), GETDATE(), 112) + '_' + Replace((Convert(varchar(8), GETDATE(), 108)),':','-')+ '.bak' BACKUP DATABASE @databaseName TO DISK = @pathName WITH NOFORMAT, 
INIT, 
NAME = N'', 
SKIP, 
NOREWIND, 
NOUNLOAD, 
STATS = 10 
GO

ouvrir le planificateur de tâches

créer une tâche-> sélectionner l' Triggersonglet Sélectionner New.

Bouton Sélectionner le bouton radio quotidien

cliquez sur le Okbouton

puis cliquez sur l' Actiononglet Sélectionnez Nouveau.

Bouton Mettez "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE"-S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"dans la zone de texte du programme / script (assurez-vous de faire correspondre le chemin de vos fichiers et de mettre le chemin entre guillemets dans la zone de démarrage-> de recherche et s'il trouve, cliquez dessus et voyez la sauvegarde est là ou non )

- le chemin ci-dessus peut être installé 100 écriture 90 "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"

puis cliquez sur le bouton OK

le script s'exécutera à l'heure que vous sélectionnez sur l'onglet Déclenchement sur une base quotidienne

Profitez-en.............

Pravin Dukare
la source