Windows Live ID Добро пожаловать на IT Community 
Регистрация

Стань частью ИТ-сообщества

Хочешь найти своих друзей, коллег или просто интересных людей со схожими интересами в ИТ-области? Не теряй время...

Присоединяйся к нам!

Максим Родькин

Алекасандр Токарь

Сергей Дериглазов


Все участники

Перенос JOB`ов и DTS-пакетов с MS SQL Server 2000 на MS SQL Server 2005/2008 

В очередной раз получив вопрос, как быстро перенести большой объём Job`ов и DTS-пакетов с MS SQL Server 2000 на MS SQL Server 2005/2008, решил выложить скрипт, который я писал в своё время при переносе БД на, ещё тогда, новый SQL Server 2005. Может кому-то ещё он будет полезен.

 

 

 

 

 

 

 

--Для начала к нашему новому серверу БД линкуем старый сервер MS SQL Server 2000

--на котором расположены наши ДЖОБы и ДТСы

--Переходим в контекст БД msdb

USE msdb

DECLARE @LinkedServ NVARCHAR(128)

SET @LinkedServ=N'MyLinkedServer2000'--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

 

 

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

')

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

 

 

 

 

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

--ПЕРЕНОС DTS-ов

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

INSERT INTO msdb.dbo.sysdtspackages

SELECT [name]

,[id]

,[versionid]

,[description]

,[categoryid]

,[createdate]

,[owner]

,[packagedata]

,[owner_sid]

,0 FROM MyLinkedServer2000.msdb.dbo.sysdtspackages

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

Опубликовано 20 января 2009 г. 17:29 в MSSQL

Рейтинг2
Просмотров: 2894
Ответов: 0

Комментарий

 
Комментариев нет
Анонимные комментарии не разрешены
RSS

Блог

Календарь

«Январь 2009 г.»
ПнВтСрЧтПтСбВс
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

Категории

Синдикация

Виртуальные сообщества

Сообщества сайтов (тэгами)