Вручную установить размер файла журнала после сжатия SQL Server 2008 R2

Я становлюсь несколько непроизвольным DBA при работе в themoment и действительно нуждаюсь в некоторой помощи на чем-то.

У нас есть база данных 40 ГБ в режиме полного восстановления, не настроена резервная копия журнала и огромный файл журнала объемом 84 ГБ. Мой план до сих пор, чтобы спасти эту ситуацию, заключается в том, чтобы запустить полную резервную копию журнала в базе данных, сжать файл журнала и инициировать план обслуживания, чтобы каждый день запускать резервное копирование журнала с резервной копией базы данных, чтобы помочь ему контролировать его.

Моя проблема заключается в том, что я не хочу, чтобы файл журнала сокращался до нуля и проводил первое утро в понедельник, постоянно растет. У меня есть приблизительная оценка того, какой файл должен быть (около 20% базы данных), и хотел бы установить это из get-go, чтобы обеспечить как можно больше смежного пространства. Это просто случай изменения «Начального размера» в базе данных «Свойства» -> Файлы? Я бы тоже предположил, что для этого потребуется база данных в автономном режиме?

Заранее спасибо

10 голосов | спросил Tim Alexander 21 FebruaryEurope/MoscowbThu, 21 Feb 2013 20:55:28 +0400000000pmThu, 21 Feb 2013 20:55:28 +040013 2013, 20:55:28

3 ответа


12

Управление файлами может быть полностью онлайн-операцией. У вас есть два пути, в зависимости от вашей необходимости сохранять информацию журнала для целей восстановления:

Восстановление по времени не требуется

  1. Преобразование базы данных в SIMPLE восстановление. Выполните контрольную точку для записи транзакций на диск.
  2. Сгладить журнал.
  3. Измените размер журнала на соответствующий размер.

Я также рекомендую установить фиксированную сумму роста и неограниченный рост (чтобы лучше управлять журналом). Обратите внимание: фиксированная величина роста очень сильно зависит от количества, я бы порекомендовал сначала 1-2 ГБ в зависимости от того, сколько роста может ожидать журнал. В идеале ваш журнал не будет сильно расти, поэтому это не должно сильно повлиять. Если ваш журнал постоянно растет, вам может потребоваться пересмотреть свой размер.

Выполняется с использованием:

ALTER DATABASE [foo] 
SET RECOVERY SIMPLE;

CHECKPOINT;

DBCC SHRINKFILE (foo_log,0);

ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);

--Optional if you want the database in full recovery mode 
--for point in time recovery going forward
ALTER DATABASE [foo] 
SET RECOVERY FULL;

Необходимое восстановление по времени

Самое большое зависание будет заключаться в том, что вы не можете сжимать свой файл журнала за текущий активный сегмент VLF. Чтобы увидеть это, вы можете использовать DBCC LOGINFO в контексте базы данных. Любой сегмент с статусом = 2 активен. Чтобы очистить активные сегменты, вам нужно будет запустить резервную копию журнала транзакций, если в этом сегменте нет активных транзакций. Ваши действия:

  1. Запустить резервную копию журнала транзакций.
  2. Сократите свой файл. (Идеально сгладить, но если ваша база данных активна, это будет сложно сделать).
  3. Повторяйте шаги 1 и 2, пока ваш журнал не будет иметь соответствующий размер, в идеале, как можно меньше.
  4. Измените размер журнала на соответствующий размер.

Выполняется с использованием:

BACKUP LOG [foo] TO DISK='<Location of t-log backup>';

DBCC SHRINKFILE (foo_log,0);

--Repeat the above until your log file is small "enough"

ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);

Некоторые дополнительные ресурсы, чтобы понять, что здесь происходит:

ответил Mike Fal 21 FebruaryEurope/MoscowbThu, 21 Feb 2013 21:36:16 +0400000000pmThu, 21 Feb 2013 21:36:16 +040013 2013, 21:36:16
2

Фактически нет, база данных не должна быть отключена, чтобы сжать журнал. И я скажу, что это, вероятно, один из немногих случаев, когда сокращение журнала - хорошая идея. Вы можете установить начальный размер, но было бы проще сделать сжатие и сказать, чтобы оно сократилось до определенного размера.

USE [DBName]
GO
DBCC SHRINKFILE (N'LogName' , SizeInMg)
GO

Вы также можете сделать это с помощью графического интерфейса пользователя, а также с помощью второго переключателя и флажка, в котором указывается, насколько большой вы хотите, чтобы журнал был в конце. Вы можете перейти к графическому интерфейсу, щелкнув правой кнопкой мыши по базе данных в объектном проводнике в SSMS, выбрав задачи, сжав, файлы.

ответил Kenneth Fisher 21 FebruaryEurope/MoscowbThu, 21 Feb 2013 21:09:17 +0400000000pmThu, 21 Feb 2013 21:09:17 +040013 2013, 21:09:17
2

В дополнение к ответом Аарона о простом режиме вы можете запланировать 2 (или более) дифференциальные резервные копии в день , тем самым уменьшая окно потери данных в вашей базе данных при сохранении режима SIMPLE.

ответил Fabricio Araujo 22 FebruaryEurope/MoscowbFri, 22 Feb 2013 00:52:05 +0400000000amFri, 22 Feb 2013 00:52:05 +040013 2013, 00:52:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132