Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 restore database сразу из нескольких файлов bakup  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Добрый день !!! Стоит задача перенести БД с одного сервера на другой, причём сделать так, чтобы это смог осуществить удалённо человек не знакомый с MS SQL. То есть, я даю ему скрипт который он запускает на исходном сервере в cmd:

osql.exe -E -S -Q"exec sp_MSforeachdb 'if ''?'' not in (''tempdb'', ''model'',''master'') backup database ? to disk=''D:\?.dat'' with init'"

На выходе имеем backup всех нужных нам БД, затем тупо копируем их на целевой сервер, далее сталкиваемся с такой проблемой, что надо сделать скрипт который позволял бы на новом сервере сделать restore database сразу всех bak файлов в определённом каталоге...наведите хотя бы на мысль как осуществить, буду весь признателен за любую помощь !!! Заранее спасибо !!! (ms sql 2000sp4)
11 янв 12, 13:52    [11884922]     Ответить | Цитировать Сообщить модератору
 Re: restore database сразу из нескольких файлов bakup  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
xp_dirtree для получения файлов в директории, далее или парсинг по именам, или получение информации о том, что в бэкапе через restore headeronly.
11 янв 12, 14:15    [11885231]     Ответить | Цитировать Сообщить модератору
 Re: restore database сразу из нескольких файлов bakup  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Гавриленко Сергей Алексеевич
xp_dirtree для получения файлов в директории, далее или парсинг по именам, или получение информации о том, что в бэкапе через restore headeronly.
ОК...спасибо, но у меня уже такая мысль разродилась....самую малость осталось...
1) Создаём на целевом сервере пустые новые БД с именами БД исходного сервера:
osql.exe -E -S -Q"exec sp_MSforeachdb 'if ''?'' not in (''tempdb'', ''model'',''master'',''msdb'') create database ?'"
2) Ресторим БД используя цикл созданных пустых БД, которые по именам аналогичны исходному серверу:
exec sp_MSforeachdb 'if ''?'' not in (''tempdb'', ''model'',''master'') restore database ? from disk = ''<путь куда скинули>\?.dat'' WITH REPLACE'
Проверил всё работает, проблемка за малым...где жирным выделено используется подключение с исходного сервера на него же, то бишь он ругается, что естественно все БД созданы уже...то есть вместо жирного надо как-то организовать коннект на целевой сервер, чтобы там скрипт отработал создание БД.
11 янв 12, 14:51    [11885534]     Ответить | Цитировать Сообщить модератору
 Re: restore database сразу из нескольких файлов bakup  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Зачем создавать "пустые новые БД"?
11 янв 12, 15:05    [11885670]     Ответить | Цитировать Сообщить модератору
 Re: restore database сразу из нескольких файлов bakup  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Гавриленко Сергей Алексеевич
Зачем создавать "пустые новые БД"?

чтобы по ним на целевом сервере отрабатывала недокументированная хранилка sp_MSforeachdb, пробегала по ним и делала restore database + я так понимаю что для рестора всё равно нужны пустые БД с аналогичными именами, коих на целевом сервере нету. А так как их ну очень много(около 100), то
osql.exe -E -S"<имя целевого сервера>" -Q"create database <имя БД>" надо как-то автоматизировать
11 янв 12, 15:24    [11885893]     Ответить | Цитировать Сообщить модератору
 Re: restore database сразу из нескольких файлов bakup  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavgreengo
чтобы по ним на целевом сервере отрабатывала недокументированная хранилка sp_MSforeachdb, пробегала по ним и делала restore database

А откуда возьмется список восстаналиваемых баз то ?

stavgreengo
я так понимаю что для рестора всё равно нужны пустые БД с аналогичными именами, коих на целевом сервере нету.

команде restore базы не нужны
11 янв 12, 15:28    [11885939]     Ответить | Цитировать Сообщить модератору
 Re: restore database сразу из нескольких файлов bakup  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Glory
stavgreengo
чтобы по ним на целевом сервере отрабатывала недокументированная хранилка sp_MSforeachdb, пробегала по ним и делала restore database

А откуда возьмется список восстаналиваемых баз то ?

Так вот для этого и надо создать эти самые пустые БД на целевом сервере...

З.Ы.: может я конечно извращаюсь, подскажите тогда альтернативу...сама задача мне звучит так "нужна 2ва скрипта(запустить на одном, перетащить бэкапы, запустить на другом сервере) или 1(всё с одного сервера), но чтобы запускались из cmd и чтобы перенёс имеющиеся все БД с одного сервера на абсолютно свеже поставленный другой сервер"
11 янв 12, 15:36    [11886023]     Ответить | Цитировать Сообщить модератору
 Re: restore database сразу из нескольких файлов bakup  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavgreengo
Так вот для этого и надо создать эти самые пустые БД на целевом сервере...

Создать сколько ? Как проверить, что создано именно столько, сколько нужно, ни больше, ни меньше ?
Как проверить, что созданы базы с правильными именами ?
11 янв 12, 15:40    [11886051]     Ответить | Цитировать Сообщить модератору
 Re: restore database сразу из нескольких файлов bakup  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
stavgreengo
подскажите тогда альтернативу...сама задача мне звучит так "нужна 2ва скрипта(запустить на одном, перетащить бэкапы, запустить на другом сервере) или 1(всё с одного сервера), но чтобы запускались из cmd и чтобы перенёс имеющиеся все БД с одного сервера на абсолютно свеже поставленный другой сервер"


можно копать в сторону генерации запросов. вот грубая заготовка, насчёт путей восстановления придётся думать и допиливать:
select 
	'backup database ' + QUOTENAME(sdb.name) + ' to disk = ''q:\' + sdb.name + '.bak''' backupsql,
	'restore database ' + QUOTENAME(sdb.name) + ' from disk = ''z:\' + sdb.name + '.bak''' restoresql
from sys.databases sdb
where name not in ('master', 'model', 'msdb')
11 янв 12, 15:52    [11886184]     Ответить | Цитировать Сообщить модератору
 Re: restore database сразу из нескольких файлов bakup  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Glory
stavgreengo
Так вот для этого и надо создать эти самые пустые БД на целевом сервере...

Создать сколько ? Как проверить, что создано именно столько, сколько нужно, ни больше, ни меньше ?
Как проверить, что созданы базы с правильными именами ?
Ну например вот так...
DECLARE @template  NVARCHAR(MAX) 
set @template = 
'CREATE DATABASE [PKI] ON  PRIMARY 
( NAME = N''PKI'', FILENAME = N''C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\PKI.mdf'' , SIZE = 16697344KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )  

 LOG ON 
( NAME = N''PKI_log'', FILENAME = N''C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\PKI_log.ldf'' , SIZE = 5605504KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)'

DECLARE @curscript  NVARCHAR(MAX) 
set @curscript = '' 
SELECT @curscript = @curscript + REPLACE(@template,'PKI',name) + CHAR(13) 
FROM [master].[sys].[databases] 
where name not in 
( 
'master', 
'tempdb', 
'model' 
) 

print @curscript
11 янв 12, 16:12    [11886377]     Ответить | Цитировать Сообщить модератору
 Re: restore database сразу из нескольких файлов bakup  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavgreengo
Ну например вот так...

Вы вопрос точно понимаете ?
Что случится, если для базы не окажется бэкапа ?
11 янв 12, 16:28    [11886579]     Ответить | Цитировать Сообщить модератору
 Re: restore database сразу из нескольких файлов bakup  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Glory
stavgreengo
Ну например вот так...

Вы вопрос точно понимаете ?
Что случится, если для базы не окажется бэкапа ?

да по идеи вроде всё должно сработать...

Так-с...что мы имеем на выхлопе...1) cmd скрипт бэкапов всех нужных БД в указанный каталог 2) Скрипт T-SQL результатом работы которого будет другой скрипт, который при исполнении на целевом сервере создаст все нужные пустые БД в точности, как на исходном сервере 3) cmd скрипт который сделает рестор на целевом сервере из указанного каталога куда скопируются бэкапы.

Для полного счастья надо только организовать работу 2-го скрипта через cmd и вывести результаты его работы в bat файл, для последующего исполнения через тот же cmd на целевом сервере.

Вообщем, полное извращенство, но по сброшенным скриптам и небольшой консультации по телефону незнающему человеку удалённо объяснить будет не сложно, как, что сделать, чтобы сервер переехал.

З.Ы.: собственно какие задачи, такие и решения. Задача была "организовать переезд сервера через cmd, чтобы человек на другом конце провода как не знал что такое management studio так и не знал бы дальше, вообще о её существовании" :)
11 янв 12, 16:37    [11886672]     Ответить | Цитировать Сообщить модератору
 Re: restore database сразу из нескольких файлов bakup  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavgreengo
З.Ы.: собственно какие задачи, такие и решения. Задача была "организовать переезд сервера через cmd, чтобы человек на другом конце провода как не знал что такое management studio так и не знал бы дальше, вообще о её существовании" :)

Что мешает извлекать информацию о базе собственно бэкапа ?
11 янв 12, 16:43    [11886740]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить