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

Откуда:
Сообщений: 5
Здравствуйте.

При работе базы данных в течение длительного периода (около 2х лет) имела место ошибка, приводящая к потере небольшой порции данных при определенных обстоятельствах. Теперь эти утерянные записи хочется восстановить. Все это время на базе делались дифференциальные бэкапы с периодом в 1 день (BACKUP LOG), соответственно, базу можно по ним восстановить на любой момент времени. Однако это ничего не дает, т. к. потерянные записи размазаны по всему упомянутому промежутку времени.

Используя информацию из блога Paul Randall (http://sqlskills.com/BLOGS/PAUL/), из этой странной PDF-ки https://www.blackhat.com/presentations/bh-usa-07/Fowler/Presentation/bh-usa-07-fowler.pdf и другие обрывочные сведения, выданные гуглом, удалось написать код, который извлекает необходимые данные из вывода fn_dblog().

Теперь к проблеме. Если бы бекапы лога не делались, то весь лог транзакций был бы в базе и, запустив своё творчество, я мог бы сразу получить нужную информацию. Однако после бекапа лог усекается.

Я предположил, что если восстановить full бекап базы двухлетней давности, а потом накатить на него все файлы бекапа лога, то данные их них попадут в ldf файл, он вырастит, вместив в себя все транзакции за эти два года (то что мне ну;но!). Однако, все не так. При выполнении RESTORE LOG .ldf файл начинает расти, но данные автоматически очищаются. После выполнения (RESTORE LOG) fn_dblog() все равно возвращает практически пустой лог.

Можно ли как-то восстановить полный ldf файл из бекапов лога? (надо как-то отключить удаление устаревших VLF) Или может можно как-то по другому решить проблему... Надеюсь на вашу помощь.
1 дек 11, 16:31    [11690816]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление лога транзакций из бекапа (именно лога а не базы по логу)  [new]
Glory
Member

Откуда:
Сообщений: 104751
spacistor
Я предположил, что если восстановить full бекап базы двухлетней давности, а потом накатить на него все файлы бекапа лога, то данные их них попадут в ldf файл, он вырастит, вместив в себя все транзакции за эти два года (то что мне ну;но!). Однако, все не так.

Ваше предположение ошибочно

spacistor
Можно ли как-то восстановить полный ldf файл из бекапов лога?

Как вы себе это представляете, если после ваших бэкапов лога освобожденные VLF-ы использовались заново и попадали в другие бэкапы ?
1 дек 11, 16:35    [11690839]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление лога транзакций из бекапа (именно лога а не базы по логу)  [new]
spacistor
Member

Откуда:
Сообщений: 5
А есть ли вообще какой-то способ считать записи лога, содержащиеся в файле бекапа лога?
1 дек 11, 16:47    [11690938]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление лога транзакций из бекапа (именно лога а не базы по логу)  [new]
Glory
Member

Откуда:
Сообщений: 104751
spacistor
А есть ли вообще какой-то способ считать записи лога, содержащиеся в файле бекапа лога?

Это же файл.
Если знаете формат, то считать можно хоть в Notepad-е
1 дек 11, 16:48    [11690947]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление лога транзакций из бекапа (именно лога а не базы по логу)  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
spacistor, вы можете задействовать опцию standby команды restore для поэтапного восстановления БД и вытаскивания нужных данных.
1 дек 11, 17:14    [11691195]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление лога транзакций из бекапа (именно лога а не базы по логу)  [new]
spacistor
Member

Откуда:
Сообщений: 5
>Если знаете формат, то считать можно хоть в Notepad-е

хе, если бы я знал формат, я бы не задавал этого вопроса. Формат файла - закрытая информация. Microsoft кажется даже продает лицензию на неё. Что-то типа "Microsoft SQL Server On-Disc structures document". Хотелось бы не файл читать, а воспользоваться какими-нибудь ф-циями сервера, пускай даже не очень документированными (как тот же fn_dblog()). Читать файл - это последнее за что возьмусь, т. к. там хакать придется всерьез :(

>spacistor, вы можете задействовать опцию standby команды restore для поэтапного восстановления БД и вытаскивания нужных данных.

знаю, этот вариант мне не подходит. т. к. появление данных и их потеря происходили многократно в разные неизвестные моменты времени. То есть непонятно на какой момент времени восстанавливать базу. Единственный вариант - восстанавливать последовательно с маленьким шагом по времени, но от него пришлось отказаться - получается неприемлемо долго.
1 дек 11, 18:32    [11691824]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление лога транзакций из бекапа (именно лога а не базы по логу)  [new]
Glory
Member

Откуда:
Сообщений: 104751
spacistor
Хотелось бы не файл читать, а воспользоваться какими-нибудь ф-циями сервера, пускай даже не очень документированными (как тот же fn_dblog()). Читать файл - это последнее за что возьмусь, т. к. там хакать придется всерьез :(

Ну так восстановите лог и читайте его себе на здоровье через fn_dblog()
1 дек 11, 18:34    [11691833]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление лога транзакций из бекапа (именно лога а не базы по логу)  [new]
spacistor
Member

Откуда:
Сообщений: 5
Glory, я же писал что лог восстановить НЕ ПОЛУЧАЕТСЯ. Restore LOG изменяет состояние базы (mdf файлов) но элементарные операции, извлекаемые из лог файла после применения к базе сразу (или не совсем сразу, но почти сразу) удаляются, а не заносятся в лог. Потому fn_dblog() их не возвращает. Вот я и спрашиваю КАК мне восстановить сам лог из файлов...
1 дек 11, 20:20    [11692396]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление лога транзакций из бекапа (именно лога а не базы по логу)  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Есть такой продукт -- ApexSQL Log
В адвансед фичах у него:
Transaction log backup support
Read not just the online log or detached LDFs but transaction log backups too
1 дек 11, 20:28    [11692433]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление лога транзакций из бекапа (именно лога а не базы по логу)  [new]
лорпа
Guest
spacistor,

наверное, можно работать только с одной частью лога (от бэкапа до бэкапа)

накатить один, посмотреть его lsn's, посмотреть что нужно и
накатить другой...
1 дек 11, 20:41    [11692478]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление лога транзакций из бекапа (именно лога а не базы по логу)  [new]
spacistor
Member

Откуда:
Сообщений: 5
лорпа,
Даже так нельзя. он удаляет бОльшую часть. Когда ресто лог заканчивается, уже не хватает.

invm,
Сторонние продукты по-моему с 2008 не очень совместимы :( По крайней мере Lumigent у меня не заработал. Попробую и этот отпишусь.
1 дек 11, 21:03    [11692553]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление лога транзакций из бекапа (именно лога а не базы по логу)  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
spacistor
invm,
Сторонние продукты по-моему с 2008 не очень совместимы :( По крайней мере Lumigent у меня не заработал. Попробую и этот отпишусь.
В том же даташите заявлена поддержка всех версий, вплоть до R2. Lumigent мертвый продукт, а этот пока живой.
1 дек 11, 21:21    [11692602]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить