Перезапуск повисшего задания сервера хранения данных Service Manager

В этой короткой статье я приведу пример одного случая из моей практики по Service Manager. Конкретно про задания сервера хранения данных Service Manager. У одного из наших клиентов задание MPSyncJob завершилось с ошибкой и повторный его запуск с консоли или командлет никакого результата не приносил. Поэтому в этой публикации я кратко покажу, как выполнить перезапуск повисшего задания сервера хранения данных Service Manager.

Честно, я не смог воспроизвести у себя именно эту проблему, но решил все же сделать себе небольшую шпаргалку – вдруг пригодится.

Симптомы

Одно из заданий сервера хранения данных не завершалось успешно. В моей случае это было задание MPSyncJob. У ряда пакетов управления не были завершены связи. Ручной запуск задания ни к чему не приводил – даже дата последнего запуска задания не обновлялась. Стало понятно, что с заданием что-то не так.

В базе знаний Microsoft я наткнулся на детальной реководство по решению проблем с заданиями сервера хранения данных. Именно его я буду использовать в качестве основы.

Перезапуск повисшего задания

Перезапуск повисшего задания можно выполнить через запросы к базе данных и ряд командлетов PowerShell. Теперь по порядку:

1. На сервере управления выполните следующие командлеты в модуле PoserShell для Service Manager для того, чтобы импортировать модуль для работы с сервером хранения данных и получить перечень заданий сервера хранения данных.

import-module (((Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\System Center\2010\Common\Setup").InstallDirectory)+ "Microsoft.EnterpriseManagement.Warehouse.Cmdlets.psd1")
$jobs = Get-SCDWJob -ComputerName scsmdw01
$jobs | ft -autosize

Параметр ComputerName – это имя сервера хранения данных.

Здесь в списке заданий мы должны увидеть нашу проблемное задание. Повторюсь, что я не смог на своем тестовом стенде воспроизвести проблему, но я могу воспроизвести ход решения.

2. Теперь необходимо отключить все задания сервера хранения данных:

foreach($job in $jobs){Disable-SCDWJobSchedule -jobname $job.name -ComputerName scsmdw01}; Get-SCDWJobSchedule -ComputerName scsmdw01 | ft -autosize

3. Теперь необходимо дождаться пока все задания завершат свою работу. По крайней мере те, которые могут завершить работу штатно.

Get-SCDWJob -ComputerName scsmdw01

4. На сервере хранения данных останавливаем службу Microsoft Monitoring Agent и переименовываем папку с кэшэм агента наблюдения:

Stop-Service -Name HealthService
$dir = Get-ItemProperty -path "HKLM:\SOFTWARE\Microsoft\System Center\2010\Common\Setup"
$oldname = $dir.installdirectory + "Health Service State"
$newname = $dir.installdirectory + "Health Service State.old"
Rename-Item -Path $oldname -NewName $newname

5. Теперь нам необходимо выяснить BatchId проблемного задания:

Get-SCDWJob -ComputerName scsmdw01

В моем случае для работы MPSyncJob BatchId – 2944.

6. Теперь выполним следующий SQL запрос к базе данных:

USE DWStagingAndConfig
UPDATE Infra.WorkItem SET StatusId = 6 WHERE BatchId = '2944'
UPDATE Infra.Batch SET StatusId = 6 WHERE BatchId = '2944'

В BatchId указываем ID задания из п. 5.

7. Создадим новое задание через SQL запрос:

USE DWStagingAndConfig
EXEC Infra.CreateBatch 'MPSyncJob'

В качестве параметра передаем имя задания. В моем случае – MPSyncJob.

8. Теперь мы должны увидеть новый BatchID для нашего задания:

 Get-SCDWJob -ComputerName scsmdw01

9. Если в базе данных остались какие-то блокировки, то их необходимо удалить. Проверяем наличие блокировок следующим SQL запросом:

USE DWStagingAndConfig
SELECT * FROM LockDetails

Если какие-то блокировки есть, то удаляем из следующим SQL запросом:

USE DWStagingAndConfig
EXEC dbo.ReleaseLock
@ResourceName = '<ResourceName>',
@LockRequester = '<LockRequester>'

Параметры ResourceName и LockRequester вы сможете взять из первого запроса, который выводит полный перечень блокировок.

Необходимо удалить все блокировки.

10. На сервере хранения данных запускаем службу Microsoft Monitoring Agent:

Start-Service -Name HealthService

11. Запускаем автоматический запуск заданий сервера хранения данных:

foreach($job in $jobs){Enable-SCDWJobSchedule -jobname $job.name -ComputerName scsmdw01 };
Get-SCDWJobSchedule -ComputerName scsmdw01  | ft -autosize

12. Теперь запуск проблемного задания должен завершаться успешно:

Start-SCDWJob -jobname MPSyncJob -ComputerName scsmdw01

А самое главное, что перезапуск повисшего задания методом, который я привел выше позволил заданию корректно завершить работу.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *