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

Откуда: Kharkov
Сообщений: 117
Добрый день.
Есть задача, настроить автоматическое восстановление базы на резервном сервере MSSQL.
Схема следующая:
1. На рабочем сервере создаётся полный бекап базы.
2. Сделанный бекап базы по фтп заливается на резервный сервер (сервер далеко и не в одной сети с рабочим).
3. Собственно, необходимо настроить задание, которое будет на резервном сервере обновлять базу из свежего бекапа.

Проблематика:
получился скрипт след. содержания
RESTORE DATABASE [test] FROM DISK = N'E:\Backup\test\test_backup_2015_07_17_060006_8244321.bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE, STATS = 10
GO

проблема в том, что имя файл бекапа постоянно меняется, разная дата и id.(жирным)

Как сделать, что бы скрипт брал для восстановления, например, самый свежий файл(по дате) из папки E:\Backup\test\ ???
13 авг 15, 13:09    [18012749]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое восстановление базы на резервном сервере MSSQL  [new]
Maxx_UA
Guest
AntonS2

Как сделать, что бы скрипт брал для восстановления, например, самый свежий файл(по дате) из папки E:\Backup\test\ ???

Дожили... если не можете на T-SQL написать (xp_cmdschell +DSQL) то напишите на любом другом языке который знаете ... 2 команды
1. Найти самый свежий файл
2. Востановление БД

Абзац,куда мир катится ?
13 авг 15, 13:16    [18012795]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое восстановление базы на резервном сервере MSSQL  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
SELECT TOP(1) WITH TIES s.database_name, f.physical_device_name
FROM msdb.dbo.backupmediafamily f
JOIN msdb.dbo.backupset s ON f.media_set_id = s.media_set_id 
WHERE [type] = 'D'
ORDER BY ROW_NUMBER() OVER (PARTITION BY database_name ORDER BY backup_finish_date DESC)


список баз данных и путей их последних бекапов... но тут опять же нужно помнить что есть бекапы полные/дифы/лога... 'D' это полный... т.е. для Вашего случая...

думаю слепить скалярку с фильтром по базе для Вашего случая - это не сложно :)
13 авг 15, 13:22    [18012825]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое восстановление базы на резервном сервере MSSQL  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
так чуточку быстрее будет по плану выполнения....

SELECT t.database_name, t.physical_device_name
FROM (
	SELECT s.database_name, f.physical_device_name, RowNum = ROW_NUMBER() OVER (PARTITION BY database_name ORDER BY backup_finish_date DESC)
	FROM msdb.dbo.backupmediafamily f
	JOIN msdb.dbo.backupset s ON f.media_set_id = s.media_set_id 
	WHERE [type] = 'D'
) t
WHERE t.RowNum = 1
13 авг 15, 13:30    [18012871]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое восстановление базы на резервном сервере MSSQL  [new]
ApXyC
Member

Откуда: Пенза
Сообщений: 75
AlanDenton,

Лично я не понимаю, а как это поможет TC, если у него "сервер далеко и не в одной сети с рабочим"?
13 авг 15, 13:40    [18012940]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое восстановление базы на резервном сервере MSSQL  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Ответ - никак... проблему по поводу имени бекапа я описал как решить - запросом... А внутреннее устройство сети, что и куда потом копируется и прочие плюшки уж извините не ко мне.
13 авг 15, 13:44    [18012956]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое восстановление базы на резервном сервере MSSQL  [new]
ApXyC
Member

Откуда: Пенза
Сообщений: 75
AntonS2,
@ECHO OFF
for /f  %%I in ('dir /b /T:A /A:-D /O:-D *.bak') do (
sqlcmd -S . -Q "RESTORE DATABASE [develop] FROM DISK = N'%%~fI' WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE" -o resotre.log
EXIT
)
13 авг 15, 14:05    [18013069]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое восстановление базы на резервном сервере MSSQL  [new]
Maxx_UA
Guest
Вопрос к AntonS2
а по чему ресторе с NORECOVERY ?
Да и зачем NOUNLOAD ?
Вы своей командой чего в итоге хотите добиться то ?
13 авг 15, 14:11    [18013112]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое восстановление базы на резервном сервере MSSQL  [new]
AntonS2
Member

