come pianificare un lavoro per l'esecuzione quotidiana di query sql?


Risposte:


164
  1. Espandere il nodo SQL Server Agent e fare clic con il pulsante destro del mouse sul nodo Processi in SQL Server Agent e selezionare 'New Job'

  2. Nella 'New Job'finestra immettere il nome del lavoro e una descrizione nella 'General'scheda.

  3. Seleziona 'Steps'sul lato sinistro della finestra e fai clic su 'New'in basso.

  4. Nella 'Steps'finestra immettere un nome di passaggio e selezionare il database su cui eseguire la query.

  5. Incolla il comando T-SQL che desideri eseguire nella finestra dei comandi e fai clic 'OK'.

  6. Fare clic sul 'Schedule'menu a sinistra della finestra Nuovo lavoro e immettere le informazioni sulla pianificazione (ad esempio, ogni giorno e un orario).

  7. Fare clic su 'OK'- e dovrebbe essere così.

(Ci sono ovviamente altre opzioni che puoi aggiungere, ma direi che è il minimo indispensabile per ottenere un lavoro impostato e pianificato)


come farlo su SQL Server Express? l'agente viene fornito con sql server express con servizi avanzati "?"
Bilal Fazlani

6
Inutile dire che, a seconda della persona con cui si accede, potrebbe non essere possibile visualizzare affatto il nodo di SQL Server Agent ... Non tutti accedono come sa. Ulteriore (piuttosto secco) Info qui .. msdn.microsoft.com/en-us/library/ms188283.aspx
Fetchez la vache

se il nodo di SQL Server Agent non è espandibile con l'etichetta "Agent XPs disabled", eseguire questo codice sp_configure 'show advanced options', 1; RICONFIGURA; GO sp_configure "Agent XPs", 1; VAI RICONFIGURA VAI La spiegazione è a questo link: msdn.microsoft.com/en-us/library/ms178127.aspx
Barry Guvenkaya

4
Forse usando lo scripting BAT, CMD, Powershell per farlo in modo programmatico
Kiquenet

115

Ho creato una GIF animata dei passaggi nella risposta accettata. Questo è da MSSQL Server 2012

Pianifica lavoro SQL


8
Una GIF: che creatività! :)
Zeek2

9
Questa dovrebbe essere la risposta più votata in stackoverflow.!
Goutham Anush

1
È necessario accedere con sa? Non ho effettuato l'accesso con sa e non ho visto l'agente del server sql. Penso di non avere abbastanza diritti per vederlo.
Alper

1
Per visualizzare l'area di SQL Server Agent nella struttura dei menu, l'utente a cui si è effettuato l'accesso richiede le autorizzazioni corrette sul database MSDB (MSDB è un database integrato che SSMS utilizza per cose come le autorizzazioni). Dall'esploratore dell'albero principale, vai su Sicurezza> Accesso> nome utente> fai clic con il pulsante destro del mouse> proprietà> mappature utente> controlla msdb> quindi sotto controlla SQLAgentOperatorRole
S.Mason

19

A tale scopo in t-sql, è possibile utilizzare le seguenti procedure memorizzate di sistema per pianificare un lavoro quotidiano. Questo esempio pianifica ogni giorno all'1: 00. Vedere la guida di Microsoft per i dettagli sulla sintassi delle singole stored procedure e sulla gamma di parametri valida.

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

2
eccezionale. esattamente quello di cui ho bisogno. Grazie :)
AJ.

9

Utilizzo di T-SQL: il mio lavoro sta eseguendo la stored procedure. Puoi cambiare facilmente @commandper eseguire il tuo 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 ;

-1

Ecco un codice di esempio:

Exec sp_add_schedule
    @schedule_name = N'SchedulName' 
    @freq_type = 1
    @active_start_time = 08300

21
l'aggiunta di una spiegazione del codice nella risposta è solitamente una buona idea (anche se è evidente per te).
Nathan Hughes

Questa risposta non contiene spiegazioni sufficienti. Senza una spiegazione sufficiente, i lettori non possono capire questa risposta.
Jino Shaji

-2

se si desidera un backup giornaliero // seguendo l'archivio di script SQL in 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

apri l'utilità di pianificazione

crea attività-> seleziona Triggersscheda Seleziona New.

Pulsante Seleziona il pulsante radio giornaliero

fare clic sul Okpulsante

quindi fare clic su Action scheda Seleziona nuovo.

Pulsante Metti "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE"-S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"nella casella di testo del programma / script (assicurati di Match your files path e Put the double quoted path in start-> search box and if it find then click it and see the backup is there or not )

- il percorso sopra può essere invece 100 scrivi 90 "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"

quindi fare clic sul pulsante ok

lo script verrà eseguito all'orario selezionato nella scheda Trigger su base giornaliera

divertirsi.............

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.