Pekerjaan tidak berjalan sesuai Jadwal

11

Jadi saya punya pekerjaan agen SQL dasar yang menjalankan skrip Robocopy untuk memindahkan semua file dari satu folder ke yang lain.

Pekerjaan adalah pengaturan yang cukup mendasar. Diaktifkan

Dengan jadwal yang cukup mendasar.

Susunan acara

Namun itu belum berjalan. Maksud saya tidak lari dengan sukses, maksud saya lari sama sekali. Apakah ada alasan mengapa hal ini terjadi?

Untuk informasi tambahan saya akan skrip pekerjaan itu juga.

USE [msdb]
GO

/****** Object:  Job [MoveMantisFilesToArchive]    Script Date: 12/23/2015 10:21:52 AM ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object:  JobCategory [[Uncategorized (Local)]]]    Script Date: 12/23/2015 10:21:52 AM ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'MoveMantisFilesToArchive', 
        @enabled=1, 
        @notify_level_eventlog=0, 
        @notify_level_email=2, 
        @notify_level_netsend=0, 
        @notify_level_page=0, 
        @delete_level=0, 
        @description=N'Moves Mantis files to archive. It''s a very descriptive title.', 
        @category_name=N'[Uncategorized (Local)]', 
        @owner_login_name=N'sa', 
        @notify_email_operator_name=N'MyEmailGroup', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Move the files in the afformentioned title.]    Script Date: 12/23/2015 10:21:53 AM ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Move the files in the afformentioned title.', 
        @step_id=1, 
        @cmdexec_success_code=0, 
        @on_success_action=1, 
        @on_success_step_id=0, 
        @on_fail_action=2, 
        @on_fail_step_id=0, 
        @retry_attempts=0, 
        @retry_interval=0, 
        @os_run_priority=0, @subsystem=N'CmdExec', 
        @command=N'robocopy MySoruce MyDestination /mov', 
        @flags=0, 
        @proxy_name=N'RunsAs'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'M-F', 
        @enabled=1, 
        @freq_type=8, 
        @freq_interval=62, 
        @freq_subday_type=1, 
        @freq_subday_interval=0, 
        @freq_relative_interval=0, 
        @freq_recurrence_factor=1, 
        @active_start_date=20151218, 
        @active_end_date=99991231, 
        @active_start_time=170000, 
        @active_end_time=235959, 
        @schedule_uid=N'bcb83273-19e8-49fb-a456-8517642370e3'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:

GO
Zane
sumber
Oke ketika awalnya diatur itu berjalan sebagai akun layanan. Sejak itu telah diubah ke akun lain dan berjalan dengan baik.
Zane

Jawaban:

4

Komentar atas pertanyaan ini: Melihat ke pos ini saya mengamati bahwa pekerjaan Anda semula berjalan sebagai 'sa'. Tampaknya akun layanan untuk SQL Server Anda tidak diberikan hak untuk berbagi file yang diperlukan .

Tampaknya inilah yang menyebabkan pekerjaan itu tampak seolah-olah " Berlari " selamanya. Tentu saja, tidak ada yang benar-benar terjadi.

Ini adalah praktik terbaik untuk menahan memberikan hak akun layanan SQL Server ke folder yang tidak penting . Ini membantu menjaga lingkungan SQL Server dari eksploitasi untuk kegiatan yang tidak aman. (Banyak alasan yang sama bahwa xp_cmdshellprosedur tersimpan dinonaktifkan secara default.)

Ketika Anda beralih dari sake akun yang memiliki hak yang dibutuhkan untuk sistem file semuanya berfungsi. Tentu saja itu adalah hal yang benar untuk dilakukan.

Pekerjaan SQL Agent Terjadwal kadang-kadang hang (tapi sepertinya mereka masih 'berjalan') untuk waktu yang lama. Kemungkinan ini biasanya karena masalah eksternal, seperti tidak mendapatkan akses ke sistem file.

Selama Agen SQL percaya pekerjaan itu "berjalan", ia tidak akan mencoba memulai pekerjaan itu lagi.

Pelajaran sederhana:

  1. Anggap 'sa' sebagai penguasa SQL Server, tetapi harus meminta hak di tempat lain.
  2. Saat meninjau riwayat pekerjaan SQL Agent, waspadai pekerjaan yang telah berjalan terlalu lama. Itu biasanya berarti bahwa Agen SQL tidak menyadari bahwa proses telah mati.
  3. Selalu rencanakan untuk menggunakan akun proxy untuk pekerjaan SQL Agent yang perlu mengakses data atau objek di luar SQL Server. Dan pastikan bahwa hak diberikan kepada Kredensial yang digunakan Proksi.

Dan, tentu saja, setiap aturan memiliki pengecualian.

RLF
sumber
TLDR: Tidak memperhatikan dan melakukan sesuatu yang bodoh.
Zane