Репликация моментальных снимков показывает ошибку «Шаг неправильно определен и не может быть выполнен» - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь добавить задание «Агент SQL Server» на новый сервер базы данных, на котором установлен SQL Server 2008 R2. Это задание выполняет репликацию моментальных снимков для таблицы «groups», а затем распространяет моментальный снимок подписчику на другом сервере. К сожалению, эта работа не выполняется на этапе, который делает снимок. Это продолжает давать мне это сообщение об ошибке:

Шаг определен неправильно и не может быть запущен

Неудачный шаг таков:

  • Тип: Снимок репликации
  • Команда: -Publisher [DBSERVER-NEW] -PublisherDB [ProductionDB] -Distributor [DBSERVER-NEW] -Publication [Replicate_Groups_Table] -DistributorSecurityMode 1

Я попробовал ту же команду в командной строке, и она работала нормально. Команда, которую я попробовал, была:

snapshot.exe -Publisher [DBSERVER-NEW] -PublisherDB [ProductionDB] -Distributor [DBSERVER-NEW] -Publication [Replicate_Groups_Table] -DistributorSecurityMode 1

Следовательно, сама команда должна быть в порядке.

Кстати, команда «snapshot.exe», которую я использую, находится в этой папке:

C: \ Program Files \ Microsoft SQL Server \ 100 \ COM

Я проверил страницу «Дополнительно» этого шага, и она выглядит нормально:

  • В случае успеха: перейти к следующему шагу
  • При сбое: выход из отчета о сбое задания

Я перезагружаю новый сервер базы данных. Но это не помогло.

Обратите внимание, что задание выполняется в контексте агента SQL Server. И я назначил учетную запись локального администратора агенту SQL Server. Следовательно, задание должно иметь все необходимые права доступа.

Обратите внимание, что у меня точно такая же работа отлично работает на старом сервере баз данных (SQL Server 2000). А также я делал это однажды, еще в 2015 году, на сервере базы данных SQL Server 2008 R2; это было тоже хорошо. Поэтому я не знаю, почему на этот раз у меня так много проблем с этим.

Как я могу точно узнать, на что жалуется работа?

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

Джей Чан

Для справки, определение задания следующее:

USE [msdb]
GO

