스케줄에 따라 실행되지 않는 작업


11

그래서 Robocopy 스크립트를 실행하여 모든 파일을 한 폴더에서 다른 폴더로 이동하는 기본 SQL 에이전트 작업이 있습니다.

직업은 꽤 기본 설정입니다. 가능

꽤 기본적인 일정으로.

시간표

그러나 아직 실행되지 않았습니다. 나는 성공적으로 달리는 것을 의미하지는 않는다. 그럴만한 이유가 있습니까?

자세한 내용은 작업을 스크립트로 작성하겠습니다.

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

답변:


4

이 질문에 대한 논평 :이 게시물을 살펴보면 귀하의 작업이 원래 'sa'로 실행되고 있음을 알았습니다. SQL Server의 서비스 계정에 필요한 파일 공유에 대한 권한없는 것 같습니다 .

이것은 분명히 작업이 마치 " 실행 중"인 것처럼 보이는 원인이되었습니다 . 물론 실제로 아무 일도 일어나지 않았습니다.

필수적이지 않은 폴더에 대한 SQL Server 서비스 계정 권한 부여를 보류 하는 것이 가장 좋습니다 . 이렇게하면 안전하지 않은 활동으로 인해 SQL Server 환경을 악용하지 못하게됩니다. 저장 프로 시저가 기본적으로 비활성화되어 있는 것과 같은 이유입니다 .xp_cmdshell

sa파일 시스템에 필요한 권한이있는 계정으로 전환하면 모든 것이 작동했습니다. 물론 옳은 일이었습니다.

예약 된 SQL 에이전트 작업이 때때로 중단되는 경우가 있습니다 (그러나 여전히 '실행중인'것처럼 보입니다). 파일 시스템에 액세스하지 못하는 등의 외부 문제로 인한 것일 수 있습니다.

SQL 에이전트가 작업이 "실행 중"이라고 생각하는 한 작업을 다시 시작하려고 시도하지 않습니다.

간단한 수업 :

  1. 'sa'는 SQL Server를 지배한다고 생각하지만 다른 곳에서는 권리를 구해야합니다.
  2. SQL 에이전트 작업 기록을 검토 할 때 너무 오래 실행 된 작업에주의하십시오. 이는 일반적으로 SQL 에이전트가 프로세스가 종료되었음을 인식하지 못함을 의미합니다.
  3. SQL Server 외부의 데이터 또는 개체에 액세스해야하는 SQL 에이전트 작업에 항상 프록시 계정을 사용하십시오. 또한 프록시가 사용중인 자격 증명에 권한이 부여되어 있는지 확인하십시오.

물론 모든 규칙에는 예외가 있습니다.


TLDR :주의를 기울이지 않았고 어리석은 짓을했습니다.
Zane
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.