sql sorgusunun günlük çalışması için nasıl bir iş planlanır?


Yanıtlar:


164
  1. SQL Server Agent düğümünü genişletin ve SQL Server Agent'taki İşler düğümüne sağ tıklayın ve seçin 'New Job'

  2. Gelen 'New Job'pencerenin işin adı ve bir açıklama girin 'General'sekmesi.

  3. 'Steps'Pencerenin sol tarafını seçin ve alttaki tıklayın 'New'.

  4. Gelen 'Steps'pencerede bir adım ad girip sorgu karşı çalıştırmak istediğiniz veritabanını seçin.

  5. Çalıştırmak istediğiniz T-SQL komutunu Komut penceresine yapıştırın ve tıklayın 'OK'.

  6. Tıklayın 'Schedule'(örneğin günlük ve bir süre) Yeni İş penceresinin soldaki menüden ve zamanlama bilgilerini girin.

  7. Tıklayın 'OK'- ve bu olmalı.

(Elbette ekleyebileceğiniz başka seçenekler de var - ancak bir iş kurmak ve programlamak için ihtiyacınız olan asgari asgari budur diyebilirim)


bunu sql server express üzerinde nasıl yapabilirim? ajan, gelişmiş servislerle birlikte sql server express ile birlikte geliyor mu? '
Bilal Fazlani

6
Kimin olarak oturum açtığınıza bağlı olarak, SQL Server Agent düğümünü hiç göremeyebileceğinizi söylemeye gerek yok ... Herkes sa olarak oturum açmaz. Daha fazla (oldukça kuru) bilgi burada .. msdn.microsoft.com/en-us/library/ms188283.aspx
Fetchez la vache

SQL Server Agent düğümü "Agent XPs devre dışı" etiketiyle genişletilebilir değilse, bu kodu çalıştırın sp_configure 'gelişmiş seçenekleri göster', 1; YENİDEN YAPILANDIRILMAYA GİT; GO sp_configure 'Ajan XP'leri', 1; GO RECONFIGURE GO Açıklaması bu bağlantının altındadır: msdn.microsoft.com/en-us/library/ms178127.aspx
Barry Guvenkaya

4
Belki de bunu programlı olarak
Kiquenet

115

Kabul edilen cevaptaki adımların animasyonlu bir GIF'ini yaptım. Bu MSSQL Server 2012'den

SQL İşini Planla


8
Bir GIF - ne kadar yaratıcı! :)
Zeek2

9
Bu, stackoverflow'da en çok oy alan cevap olmalıdır.!
Goutham Anush

1
Sa ile giriş yapmak gerekir mi? Sa ile giriş yapmıyorum ve sql server agent görmedim. Sanırım onu ​​görmek için yeterli hakkım yok.
Alper

1
Menü ağacında SQL Server Aracısı alanını görmek için, oturum açtığınız kullanıcının MSDB veritabanında doğru izinlere ihtiyacı vardır (MSDB, SSMS'nin izinler gibi şeyler için kullandığı yerleşik bir veritabanıdır). Ana ağaç gezgininden Güvenlik> Oturum Açmalar> kullanıcı adınız> sağ tıklama> özellikler> kullanıcı eşleştirmeleri>
msdb'yi

19

Bunu t-sql'de yapmak için, günlük bir işi planlamak üzere aşağıdaki sistemde saklı yordamları kullanabilirsiniz. Bu örnek, her gün 01: 00'da planlanmaktadır. Ayrı ayrı saklı yordamların söz dizimi ve geçerli parametre aralığı hakkında ayrıntılar için Microsoft yardımına bakın.

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
müthiş. tam olarak ihtiyacım olan şey. Teşekkür ederim :)
AJ.

9

T-SQL kullanma: İşim saklı yordamı yürütüyor. @commandSql'nizi çalıştırmak için kolayca değiştirebilirsiniz .

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 ;

-2

Günlük yedekleme istiyorsanız // C: \ Users \ admin \ Desktop \ DBScript \ DBBackUpSQL.sql'deki sql script deposunu takip edin

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

Görev zamanlayıcıyı açın

görev oluştur-> Triggerssekmeyi seçin Seçin New.

Düğme Günlük Radyoyu Seç düğmesi

Tıklama OkDüğmesi

ardından ActionYeni Seç sekmesine tıklayın .

Düğme "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE"-S ADMIN-PC -i'yi "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"program / komut dosyası metin kutusuna koyun (Dosya yolunuzu eşleştirdiğinizden emin olun ve çift tırnaklı yolu başlangıç-> arama kutusuna koyun ve bulursa tıklayın ve yedeğin orada olup olmadığını görün )

- yukarıdaki yol 100 yazma 90 başlatılabilir "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"

sonra tamam düğmesini tıklayın

Komut dosyası, günlük olarak Tetikleyici sekmesinde seçtiğiniz zamanda yürütülecektir

tadını çıkar.............


-2

İşte örnek bir kod:

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

21
Cevabınıza kodunuzun bir açıklamasını eklemek genellikle iyi bir fikirdir (sizin için açık olsa bile).
Nathan Hughes

Bu cevap yeterli açıklama içermiyor. Yeterli açıklama olmadan okuyucular bu cevabı anlayamaz.
Jino Shaji
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.