Wie plane ich einen Job für die tägliche Ausführung von SQL-Abfragen?

121

Ich muss wissen, wie eine SQL-Abfrage täglich mithilfe eines SQL Server-Agent-Jobs mit den minimal erforderlichen Konfigurationseinstellungen ausgeführt wird.

Bobj-C
quelle
Welche Version von SQL Server verwenden Sie?
Faber
1
Hier ist eine Lösung für die Express Edition: stackoverflow.com/a/7201189/259881
HasanG

Antworten:

163
  1. Erweitern Sie den Knoten SQL Server-Agent, klicken Sie mit der rechten Maustaste auf den Knoten Jobs in SQL Server-Agent und wählen Sie 'New Job'

  2. Geben Sie im 'New Job'Fenster den Namen des Jobs und eine Beschreibung auf der 'General'Registerkarte ein.

  3. Wählen Sie 'Steps'auf der linken Seite des Fensters und klicken Sie 'New'unten.

  4. Geben Sie im 'Steps'Fenster einen Schrittnamen ein und wählen Sie die Datenbank aus, für die die Abfrage ausgeführt werden soll.

  5. Fügen Sie den T-SQL-Befehl, den Sie ausführen möchten, in das Befehlsfenster ein und klicken Sie auf 'OK'.

  6. Klicken Sie auf das 'Schedule'Menü links im Fenster Neuer Job und geben Sie die Zeitplaninformationen ein (z. B. täglich und eine Uhrzeit).

  7. Klicken Sie 'OK'- und das sollte es sein.

(Es gibt natürlich noch andere Optionen, die Sie hinzufügen können - aber ich würde sagen, das ist das absolute Minimum, das Sie benötigen, um einen Job einzurichten und zu planen.)

L-Hinweis
quelle
Wie geht das auf SQL Server Express? Kommt der Agent mit SQL Server Express mit erweiterten Diensten?
Bilal Fazlani
6
Es versteht sich von selbst, dass je nachdem, als wen Sie sich anmelden, der SQL Server-Agent-Knoten möglicherweise überhaupt nicht angezeigt wird ... Nicht jeder meldet sich als sa an. Weitere (eher trockene) Infos hier .. msdn.microsoft.com/en-us/library/ms188283.aspx
Fetchez la vache
Wenn der SQL Server-Agent-Knoten nicht mit der Bezeichnung "Agent-XPs deaktiviert" erweitert werden kann, führen Sie diesen Code aus. sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Agent XPs', 1; GO RECONFIGURE GO Erklärung ist unter diesem Link: msdn.microsoft.com/en-us/library/ms178127.aspx
Barry Guvenkaya
4
Vielleicht mit Skript BAT, CMD, Powershell, um es programmgesteuert
Kiquenet
114

Ich habe ein animiertes GIF der Schritte in der akzeptierten Antwort erstellt. Dies ist von MSSQL Server 2012

Planen Sie den SQL-Job

S. Mason
quelle
8
Ein GIF - wie kreativ! :)
Zeek2
9
Dies sollte die am besten bewertete Antwort im Stackoverflow sein.!
Goutham Anush
1
Muss man sich mit sa anmelden? Ich bin nicht mit sa angemeldet und habe den SQL Server Agent nicht gesehen. Ich glaube, ich habe nicht genug Rechte, um es zu sehen.
Alper
1
Um den Bereich SQL Server-Agent in der Menübaumstruktur anzuzeigen, benötigt der Benutzer, bei dem Sie angemeldet sind, die richtigen Berechtigungen für die MSDB-Datenbank (MSDB ist eine integrierte Datenbank, die SSMS beispielsweise für Berechtigungen verwendet). Gehen Sie im Hauptbaum-Explorer zu Sicherheit> Anmeldungen> Ihr Benutzername> Rechtsklick> Eigenschaften> Benutzerzuordnungen> Überprüfen Sie msdb> und überprüfen Sie unten SQLAgentOperatorRole
S.Mason
18

Um dies in t-sql zu tun, können Sie die folgenden gespeicherten Systemprozeduren verwenden, um einen täglichen Job zu planen. In diesem Beispiel wird täglich um 1:00 Uhr geplant. Weitere Informationen zur Syntax der einzelnen gespeicherten Prozeduren und zum gültigen Parameterbereich finden Sie in der Microsoft-Hilfe.

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
quelle
2
genial. genau das was ich brauche. Danke :)
AJ.
9

Verwenden von T-SQL: Mein Job führt eine gespeicherte Prozedur aus. Sie können einfach ändern @command, um Ihre SQL auszuführen.

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
quelle
-1

Hier ist ein Beispielcode:

Exec sp_add_schedule
    @schedule_name = N'SchedulName' 
    @freq_type = 1
    @active_start_time = 08300
Gangster
quelle
21
Das Hinzufügen einer Erklärung Ihres Codes zu Ihrer Antwort ist normalerweise eine gute Idee (auch wenn es für Sie offensichtlich ist).
Nathan Hughes
Diese Antwort enthält nicht genügend Erklärungen. Ohne ausreichende Erklärung können die Leser diese Antwort nicht verstehen.
Jino Shaji
-2

Wenn Sie eine tägliche Sicherung // nach dem SQL-Skriptspeicher in C wünschen: \ 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

Öffnen Sie den Taskplaner

Aufgabe erstellen-> TriggersRegisterkarte auswählen Wählen SieNew .

Schaltfläche Tägliches Optionsfeld auswählen

klicken Ok Schaltfläche

Klicken ActionSie dann auf die Registerkarte Neu auswählen.

Button Put "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE"-S ADMIN-PC -i"C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql" in das Programm- / Skript-Textfeld ein (stellen Sie sicher, dass Ihr Dateipfad übereinstimmt, und geben Sie den Pfad in doppelten Anführungszeichen in das Start-> Suchfeld ein. Wenn er gefunden wird, klicken Sie darauf und sehen Sie, ob das Backup vorhanden ist oder nicht )

- Der obige Pfad kann 100 geschrieben 90 geschrieben werden "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"

Klicken Sie dann auf OK

Das Skript wird pünktlich ausgeführt, was Sie täglich auf der Registerkarte Auslöser auswählen

geniesse es.............

Pravin Dukare
quelle