Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Восстановление базы данных из ldf-файла  [new]
777ser777
Member

Откуда:
Сообщений: 2
Добрый день!
Возможно ли выполнить восстановление базы имея:
1) MDF-файл на начальную дату (месячной давности);
2) LDF-файл на текущую дату.
Бэкап и шринк не делался. Если можно то какими средствами?
Спасибо.
9 июн 14, 12:55    [16141781]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
http://technet.microsoft.com/ru-ru/library/ms190440(v=sql.105).aspx
9 июн 14, 13:00    [16141811]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
а, пардон, не так понял
9 июн 14, 13:07    [16141858]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
msLex
Member

Откуда:
Сообщений: 7724
777ser777
Добрый день!
Возможно ли выполнить восстановление базы имея:
1) MDF-файл на начальную дату (месячной давности);
2) LDF-файл на текущую дату.
Бэкап и шринк не делался. Если можно то какими средствами?
Спасибо.

модель восстановления у базы какая была?
9 июн 14, 13:10    [16141879]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
777ser777
Member

Откуда:
Сообщений: 2
msLex
777ser777
Добрый день!
Возможно ли выполнить восстановление базы имея:
1) MDF-файл на начальную дату (месячной давности);
2) LDF-файл на текущую дату.
Бэкап и шринк не делался. Если можно то какими средствами?
Спасибо.

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


Full (полная) конечно!
9 июн 14, 14:31    [16142675]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
Восстанавливаете полный бэкап с norecovery, восстанавливаете бэкап журнала с recovery. Ваш LDF должен принадлежать той забэкапленной базе, разумеется, и иметь резервную копию.
9 июн 14, 16:50    [16144039]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
msLex
Member

Откуда:
Сообщений: 7724
777ser777
msLex
пропущено...

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


Full (полная) конечно!


Теоретически.

Можно попробовать просто приатачить mdf + ldf файл. Если база подцепится (я не знаю, что может помещать), весь непримененный (тот, что после последнего checkpoint-а) лог должен накатиться на базу, а с учетом того, что checkpoint LSN храниться в самой базе, то проблем возникнуть не должно.



Перед экспериментом желательно скопировать оба файла, дабы иметь еще одну попытку.
9 июн 14, 17:55    [16144588]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30701
Владислав Колосов
Восстанавливаете полный бэкап с norecovery, восстанавливаете бэкап журнала с recovery. Ваш LDF должен принадлежать той забэкапленной базе, разумеется, и иметь резервную копию.
Дык нету бакапа, в этом и прикол!
9 июн 14, 20:48    [16145145]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
msLex
Можно попробовать просто приатачить mdf + ldf файл. Если база подцепится (я не знаю, что может помещать), весь непримененный (тот, что после последнего checkpoint-а) лог должен накатиться на базу, а с учетом того, что checkpoint LSN храниться в самой базе, то проблем возникнуть не должно.
База может и подцепится, а вот лог накатываться то уже точно не будет. С таким же успехом можно просто восстановить mdf файл без ldf. Результат скорее всего будет тот же.
9 июн 14, 21:39    [16145293]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
msLex
Member

Откуда:
Сообщений: 7724
Mind
msLex
Можно попробовать просто приатачить mdf + ldf файл. Если база подцепится (я не знаю, что может помещать), весь непримененный (тот, что после последнего checkpoint-а) лог должен накатиться на базу, а с учетом того, что checkpoint LSN храниться в самой базе, то проблем возникнуть не должно.
База может и подцепится, а вот лог накатываться то уже точно не будет. С таким же успехом можно просто восстановить mdf файл без ldf. Результат скорее всего будет тот же.

по-чему такая уверенность?
по факту эта ситуация (mdf - месячной давности + "современный" ldf) ничем не отличается от ситуации когда месяц не делался чекпоинт а потом пристрелили процесс sql server-а
9 июн 14, 22:03    [16145397]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
msLex
по-чему такая уверенность?
Можно снять tail log backup, но накатить его будет не на что - полного бекапа нету. А если подцепить имеющийся mdf месячной давности и сделать полный бекап, то LSN'ы в нем будут уже совершенно другие.
9 июн 14, 23:42    [16145829]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
msLex
Member

Откуда:
Сообщений: 7724
invm
msLex
по-чему такая уверенность?
Можно снять tail log backup, но накатить его будет не на что - полного бекапа нету. А если подцепить имеющийся mdf месячной давности и сделать полный бекап, то LSN'ы в нем будут уже совершенно другие.


либо я вас не понимаю, либо вы меня.

предположим у нас есть база на момент времени t1, mdf и ldf "согласованны", "грязных" страниц нет, checkpoint lsn = последнему lsn в логе.

мы производим некое количество изменений, коммитем их которые, они попадают в лог, но из кеша на диск в mdf не сбрасываются, и того у нас получается mdf на момент t1 и ldf на момент времени t2.

в этот момент мы "жестко" ребутаем сервис, sql server по логу повторно накатит все изменения в mdf и принудительно сделает checkpoint

