Мне действительно нужно хранить файлы .LDF?

9

Каждый месяц мы делаем снимок нашей производственной базы данных на конец месяца. Эти снимки в конце месяца предназначены исключительно для целей отчетности, в них нет вставок, обновлений или удалений. Каждый из этих снимков имеет .MDFи .LDFфайл.

Я хочу удалить .LDFфайлы и освободить место на сервере. Есть ли причины, по которым мне нужно хранить .LDFфайлы?

Разъяснение:

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

Ночной процесс:
из того, что я могу сказать ...
Каждую ночь таблицы базы данных усекаются
Таблицы заполняются серией массовых операторов вставки
Индексы перестраиваются

Майкл Райли - AKA Gunny
источник

Ответы:

16

Вы не должны удалять файл журнала. Если вы пытаетесь повторно присоединить файл данных без журнала, SQL Server может технически воссоздать его, но есть несколько потенциальных проблем, например, были ли открытые транзакции, когда база данных была отсоединена. В этом случае у вас будет полная потеря данных.

Занимайте место и не удаляйте файлы журналов . Вы просите неприятностей с этим.

См. Эту статью в журналах транзакций , в частности, в разделе «Управление ошибками журналов».

Томас Стрингер
источник
9

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

USE master;
GO
ALTER DATABASE databasename SET READ_ONLY;
GO

Вы можете изменить базу данных обратно READ_WRITE, внести любые необходимые изменения, а затем установить ее в READ_ONLYлюбое время.

Файл журнала по-прежнему требуется для поддержки свойств ACID базы данных.

jgardner04
источник
2

Дело в том, что вы можете создать базу данных, просто используя файл mdf. Это команда sp_attach_single_file_db (Transact-SQL). Обратите внимание, что он будет удален в будущей версии Microsoft SQL Server. Но не стоит удалять ваши файлы LDF. Акула права: «Вы просите неприятностей с этим». Другая точка зрения - огромны ли ваши ldf файлы? Если они есть, вы можете что-то с ними сделать.

  1. Установите для вашей базы данных Простую модель восстановления . Вы можете сделать это, только если вы не хотите откатывать транзакции
  2. Вместо создания файлов MDF и LDF создайте файл полной резервной копии базы данных (.BAK). Это будет меньше, чем МДФ + ЛДФ
Кэрол Бейкер Вест
источник
-3

Вот решение, которое я придумал, чтобы сжать файлы LDF.

  1. Отсоединить базу данных
  2. Переименуйте файл LDF в * _old.ldf
  3. Прикрепить базу данных
  4. Удалить ссылку на недостающий LDF

Это воссоздает файл LDF размером 504K.

  1. Удалить * _old.ldf
  2. Пустая мусорная корзина

Это освободило значительный объем дискового пространства на сервере. Это работает для нас, потому что все эти базы данных являются ТОЛЬКО базами статических отчетов. Никакие Вставки, Обновления или Удаление никогда не будут выполнены против этих баз данных.

ОБНОВЛЕНИЕ 2019-09-24: Да, я согласен, что это действительно плохая идея. Я прекратил делать это почти сразу. Я перестроил все индексы, используя коэффициент заполнения 100. Сокращены только файлы .ldf. И изменил все базы данных только для чтения.

Майкл Райли - AKA Gunny
источник
6
Вау, это действительно плохая идея. Что если база данных не будет успешно отсоединена или будет потеряна или повреждена где-то между 1 и 3? Ты пьян. У вас есть нулевые копии вашей базы данных.
Аарон Бертран
3
Правильный способ сделать это: 1. Сделайте резервную копию базы данных COPY_ONLY. 2. Восстановите его на сервере отчетов. 3. Установите для восстановления простое и отметьте восстановленную копию как доступную только для чтения. 4. Сожмите файл журнала вручную. Да, вам нужно пространство в то же время, но вы получите сохранить свою работу!
Аарон Бертран