Откуда: Kharkov
Сообщений: 117
Maxx_UA
Вопрос к AntonS2
а по чему ресторе с NORECOVERY ?
Да и зачем NOUNLOAD ?
Вы своей командой чего в итоге хотите добиться то ?

NORECOVERY - для того, что бы резервная база была на готове принять в нужный момент дифференциальный бекап.
Дифференциальные бекапы тоже сливаются на резервный сервер, но их я накачу руками, в момент когда нужно будет перейти на работу с резервным сервером (на случай выхода их строя основного сервера)
По поводу NOUNLOAD , вы правы это лишнее. Убрал.

Т.е. все эти манипуляции с автоматическим восстановлением базы, нацелены на сокращение времени на восстановление в случае глобальных проблем с основным сервером.
13 авг 15, 15:20    [18013637]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое восстановление базы на резервном сервере MSSQL  [new]
AntonS2
Member

Откуда: Kharkov
Сообщений: 117
AlanDenton
SELECT TOP(1) WITH TIES s.database_name, f.physical_device_name
FROM msdb.dbo.backupmediafamily f
JOIN msdb.dbo.backupset s ON f.media_set_id = s.media_set_id 
WHERE [type] = 'D'
ORDER BY ROW_NUMBER() OVER (PARTITION BY database_name ORDER BY backup_finish_date DESC)


список баз данных и путей их последних бекапов... но тут опять же нужно помнить что есть бекапы полные/дифы/лога... 'D' это полный... т.е. для Вашего случая...

думаю слепить скалярку с фильтром по базе для Вашего случая - это не сложно :)


да это похоже не мой случай. резервный сервер ничего не знает про msdb.dbo.backupset f.media_set_id и s.media_set_id. Бекапы ведь делаются не на нём.
13 авг 15, 15:24    [18013662]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое восстановление базы на резервном сервере MSSQL  [new]
AntonS2
Member

Откуда: Kharkov
Сообщений: 117
ApXyC
AntonS2,
@ECHO OFF
for /f  %%I in ('dir /b /T:A /A:-D /O:-D *.bak') do (
sqlcmd -S . -Q "RESTORE DATABASE [develop] FROM DISK = N'%%~fI' WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE" -o resotre.log
EXIT
)

Спасибо! Объясните этот кусок
@ECHO OFF
for /f %%I in ('dir /b /T:A /A /O *.bak') do (
в какой папке он ищет *.bak ?
13 авг 15, 15:38    [18013744]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое восстановление базы на резервном сервере MSSQL  [new]
ApXyC
Member

Откуда: Пенза
Сообщений: 75
AntonS2,

в текущей.
+ Выдержка из DIR /?

/A          Отображение файлов с указанными атрибутами.
  атрибуты     D  Каталоги.            R  Файлы, доступные только для чтения.
               H  Скрытые файлы.       A  Файлы, готовые для архивирования.
               S  Системные файлы.     I  Файлы с неиндексированным содержимым.
               L  Точки повторной обработки.  -  Префикс "-" имеет значение НЕ.
/B          Вывод только имен файлов.
/O          Сортировка списка отображаемых файлов.
  порядок      N  По имени (по алфавиту)
  сортировки   S  По размеру (начиная с минимального)
               E  По расширению (по алфавиту)
               D  По дате и времени (начиная с самого старого)
               G  Начать список с каталогов.  -  Префикс "-" обращает порядок.
/T          Выбор поля времени для сортировки.
  время       C  Создание.
              A  Последнее использование.
              W  Последнее изменение.


for /f - цикл по каждой строке возвращаемой dir, по этому после sqlcmd говорим exit, иначе восстановит все бекапы по очереди.
13 авг 15, 17:34    [18014548]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое восстановление базы на резервном сервере MSSQL  [new]
AntonS2
Member

Откуда: Kharkov
Сообщений: 117
ApXyC,

Спасибо за совет, очень помогли.
13 авг 15, 17:57    [18014655]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить