จะกำหนดเวลางานให้ sql query ทำงานทุกวันได้อย่างไร?


121

ฉันต้องการทราบวิธีทำให้แบบสอบถาม SQL ทำงานทุกวันโดยใช้งาน SQL Server Agent โดยมีการตั้งค่าการกำหนดค่าขั้นต่ำที่จำเป็น


คุณใช้ SQL Server เวอร์ชันใด
Faber

1
นี่คือโซลูชันสำหรับรุ่นด่วน: stackoverflow.com/a/7201189/259881
HasanG

คำตอบ:


164
  1. ขยายโหนด SQL Server Agent และคลิกขวาที่โหนดงานใน SQL Server Agent และเลือก 'New Job'

  2. ใน'New Job'หน้าต่างให้ป้อนชื่องานและคำอธิบายบน'General'แท็บ

  3. เลือก'Steps'ทางด้านซ้ายมือของหน้าต่างแล้วคลิก'New'ที่ด้านล่าง

  4. ใน'Steps'หน้าต่างให้ป้อนชื่อขั้นตอนและเลือกฐานข้อมูลที่คุณต้องการให้คิวรีรัน

  5. วางคำสั่ง T-SQL 'OK'คุณต้องการที่จะวิ่งเข้ามาในหน้าต่างคำสั่งและคลิก

  6. คลิกที่'Schedule'เมนูทางด้านซ้ายของหน้าต่างงานใหม่และป้อนข้อมูลกำหนดการ (เช่นรายวันและเวลา)

  7. คลิก'OK'- และนั่นควรจะเป็น

(แน่นอนว่ามีตัวเลือกอื่น ๆ ที่คุณสามารถเพิ่มได้ แต่ฉันจะบอกว่านั่นคือขั้นต่ำที่คุณต้องมีเพื่อตั้งค่างานและกำหนดเวลา)


วิธีการทำบน sql server express? ตัวแทนมาพร้อมกับ sql server express พร้อมบริการขั้นสูง 'หรือไม่'
Bilal Fazlani

6
โดยไม่ต้องบอกว่าขึ้นอยู่กับว่าคุณเข้าสู่ระบบในฐานะใครคุณอาจไม่สามารถมองเห็นโหนด SQL Server Agent ได้เลย ... ไม่ใช่ทุกคนที่ล็อกออนเป็น sa ข้อมูลเพิ่มเติม (ค่อนข้างแห้ง) ที่นี่ .. msdn.microsoft.com/en-us/library/ms188283.aspx
Fetchez la vache

ถ้าโหนด SQL Server Agent ไม่สามารถขยายได้โดยมีป้ายกำกับ "Agent XPs disabled" ให้รันโค้ดนี้ sp_configure 'show advanced options', 1; ไปเรียกคืน; ไป sp_configure 'Agent XPs', 1; คำอธิบาย GO RECONFIGURE
Barry Guvenkaya

4
อาจใช้สคริปต์ BAT, CMD, Powershell เพื่อทำแบบเป็นโปรแกรม
Kiquenet

115

ฉันสร้าง GIF แบบเคลื่อนไหวของขั้นตอนในคำตอบที่ยอมรับ มาจาก MSSQL Server 2012

จัดกำหนดการงาน SQL


8
GIF - สร้างสรรค์แค่ไหน! :)
Zeek2

9
นี่ควรเป็นคำตอบที่ได้รับการโหวตมากที่สุดใน stackoverflow!
Goutham Anush

1
มันต้องเข้าสู่ระบบด้วย sa หรือไม่? ฉันไม่ได้เข้าสู่ระบบด้วย sa และฉันไม่เห็นเอเจนต์เซิร์ฟเวอร์ sql ฉันคิดว่าฉันไม่มีสิทธิ์พอที่จะเห็นมัน
Alper

1
หากต้องการดูพื้นที่ SQL Server Agent ในแผนผังเมนูผู้ใช้ที่คุณเข้าสู่ระบบเนื่องจากต้องการสิทธิ์ที่ถูกต้องบนฐานข้อมูล MSDB (MSDB เป็นฐานข้อมูลในตัวที่ SSMS ใช้สำหรับสิ่งต่างๆเช่นสิทธิ์) จากตัวสำรวจต้นไม้หลักไปที่ความปลอดภัย> การเข้าสู่ระบบ> ชื่อผู้ใช้ของคุณ> คลิกขวา> คุณสมบัติ> การแมปผู้ใช้> ตรวจสอบ msdb> จากนั้นตรวจสอบ SQLAgentOperatorRole
S.Mason

19

ในการทำสิ่งนี้ใน t-sql คุณสามารถใช้โพรซีเดอร์ที่ระบบจัดเก็บไว้ต่อไปนี้เพื่อกำหนดเวลางานประจำวัน ตัวอย่างนี้กำหนดเวลาทุกวันเวลา 01:00 น. ดูวิธีใช้ของ Microsoft สำหรับรายละเอียดเกี่ยวกับไวยากรณ์ของแต่ละกระบวนงานที่จัดเก็บและช่วงของพารามิเตอร์ที่ถูกต้อง

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
น่ากลัว สิ่งที่ฉันต้องการ ขอบคุณครับ :)
AJ.

9

การใช้ T-SQL: งานของฉันกำลังดำเนินการตามขั้นตอนการจัดเก็บ คุณสามารถเปลี่ยน@commandเพื่อเรียกใช้ 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 ;

-2

ถ้าคุณต้องการสำรองข้อมูลรายวัน // ตามเก็บสคริปต์ sql ใน 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

เปิดตัวกำหนดตารางเวลางาน

สร้าง task-> เลือกแท็บเลือกTriggersNew

ปุ่มเลือกปุ่ม Daily Radio

คลิกOkปุ่ม

จากนั้นคลิกActionแท็บเลือกใหม่

ปุ่มใส่"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE"-S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"ในกล่องข้อความโปรแกรม / สคริปต์ (ตรวจสอบให้แน่ใจว่าตรงกับเส้นทางไฟล์ของคุณและใส่เส้นทางที่ยกมาสองครั้งในช่องเริ่มต้น -> ค้นหาและหากพบให้คลิกและดูว่ามีการสำรองข้อมูลอยู่หรือไม่ )

- เส้นทางข้างต้นอาจถูกปลูกฝัง 100 เขียน 90 "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"

จากนั้นคลิกปุ่มตกลง

สคริปต์จะดำเนินการตามเวลาที่คุณเลือกบนแท็บ Trigger ในแต่ละวัน

สนุกกับมัน.............


-2

นี่คือโค้ดตัวอย่าง:

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

21
การเพิ่มคำอธิบายรหัสของคุณในคำตอบมักเป็นความคิดที่ดี (แม้ว่าคุณจะเห็นได้ชัดก็ตาม)
Nathan Hughes

คำตอบนี้ไม่มีคำอธิบายเพียงพอ หากไม่มีคำอธิบายเพียงพอผู้อ่านจะไม่เข้าใจคำตอบนี้
Jino Shaji
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.