ситуация автора по сути ничем не отличается, только между t1 и t2 прошел месяц.
9 июн 14, 23:58    [16145890]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30701
msLex
ситуация автора по сути ничем не отличается, только между t1 и t2 прошел месяц.
По сути всё правильно, но сиквел не умеет востанавливать данные на дату ранее, чем сделан бакап.

mdf файл да, старый, но бакап то можно сделать только сейчас, вот и восстановить можно будет на момент "сейчас".

То есть у сиквела маловато возможностей, не предусмотрены операции, которые теоретически можно сделать и даже совсем несложно технически.

Разве что попробовать присоединить файл с включённым аттрибутом read-only, может сиквел не поменяет ему всякие LSN-ы, и сделать бакап...

А вообще это лишний раз напоминает о необходимости делать бакапы. Надеюсь, что 777ser777 из тех специалистов, которые потеряли данные из за отсутствия бакапа единственный раз в жизни, как и положено.
10 июн 14, 01:29    [16146175]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
o-o
Guest
нет, не прокатит.
проверяю так:

create database db8;
go

alter database db8
set recovery full;
go

backup database db8
to disk = 'Z:\Anna\_backups\hp\db8\db8_full.bak';
go

alter database db8
set offline;
go

/* copy .mdf to Z:\Anna\_backups\hp\db8, rename .ldf 

test it on another server:
USE [master]
GO
CREATE DATABASE [db8] ON 
( FILENAME = N'Z:\Anna\_backups\hp\db8\db8.mdf' )
 FOR ATTACH
GO

------------
File activation failure. The physical file name "C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\db8_log.LDF" may be incorrect.
New log file 'Z:\Anna\_backups\hp\db8\db8_log.LDF' was created.

drop database db8;
go

re-copy .mdf to Z:\Anna\_backups\hp\db8, rename .ldf
*/

alter database db8
set online;
go

use db8;
go

with cte as(
select number as n
from master..spt_values
where type = 'p' and number between 0 and 999)

select c1.n * 1000 + c2.n + 1  as n
into dbo.num1
from cte c1 cross join cte c2;
go

alter database db8
set offline;
go


/* copy .ldf to Z:\Anna\_backups\hp\db8*/

/* go to another server */
USE [master]
GO
CREATE DATABASE [db8] ON 
( FILENAME = N'Z:\Anna\_backups\hp\db8\db8.mdf' ),
( FILENAME = N'Z:\Anna\_backups\hp\db8\db8_log.LDF' )
 FOR ATTACH
GO


-----------------------------------
Msg 1813, Level 16, State 2, Line 1
Could not open new database 'db8'. CREATE DATABASE is aborted.
Msg 5125, Level 24, State 1, Line 1
File 'Z:\Anna\_backups\hp\db8\db8.mdf' appears to have been truncated by the operating system. Expected size is 3328 KB but actual size is 2304 KB.
Msg 3313, Level 21, State 2, Line 1
During redoing of a logged operation in database 'db8', an error occurred at log record ID (30:122:54). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database.


не могу сейчас объяснить, на какой момент он требует .mdf,
но файл не обрезан.
опыт был проведен 2 раза, файл копируется нормально.
для проверки в третий раз просто пробую сразу же приаттачить этот .mdf без .ldf,
и все с ним ok.

к концу выполнения заполнения таблицы чисел .mdf становится 18.688 Кб,
сервер же требует .mdf размером в 3328 KB
10 июн 14, 01:29    [16146176]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
o-o
Guest
стукнуло мне, что он хочет файл .mdf на момент после его первого автоприращения (былo 1 Мб в первом опыте),
повторяю эксперимент, задаю нач. размер для .mdf 5 Мб, автоприращение 2 Мб.
проделываю все вышеописанное, вылазит ошибка:

Msg 1813, Level 16, State 2, Line 1
Could not open new database 'db8'. CREATE DATABASE is aborted.
Msg 5125, Level 24, State 1, Line 1
File 'Z:\Anna\_backups\hp\db8\db8.mdf' appears to have been truncated by the operating system. Expected size is 6144 KB but actual size is 5120 KB.
Msg 3313, Level 21, State 2, Line 1
During redoing of a logged operation in database 'db8', an error occurred at log record ID (30:123:186). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database.


ну не знаю я, почему он на мегабайт больше ждет, нету идей, завтра еще подумаю,
а может кто-то знает и поделится соображениями.

судя по ошибке, он все же начинает накатывать,
что такое log record ID, что ему соответствует в выводе fn_dblog?
а то можно посмотреть в исходной базе в fn_dblog, что там за операция, на к-ой спотыкается
10 июн 14, 02:04    [16146218]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
msLex
Member

Откуда:
Сообщений: 7724
o-o
стукнуло мне, что он хочет файл .mdf на момент после его первого автоприращения (былo 1 Мб в первом опыте),
повторяю эксперимент, задаю нач. размер для .mdf 5 Мб, автоприращение 2 Мб.
проделываю все вышеописанное, вылазит ошибка:

Msg 1813, Level 16, State 2, Line 1
Could not open new database 'db8'. CREATE DATABASE is aborted.
Msg 5125, Level 24, State 1, Line 1
File 'Z:\Anna\_backups\hp\db8\db8.mdf' appears to have been truncated by the operating system. Expected size is 6144 KB but actual size is 5120 KB.
Msg 3313, Level 21, State 2, Line 1
During redoing of a logged operation in database 'db8', an error occurred at log record ID (30:123:186). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database.


ну не знаю я, почему он на мегабайт больше ждет, нету идей, завтра еще подумаю,
а может кто-то знает и поделится соображениями.

судя по ошибке, он все же начинает накатывать,
что такое log record ID, что ему соответствует в выводе fn_dblog?
а то можно посмотреть в исходной базе в fn_dblog, что там за операция, на к-ой спотыкается

Log rec id очень похож на обычный lsn (hex или dec непонятно), а каким образом отцеплялся mdf? Останавливался сервер или база детачилась?
10 июн 14, 08:47    [16146516]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
msLex
предположим у нас есть база на момент времени t1, mdf и ldf "согласованны", "грязных" страниц нет, checkpoint lsn = последнему lsn в логе.
...
ситуация автора по сути ничем не отличается, только между t1 и t2 прошел месяц.
Очень даже отличается - чекпоинты были. Так что если гипотетически предположить, что удалось присоединить БД из старого mdf и нового ldf, накат лога пойдет с момента последнего чекпоинта.
10 июн 14, 09:30    [16146706]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
в порядке эксперимента можно попробовать всякие разные сторонние тулзы
сам, правда, никогда не пользовался
10 июн 14, 09:34    [16146721]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
msLex
Member

Откуда:
Сообщений: 7724
invm
msLex
предположим у нас есть база на момент времени t1, mdf и ldf "согласованны", "грязных" страниц нет, checkpoint lsn = последнему lsn в логе.
...
ситуация автора по сути ничем не отличается, только между t1 и t2 прошел месяц.
Очень даже отличается - чекпоинты были. Так что если гипотетически предположить, что удалось присоединить БД из старого mdf и нового ldf, накат лога пойдет с момента последнего чекпоинта.

Lsn последнего чекпоинта храниться в странице 1:9 (boot page) самой базы. В mdf месячной давности и LSN чекпоинта месячной давности. Т.е. по идее, именно с этого lsn и должно начаться применения лога
Сейчас попробую провести эксперемент.
10 июн 14, 09:59    [16146840]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
msLex
Member

Откуда:
Сообщений: 7724
Проверил.

1. Создал базу с полной моделью восстановления.
2. Сделал полный бекап (до этого база по факту в simple )
3. Сделал detach.
4. Скопировал mdf
5. Сделал attach
6. Внес изменения в данные.
7. Сделал checkpoint
8. Сделал detach.
9. Подменил mdf на скопированную в 4-том пункте
10. Сделал attach

база подцепилась, но изменений пункта 6 нет, в checkpoint lsn в странице 1:9 храниться lsn завершения последнего checkpoint-а из лога.

видимо, либо в логе также где-то храниться информация о последнем checkpoint lsn, либо sql сканирует лог находит lsn последнего checkpoint-а.
можно "поизвращаться" дальше, найти место хранения checkpoint lsn в логе и в базе и подменить.
10 июн 14, 11:27    [16147486]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Восстановление базы данных из ldf-файла  [new]
sirsyslik
Member

Откуда:
Сообщений: 9
Владислав Колосов
Восстанавливаете полный бэкап с norecovery, восстанавливаете бэкап журнала с recovery. Ваш LDF должен принадлежать той забэкапленной базе, разумеется, и иметь резервную копию.


здравствуйте. у меня проблема аналогичная что и у топикстартера. а именно шифровальщик покушал MDF а последний актуальный бекап 3 недельной давности. но есть нетронутый шифровальщиком LDF

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

---Восстанавливаете полный бэкап с norecovery--- это мне относительно понятно
---восстанавливаете бэкап журнала с recovery--- я так понимаю, речь идет об отдельном бекапе LDF, если да как его получить из оригинального LDF?
18 мар 20, 11:30    [22101189]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
sirsyslik,

у Вас должна быть резервная копия журнала при условии, что база имеет полную модель восстановления.
18 мар 20, 12:18    [22101253]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
База данных в какой модели восстановления?
18 мар 20, 12:25    [22101262]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
sirsyslik
Member

Откуда:
Сообщений: 9
Гавриленко Сергей Алексеевич,

полная, файл журнала около 90гб, при том что сама база +-2гб. Шринк не производился ни разу.
19 мар 20, 16:03    [22102305]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Если базу не отсоединили от сервера, выполните Log tail backup. Это и будет ваш бэкап лога.
19 мар 20, 16:28    [22102337]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить