İş Zamanla çalışmıyor


11

Bu yüzden bir klasörden diğerine tüm dosyaları taşımak için bir Robocopy komut dosyası çalıştıran bir temel SQL aracısı iş var.

İş oldukça basit bir kurulum. Etkin

Oldukça basit bir programla.

program

Ve henüz yayınlanmadı. Başarıyla koşmak demek istemiyorum ya da koşmak demek. Durumun böyle olmasının bir nedeni var mı?

Ek bilgi için işi de yazacağım.

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

Başlangıçta kurulduğunda tamam, hizmet hesabı olarak çalışıyordu. O zamandan beri farklı bir hesaba değiştirildi ve iyi çalışıyor.
Zane

Yanıtlar:


4

Bu soru hakkında yorum: Bu gönderiye baktığımda, işinizin başlangıçta 'sa' olarak çalıştığını gözlemliyorum. SQL Server hizmet hesabına gerekli dosya paylaşımları için hak verilmediği anlaşılıyor .

Görünüşe göre iş sonsuza dek " Koşu " sanki iş neden oldu . Tabii ki, aslında hiçbir şey olmuyordu.

Gerekli olmayan klasörlere SQL Server hizmet hesabı haklarını vermekten vazgeçmek en iyi yöntemdir . Bu, SQL Server ortamının güvenli olmayan etkinlikler için kullanılmasını önlemeye yardımcı olur. ( Saklı yordamın varsayılan olarak devre dışı bırakılmasının nedeni de aynıdır .)xp_cmdshell

Eğer gelen Açıldığında saçalıştı dosya sistemi her şeye gerekli haklara sahip bir hesaba. Elbette yapılacak doğru şey buydu.

Zamanlanmış SQL Agent işleri bazen uzun süre askıda kalıyor (ancak hala 'çalışıyor' gibi görünüyor). Muhtemelen bu genellikle dosya sistemine erişememe gibi harici sorunlardan kaynaklanır.

SQL Agent işin "çalıştığını" düşündüğü sürece, işi yeniden başlatmaya çalışmaz.

Basit dersler:

  1. 'Sa' yı SQL Server'ı yönetme olarak düşünün, ancak başka yerlerde haklar için yalvarmalısınız.
  2. SQL Agent iş geçmişini incelerken, çok uzun süredir çalışmakta olan işlere karşı dikkatli olun. Bu genellikle SQL Agent'ın işlemin öldüğünün farkında olmadığı anlamına gelir.
  3. Her zaman SQL Server dışındaki verilere veya nesnelere erişmesi gereken SQL Agent işleri için bir proxy hesabı kullanmayı planlayın. Ve Proxy'nin kullandığı Kimlik Bilgisine hakların verildiğinden emin olun.

Ve elbette, her kuralın istisnaları vardır.


TLDR: Dikkat etmiyordu ve aptalca bir şey yaptı.
Zane
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.