/****** Object:  Job [PopulateAndDistributeGroupsTable]    Script Date: 04/24/2018 15:22:54 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object:  JobCategory [REPL-Snapshot]    Script Date: 04/24/2018 15:22:54 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'REPL-Snapshot' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'REPL-Snapshot'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'PopulateAndDistributeGroupsTable', 
        @enabled=1, 
        @notify_level_eventlog=0, 
        @notify_level_email=0, 
        @notify_level_netsend=0, 
        @notify_level_page=0, 
        @delete_level=0, 
        @description=N'Populate "groups" table based on the group info from BonTrak.', 
        @category_name=N'REPL-Snapshot', 
        @owner_login_name=N'OURDOMAIN\Admin', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Populate groups table with group info from BonTrak]    Script Date: 04/24/2018 15:22:54 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Populate groups table with group info from BonTrak', 
        @step_id=1, 
        @cmdexec_success_code=0, 
        @on_success_action=3, 
        @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'TSQL', 
        @command=N'delete from groups

insert into groups
   select p.ProjectNum, m.Number, g.GroupID
   from ProjectMaster p
   inner join MechanicalData m on
      p.ProjectID = m.ProjectID
   inner join InstallationGroupMasterTable g on
      m.MechanicalID = g.MechanicalID
   where g.IsVoid = 0
   order by p.ProjectNum, m.Number, g.GroupID
', 
        @database_name=N'ProductionDB', 
        @flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Snapshot Agent startup message]    Script Date: 04/24/2018 15:22:54 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Snapshot Agent startup message', 
        @step_id=2, 
        @cmdexec_success_code=0, 
        @on_success_action=3, 
        @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'TSQL', 
        @command=N'sp_MSadd_snapshot_history @perfmon_increment = 0,  @agent_id = 3, @runstatus = 1, @comments = ''Starting agent.''', 
        @database_name=N'distribution', 
        @flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Run snapshot agent to prepare replicating groups]    Script Date: 04/24/2018 15:22:54 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Run snapshot agent to prepare replicating groups', 
        @step_id=3, 
        @cmdexec_success_code=0, 
        @on_success_action=3, 
        @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'Snapshot', 
        @command=N'-Publisher [DBSERVER-NEW] -PublisherDB [ProductionDB] -Distributor [DBSERVER-NEW] -Publication [Replicate_Groups_Table] -DistributorSecurityMode 1', 
        @database_name=N'master', 
        @flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [PA-SPARE - Run distribution agent to replicate groups table]    Script Date: 04/24/2018 15:22:54 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'BRANCH01DB - Run distribution agent to replicate groups table', 
        @step_id=4, 
        @cmdexec_success_code=0, 
        @on_success_action=1, 
        @on_success_step_id=0, 
        @on_fail_action=3, 
        @on_fail_step_id=0, 
        @retry_attempts=0, 
        @retry_interval=0, 
        @os_run_priority=0, @subsystem=N'Distribution', 
        @command=N'-Subscriber [BRANCH01DB] -SubscriberDB [ProductionDB] -Publisher [DBSERVER-NEW] -Distributor [DBSERVER-NEW] -DistributorSecurityMode 1 -PublisherDB [ProductionDB]', 
        @database_name=N'master', 
        @flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Detect nonlogged agent shutdown]    Script Date: 04/24/2018 15:22:54 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Detect nonlogged agent shutdown', 
        @step_id=5, 
        @cmdexec_success_code=0, 
        @on_success_action=2, 
        @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'TSQL', 
        @command=N'sp_MSdetect_nonlogged_shutdown @subsystem = ''Snapshot'', @agent_id = 3', 
        @database_name=N'distribution', 
        @flags=0
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'Run this job very frequently', 
        @enabled=1, 
        @freq_type=8, 
        @freq_interval=126, 
        @freq_subday_type=4, 
        @freq_subday_interval=5, 
        @freq_relative_interval=0, 
        @freq_recurrence_factor=1, 
        @active_start_date=20180424, 
        @active_end_date=99991231, 
        @active_start_time=50200, 
        @active_end_time=175959, 
        @schedule_uid=N'057dbe80-e389-4d33-b6b7-f73315008a44'
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

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Пожалуйста, обратитесь к моим комментариям к пользователю 1443098.

По существу, в шагах задания, записанного в msdb.dbo.sysjobstops, отсутствовало имя "сервера".

Мое предложение НЕ создавать всю работу вручную. Следует использовать мастер для создания основной работы, чтобы сначала убедиться, что она работает, а затем настроить работу для добавления наших собственных материалов.

Другое предложение состоит в том, чтобы сравнить шаги (в msdb.dbo.sysjobstops) задания с шагами в заведомо исправном задании, чтобы выяснить, отсутствует ли что-либо.

Если ничего из вышеперечисленного не работает, пожалуйста, попробуйте то, что предложил user1443098. То есть добавить «snapshot.exe» в начало команды. Это также включает в себя изменение шага с «Снимок репликации» на «Операционная система (CmdExec)», и убедитесь, что поиск PATH включает в себя папку, где находится файл «snapshot.exe». Конечно, вам нужно сначала проверить всю команду в командной строке, прежде чем включать команду в задание агента SQL Server.

Надеюсь, это поможет.

0 голосов
/ 24 апреля 2018

Здесь Я прочитал:

Из командной строки или в пакетном файле запустите агент моментальных снимков репликации, запустив snapshot.exe, указав следующие аргументы командной строки:

, поэтому, возможно, попробуйте добавить «snapshot.exe» перед вашим первым параметром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...