|   |   | 
| 
 | SQL server 2005 полный бекап и журнал транзакций. | ☑ | ||
|---|---|---|---|---|
| 0
    
        mnail1979 19.03.12✎ 10:57 | 
        Здравствуйте. Прошу совета и подсказки в следующем:
  Создал следующую схему резервного копирования базы: 1. Каждое воскресенье в 4 часа делаю полное резервное копирование базы. 2. Каждый день, кроме воскресенья, в 5 часов делаю разностное резервное копирование базы. 3. Каждый день каждый час с 9.00 до 21.00 делаю копирование журнала транзакций. 4. Каждый день в 00:00:00 делаю обновление статистики, 01:00:00 - реорганизация индекса, 02:00:00 - перестроение индекса. Прошу посоветовать, правильно ли я организовал бекап. Не ли чего лишнего или недостающего. И самый главный вопрос: Каждый бекап журнала транзакций в среднем у меня занимает 150-200МБ. Во время простоя, когда пользователей нет, занимает 404КБ. Но каждое утро в 9 часов создается первый бекап журнала транзакций размером в 5ГБ. Я так понимаю размер велик, потому что в себе он держит лог по реиндексациям и т.д. Т.е. все что происходило с последнего бекапа журнала транзакций 21:00:00 вечера. Но это же не совсем верно. Ведь в 5 часов создался полный (в воскресенье) или разностный(каждый день) бекап. Почему журнал транзакций автоматически не урезается. | |||
| 1
    
        val 19.03.12✎ 16:57 | 
        (0)
  "Каждый день в 00:00:00 делаю обновление статистики, 01:00:00 - реорганизация индекса, 02:00:00 - перестроение индекса". "реорганизация индекса" это что, дефрагментация? Перестроение индексов уже включает в себя и обновление статистики, и дефрагментацию. Поэтому два первых пункта лишние. | |||
| 2
    
        val 19.03.12✎ 17:04 | 
        (0) Еще вопрос - в 2 часа у Вас начинается ребилд индексов. А сколько он длится?     | |||
| 3
    
        YF 19.03.12✎ 17:05 | 
        (0) Размер базы какой?     | |||
| 4
    
        Мыш 19.03.12✎ 17:13 | 
        (0) select name, log_reuse_wait_desc from sys.databases where name = 'MyDataBase'     | |||
| 5
    
        Мыш 19.03.12✎ 17:15 | 
        Вобщем делаешь бэкап самой базы, потом бэкап лога, а потом уже обрезаешь файл лога. Например так:
  USE [MyDataBase] GO DBCC SHRINKFILE (N'MyDataBase_log' , 1024) GO | |||
| 6
    
        Мыш 19.03.12✎ 17:16 | 
        Блин, время не посмотрел. Автор давно уже сам разобрался видать )     | |||
| 7
    
        Jofa 19.03.12✎ 17:16 | 
        А ты говорил ему АвтоШринк?     | |||
| 8
    
        Мыш 19.03.12✎ 17:18 | 
        (7) Автошринк - зло.     | |||
| 9
    
        mnail1979 19.03.12✎ 17:58 | 
        Главный вопрос: Почему после полного бекапа в 4 часа или разностного в 5 часов бекап журнала транзакций в 9 часов включает все транзакции, начиная с 21.00 предыдущего дня, а не с 5 часов утра? Что, при полном или разностном бекапе журнал автоматически не урезается?     | |||
| 10
    
        mnail1979 22.03.12✎ 11:20 | 
        Ответьте плиз на главный вопрос: почему полный или разностный бекап не сдвигает LSN для следующего бекапа журнала транзакций?     | |||
| 11
    
        Ёпрст гуру 22.03.12✎ 11:28 | 
        (9) нет и не должен     | |||
| 12
    
        Ёпрст гуру 22.03.12✎ 11:33 | 
        делаешь бекап базы, далее бекап лога в отдельном задании далее обрезку лога.. ну и обработку по очистке перед бекапом лога и архивом базы - чтоб лог транзакций к примеру, 60 дней хранить     | |||
| 13
    
        mnail1979 22.03.12✎ 11:45 | 
        А зачем после бекапа лога (т.е. журнала транзакций) делать обрезку лога. Ведь этот бкап и так уже сдвинет lsn     | |||
| 14
    
        Ёпрст гуру 22.03.12✎ 12:02 | 
        (13) с чего это ?     | |||
| 15
    
        mnail1979 22.03.12✎ 12:10 | 
        тогда вопрос. BACKUP LOG db_name WITH TRUNCATE_ONLY создает бекап, или просто производит урезку цепочки. Может просто в последнем бекапе журнала транзакций в 21.00 сделать дописку WITH TRUNCATE_ONLY и все? Т.е. мне не нужен лог действий с 21.00 до 09.00 В это время пользователи не работают С 0.00 по 02.00 идут регламентные задания по переиндексации и т.д, в результате которые и создается бекап журнала транзакций в 9.00 такого большого размера     | |||
| 16
    
        Ёпрст гуру 22.03.12✎ 12:13 | 
        (15) просто создает бекап лога     | |||
| 17
    
        2mugik 22.03.12✎ 12:20 | 
        (8)чем зло если не секрет?     | |||
| 18
    
        Мыш 22.03.12✎ 12:25 | 
        (17) Файл меняет размер. Соответственно его физическое положение на диске фрагментируется.     | |||
| 19
    
        mnail1979 22.03.12✎ 12:26 | 
        тогда как мне сделать так, чтобы в утреннем 9.00 бекапе журнала транзакций не были данные относительно ночных регламентных заданий по переиндексации и т.д. Т.е. я хочу следующее:
  Каждое воскресенье ночью создавать полный бекап. Каждый день ночью создавать разностный бекап. Каждый час с 9.00 по 21.00 создавать бекап журнала транзакций. Каждый день ночью производить регламентные задания по Гилеву - индексы, статистика и т.д. Но чтобы при этом не было ненужных никому лишних логов, как сейчас происходит у меня, т.е. в утреннем бекапе журнала транзакций сидят ненужные мне данные по ночным переиндексациям, что увеличивает размер бекапа. | |||
| 20
    
        Мыш 22.03.12✎ 12:33 | 
        (19) 
  > Каждый день ночью производить регламентные задания по Гилеву - индексы, статистика и т.д. Вот это сильно увеличивает лог. 1. Бэкап лога 1. 2. Полный/разностный бэкап. 3. Бэкап лога 2. 4. Удалить бэкап лога 1. 5. Подрезать файл лога. | |||
| 21
    
        krbIso 22.03.12✎ 12:34 | 
        без прерывания цепочки никак не сделать     | |||
| 22
    
        Ёпрст гуру 22.03.12✎ 12:34 | 
        задание 1:
  обработка обслуживания (очистка старых бекапов с диска) - полный бекап каждое воскресенье задание 2: обработка обслуживания (очистка старых бекапов с диска) - разностный бекап каждый день, окромя воскресенья задание 3: обработка обслуживания (очистка старых бекапов лога с диска) - бекап лога каждый каждый день с 9 до 21, окромя воскресенья - скрипт t-sql со шринком лога задание 4-6 регламентные операции согласно расписанию | |||
| 23
    
        krbIso 22.03.12✎ 12:38 | 
        Если фул бэкап у тебя делается только 1 раз в вскр, то ничего сделать нельзя.
  Если фул бэкап делать раз в сутки, тогда можно прерывать цепочку усекая журнал с параметром TRUNCATE_ONLY и ему подобных (No_LOG и тд) | |||
| 24
    
        Ёпрст гуру 22.03.12✎ 12:39 | 
        (23) что именно нельзя сделать?     | |||
| 25
    
        Ёпрст гуру 22.03.12✎ 12:41 | 
        +22 если тебе не нужен последний лог - тот который от обработки твоих заданий - сделай отдельным рег заданием его бекап + шринк + удаление с диска.     | |||
| 26
    
        krbIso 22.03.12✎ 12:42 | 
        (25) "Но чтобы при этом не было ненужных никому лишних логов"     | |||
| 27
    
        Ёпрст гуру 22.03.12✎ 12:42 | 
        (26) всё можно     | |||
| 28
    
        krbIso 22.03.12✎ 12:43 | 
        (27) что именно все можно?     | |||
| 29
    
        Ёпрст гуру 22.03.12✎ 12:43 | 
        (28)  "Но чтобы при этом не было ненужных никому лишних логов"
  27 | |||
| 30
    
        Господин ПЖ 22.03.12✎ 12:45 | 
        что есть никому не нужный лог?     | |||
| 31
    
        krbIso 22.03.12✎ 12:45 | 
        (29) какая последовательность действий?     | |||
| 32
    
        Ёпрст гуру 22.03.12✎ 12:47 | 
        (31) см (25)     | |||
| 33
    
        Ёпрст гуру 22.03.12✎ 12:47 | 
        (30) он хочет лог транзакций от рег. заданий удалить..     | |||
| 34
    
        krbIso 22.03.12✎ 12:51 | 
        (32)как он будет восстанавливаться в случае чего?     | |||
| 35
    
        Ёпрст гуру 22.03.12✎ 12:57 | 
        (34) дык это его проблемы
  :) ТС же грит в морг - значит в морг Хотя, достаточно разностный архив делать не вечером, а после этих рег заданий и усё.. | |||
| 36
    
        Ёпрст гуру 22.03.12✎ 12:58 | 
        хотя и так, если делать шринк лога - он будет всегда мелким, а реиндекс/статистика и прочие перестроения не увеличат лог на много     | |||
| 37
    
        Мыш 22.03.12✎ 13:02 | 
        (36) Увеличат на много.     | |||
| 38
    
        Ёпрст гуру 22.03.12✎ 13:05 | 
        (37) ну.. если делать бекап лога, скажем каждые полчаса.. то весить он будет ~5-10Кб
  если выполнять рег задания.. ну увеличится он до ~10 метров.. и хрен с ним. :) | |||
| 39
    
        krbIso 22.03.12✎ 13:10 | 
        вообщем если п.2 это в 5 часов утра (05.00) то можно прервать цепочку выполнив усечение журнала с TRUNCATE_ONLY, соответственно перед этим самым разностным бэкапом.
  Если же 5 часов это 17.00 то никак. | |||
| 40
    
        Мыш 22.03.12✎ 13:17 | 
        (38) У меня после реиндексации и обновления статистики лог растет до размера самой базы.     | |||
| 41
    
        Ёпрст гуру 22.03.12✎ 13:27 | 
        (40) ну не знаю..смотрю бекап лога - максимум 200 метров есть, всё остальное - килобайты..     | |||
| 42
    
        mnail1979 22.03.12✎ 14:19 | 
        (35) >Хотя, достаточно разностный архив делать не вечером, а после этих рег заданий и усё.
  У меня и так рег задания делаются ночью с 00.00 по 02.00, а разностный делается в 04.00. И после этого никаких действий в базе не происходит. Но бекап утром в 9.00 огромный, в полтора раза больше базы. Смотрю в логах, и там указано, что бекап журнала взял данные lsn с 21.00 часового последнего журнала транзакций. | |||
| 43
    
        Ёпрст гуру 22.03.12✎ 14:26 | 
        (42) ёпт, после рег заданий делаешь бекап лога и его шринк + удаление с диска обработкой обслуживания, далее разностный бекап и привет - наслаждаешься.     | |||
| 44
    
        mnail1979 22.03.12✎ 14:33 | 
        (43) ок. Попробую. Только че то я сомневаюсь, что после разностного бекапа создастся нормальный бекап журнала транзакций, способный к восстановлению, потому что он будет своим началом lsn ссылаться на тот бекап, который мы удалим.     | |||
| 45
    
        Ёпрст гуру 22.03.12✎ 14:43 | 
        а зачем тебе нужен будет потом этот лог ?
  восстановление будет уже от разностного бекапа | |||
| 46
    
        mnail1979 22.03.12✎ 14:46 | 
        Уверен? утренний бекап журнала логов ведь хранит в себе начальный lsn от последнего бекапа журнала транзакций,который мы удалим, а не от последнего разностного бекапа.     | |||
| 47
    
        krbIso 22.03.12✎ 15:22 | 
        (46) см (39) разностный бэкап начинает новую цепочку журналов.     | |||
| 48
    
        krbIso 22.03.12✎ 15:23 | 
        (47) соответственно при восстановлении нужен будет последний фул+последний разностный+журналы идущие уже от этого разностного бэкапа     | |||
| 49
    
        Ёпрст гуру 22.03.12✎ 15:26 | 
        (46) уверен
  :) Блин.. всё это проверяется за пару минут.. | |||
| 50
    
        mnail1979 22.03.12✎ 15:34 | 
        (47) В (43) >делаешь бекап лога. Я должен делать этот бекап с параметром TRUNCATE_ONLY? Т.е. получается, если я использую этот параметр, тогда цепочка начнется от разностного бекапа, а если без этого параметра, тогда даже если после бекапа журнала сделать разностный бекап, то цепочка идет от последнего журнала лога, а не от разностного. Правильно? По крайней мере щас у меня так, утренний бекап журнала связан цепочкой в вечерним бекапом журнала (21.00), а не с ночного разностного (05.00)     | |||
| 51
    
        Ёпрст гуру 22.03.12✎ 15:36 | 
        (50) трункейт онли не обрежет тебе лог, если че
  нужно шринк делать еще | |||
| 52
    
        krbIso 22.03.12✎ 15:44 | 
        (50) угу, бэкап с трункейтом тебе усечет лог, + нужно как в (51) еще сделать шринк файла.
  Но там могут быть нюансы, если есть активные логические журналы, то шринк отрежет до них. | |||
| 53
    
        mnail1979 22.03.12✎ 16:27 | 
        (52) учитывая что я новичок, прошу не судить за возможно элементарные вопросы.
  И так 2 возможно очень элементарных вопроса(но не для меня :) ): 1. Как работает шринк, т.е. если я указываю размер к примеру 1024 Кб, за счет чего он уменьшает до этого размера. Что стоит к примеру поставить 10 Кб. 2. (43) < удаление с диска обработкой обслуживания. Что такое обработка обслуживания. где ее найти? | |||
| 54
    
        Ёпрст гуру 22.03.12✎ 16:36 | 
        1.http://msdn.microsoft.com/ru-ru/library/ms189493.aspx
  2.Управление-ПланыОбслуживания-Твой план -Задача очистка после обслуживания | |||
| 55
    
        Мыш 23.03.12✎ 08:17 | 
        (53) По первому вопросу: уменьшает за счет неиспользуемых страниц в файле.     | |||
| 56
    
        Ёпрст гуру 23.03.12✎ 08:40 | 
        (55) ну не намного
  :) | |||
| 57
    
        Йохохо 23.03.12✎ 10:44 | 
        (53) он не уменьшает до этого размера. он освобождает не используемые участки пока максимально не приблизится к этому значению. если успешно уменьшишь до 10, получишь тормоза, когда лог начнет расти. если места в логе нет скуль вешает "пива нет" и ждет пока появится (оно).
  смысла в шринке нет, если ты только не переносишь файл лога физически куда то, или места мало (50) у тебя похоже 2 цепочки бэкапов, сравнивай параметры. бэкап лога содержит транзакции с последнего бэкапа своей цепочки. возможно у тебя бэкап сет нейм динамически создается? | |||
| 58
    
        упс 23.03.12✎ 12:25 | 
        (57) две цепочки журналов - это пять.
  в (50) все верно, но и (47) верно. Дифференциальный бэкап, как и полный, не разрывает цепочку журналов, но позволяет начинать ее заново. Пример: в 21.00 полный бэкап, в 22.00 бэкап лога, в 23.00 бэкап лога, в 00.00 диф бэкап, в 01.00 бэкап лога, 02.00 бэкап лога. Можно восстановиться так: полный, бэкапы лога с 22.00 и 23.00, бэкапы лога с 01.00 и 02.00 - все будет нормально. А можно восстановиться так: полный, диф бэкап с 00.00, бэкапы лога с 01.00 и 02.00 - тоже все будет нормально. Такой вариант и предлагается в (47). Единственный косяк - если вдруг что-то поломается после бэкапа с TRUNCATE_ONLY и перед нормальным бэкапом лога, то восстановиться на момент времени перед сбоем будет нельзя. | |||
| 59
    
        Йохохо 23.03.12✎ 15:24 | 
        (58) предложи свой, отличный, вариант объяснения (9)     | |||
| 60
    
        упс 23.03.12✎ 18:27 | 
        (59) читай (58) до просветления. Вкратце: дифференциальный (который тут почему-то называют разностным) и полный бэкапы НЕ НАРУШАЮТ цепочку журналов, но МОГУТ ее НАЧАТЬ.     | |||
| 61
    
        ILM гуру 23.03.12✎ 19:50 | 
        (0) ТС уже предлагали попробовать повосстанавливать базы из того бэкапа, который он настроил и делает )))))     | |||
| 62
    
        Йохохо 23.03.12✎ 22:54 | 
        (60) у меня нет к тебе вопросов, объясни (9)
  или прочитай хотя бы и потом ответь на (59) | |||
| 63
    
        Йохохо 23.03.12✎ 22:56 | 
        (60) хотя не надо, в этой фразе всё твоё понимание
  "Единственный косяк - если вдруг что-то поломается после бэкапа с TRUNCATE_ONLY и перед нормальным бэкапом лога, то восстановиться на момент времени перед сбоем будет нельзя." | |||
| 64
    
        упс 24.03.12✎ 06:53 | 
        (62)(63) да потому что журнал после полного или диф бэкапа действительно НЕ УРЕЗАЕТСЯ, блин.
  http://sp-who.livejournal.com/2332.html | |||
| 65
    
        mnail1979 24.03.12✎ 09:42 | 
        ладно. Типа разобрался. Спасибо большое.
  Только вот теперь никак не пойму. Делаю use my_database go dbcc shrinkfile(N'my_database_log') запускаю эти команды в запросе в mssql server management studio - все работает, ldf уменьшился с 7 гигов до 700 килобайтов. Но если это же точно также написать в "планы обслуживания"->выполнение инструкции T-SQL, то он не выполняется, ругается что по базе "master" не найден файл my_database_log. Т.е. типа use не срабатывает чтоли, и не переключается на нужную мне базу, или в ситнаксисе что то не так? Никак не пойму | |||
| 66
    
        aspirator23 24.03.12✎ 16:24 | 
        (65) не увлекайся мелкими логами. Сервер будет дергать диск приращивая лог файл, когда ему потребуется. Размер лог по умолчанию нужно поставить в model. И размер его нужно резать до 10-30% от размера базы(размер процента зависит от возможностей).     | |||
| 67
    
        mnail1979 25.03.12✎ 18:52 | 
        (66) не совсем понял. Что значит поставить в model. Где это. И что получается, по мере роста базы мне каждый раз менять регламентное задание, изменяя размер сжатия? А что если я вообще не буду никогда выполнять эту команду dbcc shrinkfile?
  И еще, в (65) моим главным вопросом было следующее: почему в query эта команда срабатывает, а в "планы обслуживания"->выполнение инструкции T-SQL - нет. | |||
| 68
    
        упс 26.03.12✎ 08:24 | 
        (67) какая у вас версия sql server (select @@version) и management studio (help->about)? Возможно имеет смысл их обновить, с maintenance plans, емнип, были проблемы в старых версиях - rtm, sp 1, sp 2.     | |||
| 69
    
        dk 26.03.12✎ 08:49 | 
        а размер базы можно увидеть?
  а то может там база 5 гигов и стока заморочек с бэкапами ни к чему | |||
| 70
    
        Ёпрст гуру 26.03.12✎ 10:06 | 
        (65) у меня так и всё работает
  USE [databasename] GO DBCC SHRINKFILE (N'databasename_log' , 0, TRUNCATEONLY) GO | |||
| 71
    
        Йохохо 26.03.12✎ 10:33 | 
        (64) ты вроде и сам в курсе, какие транзакции попадают в бекап
  те, что ДО бекапа, диф или полного, _не попадают!!11.. | |||
| 72
    
        упс 26.03.12✎ 13:37 | 
        (71) я уже запутался.
  В какой бэкап? Если в бэкап лога, при том что цепочка журналов не повреждена - то попадают. В бэкапе лога будут ВСЕ транзакции, "прошедшие" после предыдущего бэкапа лога! Если раньше бэкапа лога не было, или цепочка журналов была нарушена (BACKUP LOG WITH TRUNCATE_ONLY, переход в SIMPLE и обратно) - то в бэкап лога попадут все транзакции, "прошедшие" после полного или диф бэкапа. | |||
| 73
    
        упс 26.03.12✎ 13:39 | 
        (71) как ты думаешь, почему растет лог, если делать только полные/диф бэкапы, но не делать бэкап лога?     | |||
| 74
    
        mnail1979 26.03.12✎ 15:14 | 
        (69) :) база пока что всего 4 гига. Но я хочу щас все подготовить на будущее     | |||
| 75
    
        dk 26.03.12✎ 15:23 | 
        у меня база 30 гб full backup занимал 50 секунд, когда в базе никого     | |||
| 76
    
        Йохохо 26.03.12✎ 23:59 | 
        (72) "В бэкапе лога будут ВСЕ транзакции, "прошедшие" после предыдущего бэкапа лога!"
  нет, ты не прав =) | |||
| 77
    
        упс 27.03.12✎ 05:52 | 
        (76) заеbись аргументация.
  на, осмысливай: http://screencast.com/t/0MHVpzjEyRH8 как ты считаешь, как у меня получилось восстановить базу данных на момент времени между первым бэкапом лога и вторым полным бэкапом, если во втором бэкапе лога нет этих транзакций? Сейчас, правда, подумал, что надо было восстановить не перед, а после удаления, но с этим ты уже и сам сможешь поиграться и все попробовать. | |||
| 78
    
        Йохохо 31.03.12✎ 01:54 | 
        думаешь правда интересно твои мультики смотреть?
  времена в бэкапе лога > времени бэкапа дб слово цепочка ты уже выучил | |||
| 79
    
        mnail1979 17.04.12✎ 08:44 | 
        Люди, а если я перешел на 2008 Р2, как мне обойти backup log with truncate_only?     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |