Иногда так получается, что сервера стареют или умирают, а задачи ими исполняемые приходится перекладывать на плечи новобранцев. Так произошло и с сервером централизованного бекапирования в одной из компаний в которой я работал. Сервер перестал справляться с возросшей на него нагрузкой и потребовалась замена. Библиотеки забитые лентами с бекапами под завязку нужно было перенести на новый сервер с новым именем.
Пост писался в 2007 году, поэтому часть ссылок может быть битая
После длительного гугления всяких возможных вариантов решений было найдено следущее:
Переустановка веритаса с сохранением пользовательских настроек.Перенос информации о джобах, отчетах и прочей фигне Первое сразу отпало, т.к. имя сервера меняется. Попробовали второе, конфигурацию слили и залили на новый сервер. "О чудо!" - заорали мы. Джобы появились и восстановился список Media Sets. Настало время сделать "Inventory" на библиотеках. Inventory радостно сообщил, что нашел 48 новых кассет с разной степенью заполнения и предложил на них писать пока он не устанет. Inventory конечно-же не знал, что на этих кассетах лежит бекап за год. Попытка перенести BEDB со старого сервера на новый привела к полному повисанию Backup Exec при старте сервисов. Мы долго сидели и чесали репу как бы всё вернуть назад. Мануала по переносу данных о расположении кассет в медиасетах в сети не было. Тут нам под руку попался наш DBA. Ловкими и отточенными движениями рук в Profiler было вычислено куда же всё таки Veritas запихал данные о кассетках.
Решили рискнуть и перенести старые таблицы с кассетами в новую базу.
Все операции производятся на машине с заново установленным Veritas Backup Exec. Создаём пользователя veritas с паролем veritas на старом сервере с ролью dbo в базу BEDB. На новой машине нужно создать Linked Server со старого сервера для импорта таблиц.
Получилось два вот таких скрипта:
use master
-- Создание Linked сервера
-- OLDServer старое имя сервера.
-- NEWServer новое имя сервера.
GO
IF EXISTS (SELECT srvname FROM master.dbo.sysservers srv WHERE srv.srvid != 0 AND srv.srvname = N'OLDServer')
EXEC master.dbo.sp_dropserver @server = N'OLDServer', @droplogins = 'droplogins'
GO
EXEC master.dbo.sp_addlinkedserver @server = N'OLDServer', @provider=N'SQLOLEDB', @datasrc=N'OLDServer\bkupexec' ,@catalog=N'BEDB',@srvproduct= 'SQL2000'
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'OLDServer',@useself=N'False',@locallogin=NULL
,@rmtuser=N'veritas',@rmtpassword='veritas'
GO
EXEC master.dbo.sp_serveroption @server=N'OLDServer', @optname=N'collation compatible', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'OLDServer', @optname=N'data access', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'OLDServer', @optname=N'dist', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'OLDServer', @optname=N'pub', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'OLDServer', @optname=N'rpc', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'OLDServer', @optname=N'rpc out', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'OLDServer', @optname=N'sub', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'OLDServer', @optname=N'dpub', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'OLDServer', @optname=N'connect timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'OLDServer', @optname=N'collation name', @optvalue=null
EXEC master.dbo.sp_serveroption @server=N'OLDServer', @optname=N'lazy schema validation', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'OLDServer', @optname=N'query timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'OLDServer', @optname=N'use remote collation', @optvalue=N'false'
GO
тормозим сервисы Veritas Backup Exec и пошагово выполняем нижеследующий скрипт.
--1) проверяем данные mediaset
select * from dbo.mediaset
select * from oldserver.bedb.dbo.mediaset
--2) чтобы очистить таблицу mediaset надо сначала очистить media
delete from dbo.media
delete from dbo.mediaset
--3) заливаем данные mediaset
insert into dbo.mediaset
select *
from oldserver.bedb.dbo.mediaset
--4) проверяем данные mediaset
select * from dbo.mediaset
select * from oldserver.bedb.dbo.mediaset
--5) проверяем данные media
select * from oldserver.bedb.dbo.media
--6) заливаем данные media
insert into dbo.media
select *
from oldserver.bedb.dbo.media
--7) проверяем данные foreignmedia
select * from dbo.foreignmedia
select * from oldserver.bedb.dbo.foreignmedia
--8) заливаем данные foreignmedia
insert into dbo.foreignmedia
select *
from oldserver.bedb.dbo.foreignmedia
--9) проверяем данные mediaFamilySequence_90
select * from dbo.mediaFamilySequence_90
select * from oldserver.bedb.dbo.mediaFamilySequence_90
-- при необходимости можно перезалить
--10) проверяем данные mediaLabel
select * from dbo.mediaLabel
select * from oldserver.bedb.dbo.medialabel
-- при необходимости можно перезалить
После того как всё закончилось, берем папку c:\Program Files\VERITAS\Backup Exec\NT\Catalogs со старого сервера и заливаем на новый в туже самую папку. Стартуем Backup Exec. Первый старт с новыми таблицами будет дольше чем обычно(примерно 30 секунд). В папке Catalogs хранится содержимое кассет, если не переносить список кассет на новый сервер, каталоги будут бесполезны и придется заново каталожить все библиотеки.
Идем в Media -> Media Sets и смотрим как наши кассетки распределились по медиасетам.
Если всё хорошо идем в настройку Джобов и восстанавливаем Notification настройки для каждого джоба.
Пробуем запустить какой-нибудь бекап маленький, предварительно создав и удалив restore job для контроля правильности переноса каталогов(должны быть видны медиасеты и ресурсы которые бекапились).
Оставляем систему на ночку в режиме ежедневного бекапа и с утра смотрим на ошибки. Исправляем ошибки и идем за пивом :)
(C) Aborche 2009