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

Откуда:
Сообщений: 7
Приветствую, коллеги!

Начну вопрос с описания матчасти:
Итак, ВинСервер 2012R2, МССкуль 2012.
Около трёх десятков 1С-овских баз.
Каждый понедельник в 5 утра делается полный бэкап всех баз.
Каждый час с 10 до 19 делается бэкап транзакций.
Каждый день в 23:00 делается инкрементальный бэкап.
Каждый понедельник в 1:00 папка "SQLBackup" архивируется и сливается на NAS, после чего SQLBackup удаляется со всем содержимым и создаётся заново (ибо диск не резиновый), и в 5 утра в неё начинают падать бэкапы.

Кривовато, конечно, но работало.

Тут, в связи с конфликтом в конторе, понадобилось создать копию базы в состоянии на 27 июня (среда), дабы выцепить какой-то конкретный документ.

Я захожу на NAS с архивами и вижу полное отсутствие *.bak в нужном файле. Есть *.trn, есть *.inc (я поменял расширение инкрементальных архивов в процессе отладки), а собственно полных бэкапов нет. Как корова Ccleaner языком... Кстати, его там и нет.
В более ранних - всё на месте, в более поздних - тоже. А вот примерно за месяц - нет. Но это уже другой вопрос.

В итоге, самый свежий *.bak нашёлся от 11 числа. И, самый прикол в том, что восстановить удалось по инкрементам аж по 20 число, среду, т.е. полный бэкап уже три дня как должен был быть слит на NAS. А тем временем инкременты росли в объёме вплоть до воскресенья, 24 июня...

Так вот, к чему я. Допустим, я делаю полный бэкап базы от последней восстановленной даты. Пытаюсь скормить для восстановления следующий инкрементальный бэкап. Естественно, скуль ругается на прерванную цепочку LSN, понятно. Могу ли я как-то прописать в полный бэкап тот LSN, который будет принят инкрементальным, или, хотя бы, бэкапом транзакций (я так понимаю, их надо все последовательно накатывать?)?

АПДЕЙТ: пока верстался номер, за несколько попыток поднял базу по 24 число включительно. Потом был понедельник и инкременты сдулись со 170 до 5 гигов. Т.е. либо нужен отсутствующий полный бэкап, либо обманывать LSN.

Осталось вытянуть всего 2 дня, но эти дни очень важны...
30 июл 18, 21:44    [21616245]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
komrad
Member

Откуда:
Сообщений: 5244
Rotmistr_
В итоге, самый свежий *.bak нашёлся от 11 числа. И, самый прикол в том, что восстановить удалось по инкрементам аж по 20 число, среду, т.е. полный бэкап уже три дня как должен был быть слит на NAS.

это если он делался
Rotmistr_
А тем временем инкременты росли в объёме вплоть до воскресенья, 24 июня...

а он не делался

Rotmistr_
Так вот, к чему я. Допустим, я делаю полный бэкап базы от последней восстановленной даты. Пытаюсь скормить для восстановления следующий инкрементальный бэкап. Естественно, скуль ругается на прерванную цепочку LSN, понятно. Могу ли я как-то прописать в полный бэкап тот LSN, который будет принят инкрементальным, или, хотя бы, бэкапом транзакций (я так понимаю, их надо все последовательно накатывать?)?

АПДЕЙТ: пока верстался номер, за несколько попыток поднял базу по 24 число включительно. Потом был понедельник и инкременты сдулись со 170 до 5 гигов. Т.е. либо нужен отсутствующий полный бэкап, либо обманывать LSN.

перефразирую - парни, как получить неконсистентную базу?

https://technet.microsoft.com/en-us/library/2009.07.sqlbackup.aspx
Another misconception about full backups is that they only contain data. Both full backups and differential backups also contain some transaction log records so that the restored component (database, file, or filegroup) can be made transactionally consistent.
30 июл 18, 22:06    [21616256]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
invm
Member

Откуда: Москва
Сообщений: 9344
Rotmistr_
Т.е. либо нужен отсутствующий полный бэкап, либо обманывать LSN.
Либо уже почитать документацию.

Для восстановления на момент Х нужен полный бекап и непрерывная цепочка бекапов журнала транзакций.
И не важно сколько в этом промежутке было полных и дифференциальных бекапов.
Т.е. если есть полный от 11-го и все бекапы журнала с 11-го и далее, вы сможете восстановить БД на любой момент с 11-го до времени последнего бекапа журнала.
30 июл 18, 22:10    [21616261]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
Rotmistr_
Member

