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.
Dengan jadwal yang cukup mendasar.
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
Jawaban:
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_cmdshell
prosedur tersimpan dinonaktifkan secara default.)Ketika Anda beralih dari
sa
ke 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:
Dan, tentu saja, setiap aturan memiliki pengecualian.
sumber