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

Откуда:
Сообщений: 49
Всем привет!
Подскажите пожалуйста, как написать запрос, который бы восстанавливал базу из последней резервной копии. Конкретно не понимаю каким образом можно найти в папке именно последний бэкап.
18 авг 14, 15:37    [16456952]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление последней копии  [new]
Glory
Member

Откуда:
Сообщений: 104751
chake
Конкретно не понимаю каким образом можно найти в папке именно последний бэкап.

Информация о бэкапах, находящихся в файле, получается с помощью команд
RESTORE HEADERONLY и RESTORE FILELISTONLY
18 авг 14, 15:40    [16456984]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление последней копии  [new]
aleks2
Guest
По дате файла.
18 авг 14, 15:40    [16456988]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление последней копии  [new]
chake
Member

Откуда:
Сообщений: 49
Glory
chake
Конкретно не понимаю каким образом можно найти в папке именно последний бэкап.

Информация о бэкапах, находящихся в файле, получается с помощью команд
RESTORE HEADERONLY и RESTORE FILELISTONLY

Спасибо, буду разбираться
18 авг 14, 15:44    [16457019]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление последней копии  [new]
chake
Member

Откуда:
Сообщений: 49
Glory
chake
Конкретно не понимаю каким образом можно найти в папке именно последний бэкап.

Информация о бэкапах, находящихся в файле, получается с помощью команд
RESTORE HEADERONLY и RESTORE FILELISTONLY


Это для того, чтобы найти бэкапы в файле, а как найти бэкапы в папке?
19 авг 14, 09:31    [16460239]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление последней копии  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
chake, по дате, написали же выше.
19 авг 14, 09:33    [16460251]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление последней копии  [new]
chake
Member

Откуда:
Сообщений: 49
Александр52
chake, по дате, написали же выше.

По дате это хорошо. Каким образом?
19 авг 14, 09:48    [16460347]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление последней копии  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
chake
Александр52
chake, по дате, написали же выше.

По дате это хорошо. Каким образом?

сортировкой по столбцу.
выбираешь самый свежий бэкап.
вообще какой то странный вопрос для DBA
19 авг 14, 09:56    [16460392]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление последней копии  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
chake
Это для того, чтобы найти бэкапы в файле, а как найти бэкапы в папке?
Выполнить предложенные инструкции для каждого файла в папке.
19 авг 14, 10:00    [16460414]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление последней копии  [new]
chake
Member

Откуда:
Сообщений: 49
Александр52
chake
пропущено...

По дате это хорошо. Каким образом?

сортировкой по столбцу.
выбираешь самый свежий бэкап.
вообще какой то странный вопрос для DBA

Приведите для примера кусок кода, если не трудно
19 авг 14, 10:07    [16460448]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление последней копии  [new]
BigAngryCat
Member

Откуда:
Сообщений: 6
chake,
не мое но может пригодится

-- 1 - Variable declaration
DECLARE @dbName sysname
DECLARE @backupPath NVARCHAR(500)
DECLARE @cmd NVARCHAR(500)
DECLARE @fileList TABLE (backupFile NVARCHAR(255))
DECLARE @lastFullBackup NVARCHAR(500)
DECLARE @lastDiffBackup NVARCHAR(500)
DECLARE @backupFile NVARCHAR(500)

-- 2 - Initialize variables
SET @dbName = Имя БД
SET @backupPath = Путь каталога с бэкапами

-- 3 - get list of files
SET @cmd = 'DIR /b ' + @backupPath

INSERT INTO @fileList(backupFile)
EXEC master.sys.xp_cmdshell @cmd

-- 4 - Find latest full backup
SELECT @lastFullBackup = MAX(backupFile) 
FROM @fileList 
WHERE backupFile LIKE '%.BAK' 
   AND backupFile LIKE @dbName + '%'

SET @cmd = 'RESTORE DATABASE ' + @dbName + ' FROM DISK = ''' 
       + @backupPath + @lastFullBackup + ''' WITH NORECOVERY, REPLACE'
PRINT @cmd

-- 4 - Find latest diff backup
SELECT @lastDiffBackup = MAX(backupFile) 
FROM @fileList 
WHERE backupFile LIKE '%.DBAK'
   AND backupFile LIKE @dbName + '%'
   AND backupFile > @lastFullBackup

-- check to make sure there is a diff backup
IF @lastDiffBackup IS NOT NULL
BEGIN
   SET @cmd = 'RESTORE DATABASE ' + @dbName + ' FROM DISK = ''' 
       + @backupPath + @lastDiffBackup + ''' WITH NORECOVERY'
   PRINT @cmd
   SET @lastFullBackup = @lastDiffBackup
END

-- 5 - check for log backups
DECLARE backupFiles CURSOR FOR 
   SELECT backupFile 
   FROM @fileList
   WHERE backupFile LIKE '%.TRN' 
   AND backupFile LIKE @dbName + '%'
   AND backupFile > @lastFullBackup

OPEN backupFiles 

-- Loop through all the files for the database 
FETCH NEXT FROM backupFiles INTO @backupFile 

WHILE @@FETCH_STATUS = 0 
BEGIN 
   SET @cmd = 'RESTORE LOG ' + @dbName + ' FROM DISK = ''' 
       + @backupPath + @backupFile + ''' WITH NORECOVERY'
   PRINT @cmd
   FETCH NEXT FROM backupFiles INTO @backupFile 
END

CLOSE backupFiles 
DEALLOCATE backupFiles 

-- 6 - put database in a useable state
SET @cmd = 'RESTORE DATABASE ' + @dbName + ' WITH RECOVERY'
PRINT @cmd
19 авг 14, 10:17    [16460504]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление последней копии  [new]
chake
Member

Откуда:
Сообщений: 49
BigAngryCat, благодарю
19 авг 14, 10:35    [16460603]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление последней копии  [new]
chake
Member

Откуда:
Сообщений: 49
BigAngryCat, именно то, что нужно, ещё раз спасибо)
19 авг 14, 12:52    [16461804]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление последней копии  [new]
guest12345
Guest
Опираться на аттрибуты файлов для определения последнего бэкапа не лучшая идея.
Необходимую для этого информацию лучше черпать из таблицы msdb.dbo.backupset.
19 авг 14, 13:11    [16461935]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить