|
Для чего нужно делать бекап журнала транзакций 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/
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |