none
Перенос Jobs RRS feed

  • Вопрос

  •  

    В процессе переноса SQL баз CRM 3.0  с одного сервера на другой, возникла ситуация, описанная в KB910044. Для решения предлагается скопировать Jobs c одного сервера на другой. Собственно вопрос - как это сделать ? SQL 2005.
    14 ноября 2008 г. 2:39

Ответы

  • 2005

    Открываем MS SQL Server Management Studio\SQL Server Agent\правый клик на нужном джобе\Script job as\Create to\Clipboard

    В буфер обмена скопируется скрипт, который генерит джоб.

    Подключитесь к целевому SQL Server, нажимаем New Query\вставляем содержимое буфера - скрипт\нажимаем Execute.

    Скрипт выполнится и создаст абсолютно такой же джоб на целевом сервере как и на исходном.

     

     

    14 ноября 2008 г. 6:39

Все ответы

  • Вам необходимо перенести job с одного SQL Server на другой?
    Версию SQL Server сообщите (2000 или 2005?).

    14 ноября 2008 г. 6:23
  • 2005

    Открываем MS SQL Server Management Studio\SQL Server Agent\правый клик на нужном джобе\Script job as\Create to\Clipboard

    В буфер обмена скопируется скрипт, который генерит джоб.

    Подключитесь к целевому SQL Server, нажимаем New Query\вставляем содержимое буфера - скрипт\нажимаем Execute.

    Скрипт выполнится и создаст абсолютно такой же джоб на целевом сервере как и на исходном.

     

     

    14 ноября 2008 г. 6:39
  • Либо, если джобов оч. много и скриптовать всё нет времени и перенос БД msdb не подходит,

    то вот скриптик, который я писал для импорта:

     

     

    Code Snippet

    use msdb
    Declare @LinkedServ NVarchar(128)
    set @LinkedServ=N'MATRIX'--Linked Server!!!


    -----------------------------------------
    --Импорт JOB'ов
    -----------------------------------------
    exec
    ('
    insert into msdb.dbo.sysjobs
    SELECT [job_id]
    ,0
    ,[name]
    ,[enabled]
    ,[description]
    ,[start_step_id]
    ,[category_id]
    ,[owner_sid]
    ,[notify_level_eventlog]
    ,[notify_level_email]
    ,[notify_level_netsend]
    ,[notify_level_page]
    ,[notify_email_operator_id]
    ,[notify_netsend_operator_id]
    ,[notify_page_operator_id]
    ,[delete_level]
    ,[date_created]
    ,[date_modified]
    ,[version_number]
    FROM '+@LinkedServ+'.msdb.dbo.sysjobs
    ')
    ------------------------------------------------

    ------------------------------------------------
    --Импорт
    STEP'ов
    ------------------------------------------------

    Create Table #tempSteps
    (
    id int identity
    ,job_ID uniqueidentifier
    ,step_name NVarchar(128)
    ,step_id int
    ,cmdexec_success_code int
    ,on_success_action int
    ,on_success_step_id int
    ,on_fail_action int
    ,on_fail_step_id int
    ,retry_attempts int
    ,retry_interval int
    ,os_run_priority int
    ,subsystem NVARCHAR(40)
    ,command NVARCHAR(max)
    ,database_name NVARCHAR(128)
    ,flags int
    )

    exec
    ('
    insert into #tempSteps select
    job_ID
    ,step_name
    ,step_id
    ,cmdexec_success_code
    ,on_success_action
    ,on_success_step_id
    ,on_fail_action
    ,on_fail_step_id
    ,retry_attempts
    ,retry_interval
    ,os_run_priority
    ,subsystem
    ,command
    ,database_name
    ,flags
    FROM '+@LinkedServ+'.msdb.dbo.sysjobsteps
    ')

    declare
    @job_ID uniqueidentifier
    declare @step_name NVarchar(128)
    declare @step_id int
    declare @cmdexec_success_code int
    declare @on_success_action int
    declare @on_success_step_id int
    declare @on_fail_action int
    declare @on_fail_step_id int
    declare @retry_attempts int
    declare @retry_interval int
    declare @os_run_priority int
    declare @subsystem NVARCHAR(40)
    declare @command NVARCHAR(max)
    declare @database_name NVARCHAR(128)
    declare @flags int


    declare @i int
    set @i=1
    while @i<=(select count(*) from #tempSteps )
    begin


    select
    @job_ID =job_ID
    ,@step_name =step_name
    ,@step_id =step_id
    ,@cmdexec_success_code =cmdexec_success_code
    ,@on_success_action =on_success_action
    ,@on_success_step_id=on_success_step_id
    ,@on_fail_action =on_fail_action
    ,@on_fail_step_id =on_fail_step_id
    ,@retry_attempts =retry_attempts
    ,@retry_interval =retry_interval
    ,@os_run_priority =os_run_priority
    ,@subsystem =subsystem
    ,@command =command
    ,@database_name =database_name
    ,@flags =flags
    FROM #tempSteps where id=@i


    EXEC
    msdb.dbo.sp_add_jobstep
    @job_id=@job_id,
    @step_name=@step_name,
    @step_id=@step_id,
    @cmdexec_success_code=@cmdexec_success_code,
    @on_success_action=@on_success_action,
    @on_success_step_id=@on_success_step_id,
    @on_fail_action=@on_fail_action,
    @on_fail_step_id=@on_fail_step_id,
    @retry_attempts=@retry_attempts,
    @retry_interval=@retry_interval,
    @os_run_priority=@os_run_priority,
    @subsystem=@subsystem,
    @command=@command,
    @database_name=@database_name,
    @flags=@flags

    set @i=@i+1
    end
    drop table #tempSteps

    -------------------------------------------------



    -------------------------------------------------
    --Цепляем Schedules на JOBs
    -------------------------------------------------

    Create Table #tempSchedules
    (
    id int identity
    ,job_ID uniqueidentifier
    ,Name NVarchar(128)
    ,enabled int
    ,freq_type int
    ,freq_interval int
    ,freq_subday_type int
    ,freq_subday_interval int
    ,freq_relative_interval int
    ,freq_recurrence_factor int
    ,active_start_date int
    ,active_end_date int
    ,active_start_time int
    ,active_end_time int
    )

    exec
    ('
    insert into #tempSchedules select
    job_id
    ,name
    ,enabled
    ,freq_type
    ,freq_interval
    ,freq_subday_type
    ,freq_subday_interval
    ,freq_relative_interval
    ,freq_recurrence_factor
    ,active_start_date
    ,active_end_date
    ,active_start_time
    ,active_end_time
    FROM '+@LinkedServ+'.msdb.dbo.sysjobschedules
    ')


    declare
    @JobID uniqueidentifier
    declare @Name NVarchar(128)
    declare @enabled int
    declare @freq_type int
    declare @freq_interval int
    declare @freq_subday_type int
    declare @freq_subday_interval int
    declare @freq_relative_interval int
    declare @freq_recurrence_factor int
    declare @active_start_date int
    declare @active_end_date int
    declare @active_start_time int
    declare @active_end_time int


    --declare @i int
    set @i=1
    while @i<=(select count(*) from #tempSchedules)
    begin


    select
    @JobID=job_id
    ,@Name =name
    ,@enabled =enabled
    ,@freq_type =freq_type
    ,@freq_interval =freq_interval
    ,@freq_subday_type =freq_subday_type
    ,@freq_subday_interval =freq_subday_interval
    ,@freq_relative_interval= freq_relative_interval
    ,@freq_recurrence_factor =freq_recurrence_factor
    ,@active_start_date =active_start_date
    ,@active_end_date =active_end_date
    ,@active_start_time =active_start_time
    ,@active_end_time=active_end_time
    FROM #tempSchedules where id=@i

    exec
    msdb.dbo.sp_add_jobschedule
    @job_id=@jobId,
    @name=@Name,
    @enabled=@enabled,
    @freq_type=@freq_type,
    @freq_interval=@freq_interval,
    @freq_subday_type=@freq_subday_type,
    @freq_subday_interval=@freq_subday_interval,
    @freq_relative_interval=@freq_relative_interval,
    @freq_recurrence_factor=@freq_recurrence_factor,
    @active_start_date=@active_start_date,
    @active_end_date=@active_end_date,
    @active_start_time=@active_start_time,
    @active_end_time=@active_end_time

    set @i=@i+1
    end


    drop table #tempSchedules

    --------------------------------



    -------------------------------------------------
    --Цепляем JOB'ы на сервер
    -------------------------------------------------
    exec
    ('
    insert into sysjobservers


    SELECT [job_id]
    ,[server_id]
    ,[last_run_outcome]
    ,[last_outcome_message]
    ,[last_run_date]
    ,[last_run_time]
    ,[last_run_duration]
    from '+@LinkedServ+'.msdb.dbo.sysjobservers
    ')
    ---------------------------------------------------

    <P< A>align=left> 

     

    14 ноября 2008 г. 8:16
    Отвечающий
  • Спасибо ! То, что нужно.

    14 ноября 2008 г. 9:45
  • Добрый день. Могу ли я считать наличие резервной копии БД msdb гарантией восстановление всех JOB'ов? То есть, если предположить, что рабочие JOB'ы будут отредактированы или удалены, то я восстановлю БД msdb из её резервной копии и мне будет счастье? Или есть ограничения и подводные камни? На данный момент регулярно бэкаплю и БД msdb (есть соответствующее задание), и тексты JOB'ов (вручную, через Script Job as).