2016-04-06 23 views
8

Chúng tôi sử dụng SQL Server 2008 và có công việc thường chạy hơn 18 giờ và có nhiều bước. Tôi đã tìm kiếm và dường như không thể tìm thấy câu trả lời liên quan đến những gì xảy ra khi bạn sửa đổi công việc trong khi thực thi. Dưới đây là tóm tắt về những thay đổi tôi đã thực hiện đối với công việc trong quá trình thực hiện hôm nay:Điều gì sẽ xảy ra nếu các bước công việc của SQL Server được sửa đổi trong khi thực hiện

1) Tôi đã chèn một bước mới ở vị trí 'bước 2'. Công việc đã ở bước 15 nên có lẽ bước này sẽ không kích hoạt cho đến khi công việc tiếp theo chạy.

2) Tôi đã xóa bước cuối cùng (bướC# 30).

3) Tôi đã sửa đổi bước 29 từ 'chuyển sang bước tiếp theo' thành 'Thoát báo cáo thành công'.

Vì bướC# 15 đang diễn ra khi tôi thực hiện thay đổi hôm nay, các thay đổi tôi thực hiện cho các bước cuối cùng sẽ có hiệu lực khi công việc đến ngày hôm nay hoặc sẽ chỉ có hiệu lực vào lần tiếp theo?

Ngoài ra, liệu thực tế rằng tôi đã chèn một bước mới ở vị trí # 2 có ảnh hưởng đến thứ tự bước bất lợi cho lần chạy hiện tại không?

+0

Tôi sẽ giả định không có gì thay đổi cho đến khi thực hiện tiếp theo - công việc đã được tải vào bộ nhớ và đang chạy. Tuy nhiên, tôi không thể tìm thấy bất kỳ tài liệu nào để hỗ trợ ý tưởng này - vậy tại sao bạn không thử nó và tìm hiểu? Ví dụ, thêm một bước để kết thúc trong quá trình thực hiện mà kết quả đầu ra cho một bảng không sử dụng và xem nếu bạn nhận được bất kỳ đầu ra? – Bridge

+0

Nếu một công việc được thực hiện trong khi nó đang chạy không có gì sẽ xảy ra với nó. Nó sẽ không phá vỡ nó hoặc bắt đầu chạy thay đổi hoặc bất cứ điều gì. Nó sẽ chỉ có hiệu lực vào lần chạy tiếp theo. –

Trả lời

8

Tôi đã kiểm tra công việc sau khi hoàn thành và có câu trả lời kết luận ngay bây giờ. Sửa đổi công việc trong khi thực hiện DOES ảnh hưởng đến việc thực thi công việc hiện tại. Dựa trên lịch sử công việc, cách SQL Server 2008 xử lý công việc là một bước tại một thời điểm dựa trên số bước. Các bước không được nạp vào bộ nhớ hoặc được lưu trữ theo bất kỳ cách nào khác trong khi công việc đang thực hiện.

Trong trường hợp cụ thể của tôi, tôi đã thêm một bước ở vị trí số 2. Điều này khiến cho tất cả các số bước tiếp theo được tăng lên một lần tại thời điểm cập nhật. Công việc đang chạy bướC# 15 khi tôi cập nhật nó, vì vậy bướC# 15 trở thành # 16 sau khi cập nhật. Kết quả là thủ tục được lưu trữ tương tự (bước mới # 16) được thực thi lại khi bướC# 15 kết thúc.

Ngoài ra, vì tôi đã xóa bước cuối cùng của công việc, nó không được thực hiện khi công việc đạt đến bước đó vì nó không còn tồn tại như một phần của công việc.

Điểm mấu chốt là cách tốt nhất là không cập nhật công việc trong khi thực thi. Kết quả có thể dự đoán được, nhưng trừ khi bạn có thể đủ khả năng cho các bước chạy hai lần hoặc không hoàn toàn, nó không được khuyến nghị.

0

Tôi sử dụng SQL Management Studio 2012 Gói dịch vụ 3 và câu trả lời là tùy thuộc vào.

Ví dụ

  • Hãy tưởng tượng rằng Job #1 có ba bước.
  • Step 3 trình kích hoạt Job #2.
  • Job #1 là trên Step 2
  • Tôi không muốn nó chạy 'Bước 3', vì vậy tôi thay đổi mã để SELECT 1 và xóa bỏ dòng EXEC msdb.dbo.sp_start_job job #2.
  • Công việC# 1 kết thúc Step 2 và trình kích hoạt Job #2 trên Step 3.

Lý do thay đổi mã không có hiệu lực là do công việc đã chạy và chạy trên bản sao cục bộ của tập lệnh mà các thay đổi mã tiếp theo sẽ không ảnh hưởng.

Các vấn đề liên quan