Откуда:
Сообщений: 7
komrad
перефразирую - парни, как получить неконсистентную базу?


Неконсистентную = кривую?

Теоретически между 23:00 воскресенья (последний инкремент) и 5:00 понедельника (полный бэкап) транзакций быть не должно, а если и были - нас они не особо волнуют.

Так есть возможность поднять бэкап без контроля целостности LSN?
30 июл 18, 22:20    [21616275]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
komrad
Member

Откуда:
Сообщений: 5244
invm
Для восстановления на момент Х нужен полный бекап и непрерывная цепочка бекапов журнала транзакций.
И не важно сколько в этом промежутке было полных и дифференциальных бекапов.

Вы какой из полных бекапов в "этом промежутке" имеете ввиду?
30 июл 18, 22:24    [21616280]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
invm
Member

Откуда: Москва
Сообщений: 9344
komrad
Вы какой из полных бекапов в "этом промежутке" имеете ввиду?
Любой, сделанный после того, который выбран базовым для последующего наката бекапов журнала.
Rotmistr_
Так есть возможность поднять бэкап без контроля целостности LSN?
Нет.
30 июл 18, 22:29    [21616286]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
komrad
Member

Откуда:
Сообщений: 5244
Rotmistr_
komrad
перефразирую - парни, как получить неконсистентную базу?


Неконсистентную = кривую?

да

Rotmistr_
Теоретически между 23:00 воскресенья (последний инкремент) и 5:00 понедельника (полный бэкап) транзакций быть не должно, а если и были - нас они не особо волнуют.

Так есть возможность поднять бэкап без контроля целостности LSN?

"что один человек построил, другой завсегда разобрать сможет" (с)



HEX-редактор никто не отменял
в возможность верю, но, подробностей не знаю
30 июл 18, 22:29    [21616287]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
komrad
Member

Откуда:
Сообщений: 5244
invm
komrad
Вы какой из полных бекапов в "этом промежутке" имеете ввиду?
Любой, сделанный после того, который выбран базовым для последующего наката бекапов журнала.

я тогда зря пользуюсь copy_only
30 июл 18, 22:30    [21616290]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
Rotmistr_
Member

Откуда:
Сообщений: 7
автор
Для восстановления на момент Х нужен полный бекап и непрерывная цепочка бекапов журнала транзакций.

Прямо таки непрерывная? Или Полный + Последний Инкрементальный + Цепочка Транзакций до Нужного Момента?

автор
Т.е. если есть полный от 11-го и все бекапы журнала с 11-го и далее, вы сможете восстановить БД на любой момент с 11-го до времени последнего бекапа журнала.

Ну явно последнего понедельничного бэкапа нет, т.к. инкрементальные резко "похудели". Собственно по воскресенье всё и восстановилось, хотя и непонятно как.
Последняя операция 1С от 22 июня, пятница, так что всё корректно.

Вопрос, как теперь прикрутить туда инкременты от 25 и 26 числа.
30 июл 18, 22:33    [21616297]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
Rotmistr_
Member

Откуда:
Сообщений: 7
автор
HEX-редактор никто не отменял
в возможность верю, но, подробностей не знаю


Во, спасибо. Хоть что-то ;-)
30 июл 18, 22:36    [21616303]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
invm
Member

Откуда: Москва
Сообщений: 9344
komrad
я тогда зря пользуюсь copy_only
Трудно сказать. Вы же не сказали для чего им пользуетесь :)
+
use master;
go

create database DBTest;
alter database DBTest set recovery full;
backup database DBTest to disk = 'C:\Windows\Temp\DBTest_full__01.bak' with init;
go

use DBTest;
go

create table dbo.t (v int);
insert into dbo.t values (1);
go

backup log DBTest to disk = 'C:\Windows\Temp\DBTest_tran__01.trn' with init;
go

insert into dbo.t values (2);
go

backup database DBTest to disk = 'C:\Windows\Temp\DBTest_full__02.bak' with init;
go

insert into dbo.t values (3);
go

backup log DBTest to disk = 'C:\Windows\Temp\DBTest_tran__02.trn' with init;
go

select * from dbo.t;
go

use master;
restore database DBTest from disk = 'C:\Windows\Temp\DBTest_full__01.bak' with replace, norecovery;
restore log DBTest from disk = 'C:\Windows\Temp\DBTest_tran__01.trn' with norecovery;
restore log DBTest from disk = 'C:\Windows\Temp\DBTest_tran__02.trn' with recovery;
go

use DBTest;
select * from dbo.t;
go

use master;
drop database DBTest;
go
30 июл 18, 22:58    [21616332]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
invm
Member

Откуда: Москва
Сообщений: 9344
Rotmistr_
Прямо таки непрерывная? Или Полный + Последний Инкрементальный + Цепочка Транзакций до Нужного Момента?
Непрерывная с момента полного (+ возможно дифф), который выбран базовым для восстановления.
30 июл 18, 23:03    [21616337]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2338
Rotmistr_,

если 23 и 24 точно никаких операций в базе не было то у всех бэкапов в этот промежуток FirstLSN и LastLSN будет совпадать. и при восстановлении их можно смело пропустить до первого у которого FirstLSN будет равен LastLSN с которого цепочка "заморозилась", а LastLSN будет уже новым. Но все-таки цепочка должна быть непрерывной.
А вот чтобы штатными средствами восстановить разорванную цепочку - не слышал.
Есть некоторые (полу)автоматические тулзы, которые это умеют, в т.ч. есть и фришные. Поищите по сети типа SQL Backup repair или что-то в этом духе. Подозреваю, что все сильно зависит от версии SQL еще ко всему прочему..
30 июл 18, 23:20    [21616352]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
Rotmistr_
АПДЕЙТ: пока верстался номер, за несколько попыток поднял базу по 24 число включительно. Потом был понедельник и инкременты сдулись со 170 до 5 гигов. Т.е. либо нужен отсутствующий полный бэкап, либо обманывать LSN.
Не думаю, что можно обмануть, в бакапе же копии страниц, и несогласованно старые страницы нельзя взять и скопировать в базу. То есть LSN - это не пустая формальность.

Если у вас сохранились бакапы логов (с 24 до 27), то можно просто восстановить логи.

Ну и переделать бакапирование, назначить другого ответственного. Надо же, "корова языком", это же важнейшая часть системы.
30 июл 18, 23:40    [21616367]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
Rotmistr_
Member

Откуда:
Сообщений: 7
Например:
+
автор
Date Time First Last Checkpoint Size
23.06.2018 18:00:46 2588000000611700001 2588000000635200001 2588000000174700001 388096
23.06.2018 23:08:41 2588000000767500157 2588000000774600001 2588000000767500157 175436800 - DIFF 23.06
24.06.2018 10:01:04 2588000000635200001 2588000000988400001 2588000000846200001 2092032
24.06.2018 11:00:47 2588000000988400001 2588000001011800001 2588000000846200001 388096
24.06.2018 12:00:38 2588000001011800001 2588000001036000001 2588000000846200001 388096
24.06.2018 13:00:36 2588000001036000001 2588000001059600001 2588000000846200001 388096
24.06.2018 14:00:33 2588000001059600001 2588000001083400001 2588000000846200001 388096
24.06.2018 15:00:31 2588000001083400001 2588000001108100001 2588000000846200001 388096
24.06.2018 16:00:32 2588000001108100001 2588000001131500001 2588000000846200001 388096
24.06.2018 17:00:43 2588000001131500001 2588000001155500001 2588000000846200001 388096
24.06.2018 18:01:53 2588000001155500001 2588000001179300001 2588000000846200001 388096
24.06.2018 23:13:44 2588000001314600019 2588000001316000001 2588000001314600019 175436800 - DIFF 24.06
30.07.2018 21:45:00 2588000001319700122 2588000001326100001 2588000001319700122 1295315968 - FULL after restore
25.06.2018 10:05:37 2588000001179300001 2588000001572900001 2588000001479400214 2288640


Кроме последних двух строк - цепочка непрерывная, от диффа до диффа, между ними транзакции, но непонятно, к чему привязаны транзакции - вот эти цифры (чекпойнт 2588000000846200001) откуда взялись? Насколько я понимаю, это привязка к какому-то из бэкапов должна быть?

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

А что если конвертнуть бэкап в SQL-файл и потом импортировать? Такое реально?

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

Спасибо всем заранее ;-)
31 июл 18, 00:25    [21616394]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
Rotmistr_
Member

Откуда:
Сообщений: 7
alexeyvg
Если у вас сохранились бакапы логов (с 24 до 27), то можно просто восстановить логи.


Поподробнее можно? Чьи логи? Где живут?

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


@#*^@!!! Работало же оно год почти без сбоев...
31 июл 18, 00:30    [21616399]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
Rotmistr_
alexeyvg
Если у вас сохранились бакапы логов (с 24 до 27), то можно просто восстановить логи.
Поподробнее можно? Чьи логи? Где живут?
Вот эти, если не удалили:
Rotmistr_
Каждый час с 10 до 19 делается бэкап транзакций.
31 июл 18, 00:36    [21616403]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
Rotmistr_,

Бакапы транзакций могут прерваться только при переводе базы из полного режима логирования.
Если вы не переводили, и если файлы сохранились, то можно накатить полный бакап, потом дифф бакап (если есть), а потом восстановить цепочку бакапов транзакций до нужного момента времени.
31 июл 18, 00:41    [21616406]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36965
alexeyvg
Бакапы транзакций могут прерваться только при переводе базы из полного режима логирования.
Или кто-то сделал куда-то бэкап лога. Или кто-то сделал куда-то полный бэкап без copy_only.

UPD. Хотя нет, вру, полный бэкап не ломает цепочку бэкапов лога, только диф-бэкапы ломает. А вот сбрасывать модель восстановления перед ребилдом индекса -- есть умельцы для 1с советовать.
UPD2. Историю снятых бэкапов вроде как еще не советовали смотреть.

Сообщение было отредактировано: 31 июл 18, 00:55
31 июл 18, 00:48    [21616407]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
Гавриленко Сергей Алексеевич
alexeyvg
Бакапы транзакций могут прерваться только при переводе базы из полного режима логирования.
Или кто-то сделал куда-то бэкап лога. Или кто-то сделал куда-то полный бэкап без copy_only.

UPD. Хотя нет, вру, полный бэкап не ломает цепочку бэкапов лога, только диф-бэкапы ломает. А вот сбрасывать модель восстановления перед ребилдом индекса -- есть умельцы для 1с советовать.
Сделал куда то бакап лога - это не "прервали цепочку", это "пролюбили бакап" :-)

Переводить в симпл - конечно, такое часто делают, даже по расписанию, начитавшись вредных советов.
Ну, тут уж как повезёт.
Да и вообще, они могут не хранить бакапы лога, это всё нужно проверять...
31 июл 18, 10:09    [21616779]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
Rotmistr_
Member

Откуда:
Сообщений: 7
Так, коллеги, либо кто-то плохо читает, либо я плохо объяснил.

Повторяю - после полного бэкапа я восстановил две недели через диффы, они же инкременты.
Дальше ни диффы, ни логи не накатываются - цепочка LSN прервана.

Вопрос в чём:
- Можно ли как-то принудительно накатить оставшиеся дни диффами или транзакциями, наплевав на LSN?
- Поправить его?
- Сконвертировать бэкапы в SQL и импортировать штатными средствами студии?

Спасибо.
31 июл 18, 13:33    [21617815]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36965
Rotmistr_
Повторяю - после полного бэкапа я восстановил две недели через диффы, они же инкременты.
Достаточно накатить последний было.

Rotmistr_
- Можно ли как-то принудительно накатить оставшиеся дни диффами или транзакциями, наплевав на LSN?
- Поправить его?
- Сконвертировать бэкапы в SQL и импортировать штатными средствами студии?

Сказали же, что нельзя.
31 июл 18, 13:39    [21617842]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли "хакнуть" LSN?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
Rotmistr_
Так, коллеги, либо кто-то плохо читает, либо я плохо объяснил.

Повторяю - после полного бэкапа я восстановил две недели через диффы, они же инкременты.
Дальше ни диффы, ни логи не накатываются - цепочка LSN прервана.
Про бакапы лога вы не писали "прервана цепочка LSN". Вы с этиим разберитесь, прервана она или нет, потому что бакапы лога - совсем другая тема, нежели дифф. бакапы.
Rotmistr_
Вопрос в чём:
- Можно ли как-то принудительно накатить оставшиеся дни диффами или транзакциями, наплевав на LSN?
- Поправить его?
Если у вас есть бакапы логов, и вы не переводили базу в симпл, то можно "накатить оставшиеся дни транзакциями, наплевав на LSN" - это штатный режим восстановления.

Диффами нельзя.
Поправить нельзя.
Rotmistr_
- Сконвертировать бэкапы в SQL и импортировать штатными средствами студии?
Ну, это в принципе можно, нештатным софтом, только ведь не из чего это делать - у вас же нет бакапов за 27-е, из чего вы будете "конвертировать бэкапы в SQL"?
Гавриленко Сергей Алексеевич
Rotmistr_
Повторяю - после полного бэкапа я восстановил две недели через диффы, они же инкременты.
Достаточно накатить последний было.
Да, дифф бакапы же не "инкременты", непонятно, зачем накатывать все дифф бакапы...
31 июл 18, 18:23    [21619102]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить