-
July 15 2010, 10:49
- IT
- Cancel
Хотя я самоидентифицируюсь как копирайтер, но помимо копирайтинга и рерайтинга вечерами, приходится заниматься и работой в офисе. А в офисе я ведь одминко :).
И вот в силу своих должностных обязанностей работаю я со стареньким, но надёжным MS SQL Server 2000. А у старичка этого иногда возникает проблема: после переноса или переименования сервера возникают затыки с job’ами. При попытке изменить или удалить job возникает ошибка
Fix : Error 14274: Cannot add, update, or delete a job (or its steps or schedules) that originated from an MSX server. The job was not saved.
Звучит страшно, но на самом деле дело пустяковое. Ошибка возникает по причине ошибки в имени сервера, которое хранится в самом MS SQL Server. Вариантов решения этой задачи два:
I. Рекомендации Microsoft
1) Задайте первоначальное имя сервера (до переезда/переименования)
2) Сохраните job’ы в скриптах.
3) Переименуйте сервер в новое имя.
4) Выполните сохранённые скрипты для восстановления job’ов.
Этот вариант простой, но мне он не помог. Поэтому я ещё немного погуглил и нашёл другие рекомендации на одном из многочисленных форумов.
II. Рекомендации опытного индуса.
1) В Query Analyzer запустите следующий скрипт для проверки:
SELECT @@servername
Для того, чтобы убедиться в актуальности имени сервера в базе MS SQL
2) Если значение не верное, то выполняем следующие действия:
sp_dropserver <'неверное_имя_сервера'>
а потом:
sp_addserver <'правильное_имя_сервера'>, 'local'
для того, чтобы заменить имя сервера на актуальное.
3) Потом нужно рестартануть SQL и проверить всё ли получилось.
4) Если всё получилось, то проверим корректность джобов путём проверки поля check the originating_server в таблице msdb..sysjobs путём запуска следующего скрипта:SELECT *
FROM msdb..sysjobs
после отработки скрипта вы получите таблицу со списком job’ов и их параметрами, проверьте в этой таблице значения имени сервера на предмет их корректного обновления.
Если какие-то из них не обновились, то запустите следующий скрипт:
USE msdb
GO
DECLARE @server sysname
SET @server = CAST(SERVERPROPERTY('правильное_имя_сервера
')AS sysname)
UPDATE sysjobs
SET originating_server = @server
WHERE originating_server = '<неверное_имя_сервера
>'
Выполнение одной из этих двух комбинаций действий обязательно должно вам помочь
We use SSIS packages to import files. These SSIS packages are run with sqljobs. During deployment the sqljobs are created with a script. That is the plan.
While running the script to create the sqljobs we got an error:
Error 14274: Cannot add, update, or delete a job (or its steps or schedules) that originated from an MSX server
Image courtesy of jesadaphorn / FreeDigitalPhotos.net
Most solutions found on the internet talk about the name of the server. When you’ve renamed your Sql Server (yeah right) then you need to update the originating_server column in the sysjobs. This was not the case for us.
Over at msdn someone suggested to look at the variables. The first create sqljob would set the @jobid variable and the second create statement would use that value as input, where it is intended as output. The suggested SET @jobid = NULL before each call to sp_add_job did the trick.
About erictummers
Working in a DevOps team is the best thing that happened to me. I like challenges and sharing the solutions with others.
On my blog I’ll mostly post about my work, but expect an occasional home project, productivity tip and tooling review.
This entry was posted in Development and tagged error, sqljob, sqlserver, ssis. Bookmark the permalink.
I’m trying to create a rather simple script for dealing with SQL Server Agent jobs. It performs 2 tasks:
1) If a given job exists, delete it
2) Create the job
(Due to business requirements I can’t modify an existing job, the script must delete & re-create it.)
Running the script the first time works fine (creates the job). Running any times after that produces error 14274 «Cannot add, update, or delete a job that originated from an MSX server.»
I’ve done lots of searching on this, and most solutions center around the server name being changed. My server name has not changed, nor has it ever.
Here’s what I have:
USE [msdb];
SET NOCOUNT ON;
DECLARE @JobName NVARCHAR(128);
DECLARE @ReturnCode INT;
declare @errCode INT;
SET @JobName = 'AJob';
BEGIN TRANSACTION;
DECLARE @jobId uniqueidentifier;
SET @jobId = (SELECT job_id from msdb.dbo.sysjobs where name = @JobName);
IF(@jobId IS NOT NULL) -- delete if it already exists
begin
EXEC @ReturnCode = msdb.dbo.sp_delete_job @job_id=@jobId
IF(@@ERROR <> 0 OR @ReturnCode <> 0)
begin
set @errCode = @@ERROR;
GOTO QuitWithRollback;
end
print 'deleted job';
end
-- create the job
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=@JobName,
@enabled=1,
@notify_level_eventlog=0, -- on failure
@notify_level_email=0,
@notify_level_netsend=0, -- never
@notify_level_page=0,
@delete_level=0,
@description=NULL,
@owner_login_name=N'sa',
@notify_email_operator_name=NULL,
@job_id = @jobId OUTPUT
IF(@@ERROR <> 0 OR @ReturnCode <> 0)
begin
set @errCode = @@ERROR;
GOTO QuitWithRollback;
end
print 'added job';
-- Server
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver
@job_id = @jobId
IF(@@ERROR <> 0 OR @ReturnCode <> 0)
GOTO QuitWithRollback;
COMMIT TRANSACTION;
RETURN;
QuitWithRollback:
IF(@@TRANCOUNT > 0)
ROLLBACK TRANSACTION;
print 'Err: ' + CAST(@errCode AS varchar(10)) + ' ret: ' + cast(@ReturnCode as varchar(10));
I’m running it on SQL 2008 SP1. Any help would be very much appreciated!
Hi,
We have SQL Server 2000 with SP3. We have a maintenance plan for backups, integrity check.
I’m trying to include some more databases in the maintenance plan but I’m getting the below error:
Error 14274: Cannot add, update, or delete a job (or its steps or schedules) that originated from MSX server.
After getting this error, I tried to delete the Maintenance plan, it gave same error couple of times and then it got deleted. But jobs related to this maintenance plan in SQL Agent are NOT deleted and I tried to delete manually but still getting the same above error.
please advice
thanks
Встретилось такое сообщение об ошибке: Error 14274: Cannot add, update, or delete a job (or its steps or schedules) that originated from an MSX server. The job was not saved.
Попробуем устранить проблему, возникающую при попытке обновить или удалить ранее созданные задания в экземпляре SQL Server 2000 или при подключении базы данных msdb после изменения имени сервера Windows.
Причина возникновения ошибки «Cannot add, update, or delete a job»
Поле originating_server содержит имя экземпляра в формате «serverinstance», поскольку SQL Server 2000 допускает множество экземпляров (instance). Используется фактическое имя сервера, а не ‘(local)’ даже для экземпляра сервера по умолчанию.
Процесс может не обновить или не удалить задания с новым именем сервера после переименования сервера Windows, поскольку они все еще ссылаются на старое имя сервера. Это признанная проблема SQL2000 SP3.
Решение ошибки Cannot add, update or delete a job that originated from an MSX server
Выполните по порядку следующие процедуры в анализаторе запросов (Query Analyzer):
SELECT @@servername
Проверьте, правильно ли отображается имя SQL-сервера.
-
Если нет, запустите следующую команду:
sp_dropserver <'возвращенное_имя_сервера'>
После этого для изменения имени SQL-сервера запустите:
sp_addserver <'верное_имя_сервера'>, 'local'
Чтобы обновленная настройка вступила в силу, перезапустите службу SQL-сервера.
-
Если да, выполните следующую команду, чтобы проверить поле originating_server в msdb..sysjobs:
SELECT *
FROM msdb..sysjobsИ проверьте, все ли задания имеют правильное имя сервера originating_server. Если не все, то выполните приведенный ниже сценарий, чтобы обновить эту переменную с правильным именем сервера.
USE msdb
GO
DECLARE @server sysname
SET @server = CAST(SERVERPROPERTY('ИмяСервера')AS sysname)
UPDATE sysjobs
SET originating_server = @server
WHERE originating_server = '<неверное_имя_сервера>'