Имя: Пароль:
IT
Админ
Для чего нужно делать бекап журнала транзакций SQL и нужно ли его вообще делать?
,
0 Обфускация
 
03.04.19
14:52
Для чего нужно делать бекап журнала транзакций SQL и нужно ли его вообще делать?
1 Cyberhawk
 
03.04.19
14:53
Чтоб он сбросил накопленный груз в основной файл
2 Джинн
 
03.04.19
14:57
(1) Он "сбрасывает груз" по завершению транзакции. Точнее даже не сбрасывает, т.к. запись идет параллельно, но то уже нюансы. Тут несколько другое.
3 Джинн
 
03.04.19
14:57
(0) Модель резервирования какая?
4 Обфускация
 
03.04.19
14:59
(3)
полная
5 Timon1405
 
03.04.19
15:00
6 trad
 
03.04.19
15:00
(0) чтобы рестор сделать на любой момент времени (условно)
7 MyNick
 
03.04.19
15:03
(0) Если база огромная, то частый бэкап - штука затратная (и по времени и по месту на диске)
А так - раз в неделю - полный бэкап
Каждый день - разностный
Каждые полчаса - журнал

И вуаля - ты можешь восстановить копию с точностью до получаса.
8 Cyberhawk
 
03.04.19
15:04
(7) Не до получаса, а вообще на любой момент кроме как посреди транзакции
9 Cyberhawk
 
03.04.19
15:05
(2) Имелось в виду чтоб не переполнился
10 trad
 
03.04.19
15:06
(7) если есть бекап журнала, то можно восстановится с точностью до транзакции
11 Йохохо
 
03.04.19
15:07
чтобы лог лдф начал перезаписывать записи, попавшие в журнал, переиспользуя место занятое на диске под лог. Предполагается, что на сервере место ограничено и дороже чем где то в другом месте
12 Джинн
 
03.04.19
15:07
(4) Если не вникать в нюансы - при полной модели журнал хранит все транзакции с момента последнего бекапа для обеспечения возможности восстановления на произвольную точку времени. Вы сами его об этом попросили, выбрав такую модель. Не будете бекапить - он будет содержать в себе все транзакции.
13 trad
 
03.04.19
15:08
(1) сброс грязных страниц из журнала в основной файл делается в момент чекпоинта
просто при бекапе журнала вызывается чекпоинт явно
14 trad
 
03.04.19
15:11
(13) +
кроме этого, после бекапа журнала, страницы в журнале помечаются как доступные для удаления при шринке или для перезаписи
15 Джинн
 
03.04.19
15:12
(13) Так с небольшими нюансами, которые совершенно не принципиальные. Но автор уже пояснил в (9), что он имел в виду несколько другое, но неточно сформулировал.
16 Cyberhawk
 
03.04.19
15:21
(13) (15) Да, пардон, спс за поправку
17 ЧессМастер
 
03.04.19
15:28
(12) "Не будете бекапить - он будет содержать в себе все транзакции"

Не совсем так.

Бэкап журнала транзакций это сохранения журнала транзакций.

После завершения транзакции информация о транзакциях хранится в журнале до того как вы не очистите информацию о транзакциях.

При бэкапе журнала транзакций он автоматически не очищается. Для очистки журнала транзакций есть специальная команда.
18 ЧессМастер
 
03.04.19
15:29
Бэкап журнала транзакций делается для того чтобы сохранить информацию о транзакциях. Поскольку журнал транзакций можно очистить и таким образом информация о о транзакциях будет потеряна.
19 Джинн
 
03.04.19
15:33
(17) Это и есть нюансы :)
20 ЧессМастер
 
03.04.19
15:35
(0) Особого смысла в этом нет.

Поскольку за время пока вы обнаружите что с базой что то произошло пройдет время. И откат базы на состояние до изменения не будет иметь смысла.

Пример.

В 9 утра начали работу.  Есть ночной бэкап базы на 2 часа ночи.
В 10 часов программист по ошибке пометил на удаление 100 документов по контрагенту.

В 11 часов это обнаружили. за это время были выписаны 10 расходных, 20 приходных, и 5 ПКО.

Если откатывать по журналу транзакций базу на состояние на 10 часов то все изменения в базе сделанные с 10 до 11 часов затрутся.
А документы  же уже выписаны - номера, распечатывание и т.п.

Поэтому проще взять ночную копию, развернуть ее в резервную базу и из нее перенести в рабочую те докуменыт которые были ошибочно помечены на удаление.

С учетом  сериализации в восьмерке и возможности выгрузить документы и движения в XML это не сложно.
21 ЧессМастер
 
03.04.19
15:39
(0) Журнал транзакций нужен и полезен если в базе идет большой документооборот и часто возникает задача определить кто и когда сделал изменения и какие это были изменения. При наличии журнала транзакций  в таком случае можно смоделировать ситуацию которая была напрмер в базе на 10.25 перед выпиской конкретного документа. И ответить таким образом на вопрос почему - каике были остатки товаров на момент выписки, какая задолженность контрагента и т.п.
22 Обфускация
 
03.04.19
15:40
есть смысл вообще полную систему бекапирования использовать или лучше простую?
23 ЧессМастер
 
03.04.19
15:49
(22) Это зависит от потребностей вашей базы.

Мое мнение - нет. Описал почему в (20).
24 Cyberhawk
 
03.04.19
15:54
(22) Возможность восстановления на любой момент времени (иметь срез данных). Она не только для восстановления рабочей инфобазы во время чьего-то косяка нужна бывает.
25 ЧессМастер
 
03.04.19
15:56
(24) А для чего это еще нужно ? В чем польза этого ?
26 Cyberhawk
 
03.04.19
15:57
(25) Расследовать ситуации изменения данных, например, спустя более ощутимое время, чем сутки или даже неделя. Из-за недостаточной детализации сторонних средств журналирования, например.
27 ЧессМастер
 
03.04.19
15:58
(26) Для этого версионирования вполне достаточно. На мой взгляд.
28 Cyberhawk
 
03.04.19
15:58
Ну или все-таки сам клиент когда готов пожертвовать уже введенными данными и прямым текстом просит накатить ему в прод копию на такой-то час такую-то минуту
29 Cyberhawk
 
03.04.19
15:58
(27) Так это если оно ведется и с достаточной степенью детализации
30 1Сергей
 
03.04.19
15:59
(27) версионирование хорошо, когда знаешь в каком месте что поменяли. А когда известно лишь, обороты по таким-то счетам изменились, куда проще поднять бекапчик
31 ЧессМастер
 
03.04.19
16:01
(29) Так затраты на создание или включение этого версионирования будут значительно меньше чем на хранение журналов транзакций.

Причем при версионировнаи у вас срез состояния документа будет храниться пока вы ее не удалите.
А копия журнала транзакций устареет и вы ее удалите.
32 ЧессМастер
 
03.04.19
16:02
(30) "А когда известно лишь, обороты по таким-то счетам изменились, куда проще поднять бекапчик"

Так для этого ночной бэкап есть. Чем тут копия журнала транзакций поможет ?
33 1Сергей
 
03.04.19
16:03
(32) а, сорри. не вник в суть спора
34 Cyberhawk
 
03.04.19
19:20
(31) Никогда не знаешь, что нужно версионировать, а что нет
35 Обфускация
 
04.04.19
08:00
если бекап лога транзакций делается, а журнал транзакций нарастает и на диске занимает больше места чем основная база, это нормально? Что с этим делать?
36 trad
 
04.04.19
09:01
1. Проверь нет ли опции NO_TRUNCATE при BACKUP LOG
2. Усечение (truncate) при бекапе физически размер файла не уменьшает, а только помечает страницы в нем доступными для перезаписи/удаления.
Т.е. truncate - делает логическое усечение страниц в файле.
Физическое обрезание файла делается при shrink, но только в границах логического усечения
37 Cyberhawk
 
04.04.19
09:14
"журнал транзакций нарастает и на диске занимает больше места чем основная база, это нормально?" // Так и задумано
38 Cyberhawk
 
04.04.19
09:15
"Что с этим делать?" // Липосакцию
39 ЧессМастер
 
12.04.19
21:19
(35) Размер журнала транзаций и будет нарастать до тех пор пока вы не сделаете сначала операцию truncate а потом shrink

Операция truncate удаляет из журнала транзакций информацию о завершенные транзакции.

Операция shrink уменьшает физически размер файла транзакий.

Например у вас лог файл 2 Гб.

Все транзакции завершены. Например сейчас с базой никто не работает.

После операции truncate размер файла транзакий останется 2 Гб но вся информацию о завершенных транзакциях будет удалена.

После операции shrink размер файла транзакций станет 1 Мб (или другой размер который у вас указан в свойствах базы).
40 ЧессМастер
 
12.04.19
21:25
(0) Пояснение того что написано в (36)

>1. Проверь нет ли опции NO_TRUNCATE при BACKUP LOG

Если есть конструкция NO_TRUNCATE то при бэкапе лога информация о успешных транзакциях не удалится из лога.

>Физическое обрезание файла делается при shrink, но только в границах логического усечения

Если работа с базой не ведется (новые транзакции не добавляются) то truncate пометит все завершенные транзакции.

Соответственно после этого можно весь журнал зашринковать.
41 Seriy_Volk
 
12.04.19
22:27
(35) Как говорил Василий Иванович: "Но есть нюанс!"
ваш сервер может решить, что вы совершенно напрасно не реплицируете свою базу на другой сервер и решит вам немного помочь.
Помогите усечь и сжать log MSSQL, перевод в Simple и шринк не дает результата
42 ЧессМастер
 
15.04.19
15:32
Кто подскажет вот какой момент.

В свойствах базы есть свойство "Авто сжатие".

Ее удобство в том что если используется простая модель восстановления то файл транзакций периодически уменьшается.

Вопрос в том - когда это происходит ? Насколько я знаю SQL сервер делает это самостоятельно.

Сколько читал по этой теме ничего не попадалось.

Единственно что попадалось это информация о том что

"Также возможно настроить базу данных на автоматическое сжатие путем выставления параметра БД AUTO_SHRINK в значение ON."
43 Йохохо
 
15.04.19
15:41
44 ЧессМастер
 
22.04.19
17:11
(43) То что файлы базы данных и журнала сжимаются автоматически при установленной галочке "Auto shrink" я знаю.

Вопрос был в том что  

1. Нужно ли для этого еще что то (настраивать планы обслуживания или т.п.)
2. Как часто происходит это сжатие (раз в день, раз в неделю и т.п.)

В книгах пишут что это происходит автоматически но не дают ответа на эти два вопроса.
45 Cyberhawk
 
22.04.19
17:56
(44)
1. Не нужно.
2. Как только становится более 25% незанятого места в файле БД, для которой включен автошринк, такая база становится кандидатом. Фактический шринк первого кандидата - не более чем через "несколько минут", фактический шринк всех последующих - не ранее чем через "несколько минут" после шринка предыдущего кандидата.
46 Лефмихалыч
 
22.04.19
19:03
(0) этот вопрос задают те, у кого еще впереди задача "надо бы восстановиться на момент до РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей().Записать(), а то я тут... в общем... так вышло... но зато могу повторить"
47 Cyberhawk
 
22.04.19
19:34
(46) Ты что-то напутал: в сабже речь не о ведении сабжа, а о его бекапе
48 Лефмихалыч
 
22.04.19
19:39
(47) да всяко бывает. Вдругорядь и не сразу спохватишься, что данные наэпнулись, ежели они раз в год нужны.

В общем, замес любого бэкапа в том, чтоб мочь из него восстановиться, когда припрёт - какие тут могут быть еще, например, вопросы.
49 ЧессМастер
 
30.04.19
19:39
(45) Спасибо за пояснение
50 Маша с уралмаша
 
30.04.19
20:19
(42) (44) (49) ты включил автошринк у себя на продакшн базах?
51 Cyberhawk
 
30.04.19
21:42
Аналогией автошринка в проде - в мире 1С - можно считать настройку перезапуска рабочих процессов в кластере 1С (в свойствах кластера) - типа ставишь там 86400 и каждые сутки у тебя свежие, а не распухшие, рабочие процессы. Только задница в том, что временем такого перезапуска управлять напрямую и легко нельзя - отсчет начинается со времени предыдущего запуска менеджера кластера, и можно словить такой глобальный рестарт посреди рабочего дня или какой-нибудь чувствительной длительной операции.
Так же и с автошринком - никогда не знаешь, когда он начнет делаться, и можешь словить тормоза.
52 Cyberhawk
 
30.04.19
21:43
Поэтому и рестарты кластера настраивают вручную в нужное время (ночью в какое-нибудь окно), а настройкой в кластере ни-ни пользоваться. И вместо автошринка - планы обслуживания.
53 Маша с уралмаша
 
01.05.19
00:38
Ну и бред вы тут несёте. https://www.sqlskills.com/blogs/paul/auto-shrink-turn-it-off/