Как удалить файл .ldf из SQL Server 2008? - PullRequest
34 голосов
/ 27 апреля 2011

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

Если я остановлю SQL-сервер и затем удалю файл .LDF (файл транзакции) в базу данных, что произойдет?Будет ли база данных помечена как подозрительная или SQL-сервер просто создаст новую автоматически?SQL Server 2008 R2 и размер моего файла .LDF слишком велик, поэтому как им управлять, могу ли я уменьшить его или удалить Plz Suggest в форме запроса

Спасибо

Ответы [ 6 ]

46 голосов
/ 27 апреля 2011

Вы не должны удалять какие-либо файлы базы данных, так как это может серьезно повредить вашу базу данных!

Если вам не хватает места на диске, вы можете разделить базу данных на несколько частей.Это можно сделать в свойствах базы данных.Таким образом, вы можете поместить каждую часть базы данных в другой том.

Вы также можете сжать файл журнала транзакций, если измените режим восстановления с полного на простой, используя следующие команды:

ALTER DATABASE myDatabase SET RECOVERY SIMPLE
DBCC SHRINKDATABASE (myDatabase , 5)

Также возможно переключение обратно на полное восстановление:

ALTER DATABASE myDatabase SET RECOVERY FULL

Обновление о SHRINKDATABASE - или что я не знал, отвечая на этот вопрос:

Несмотря на то, что описанный выше метод избавляет от некоторого неиспользуемого пространства, он имеет ряд серьезных недостатков для файлов базы данных (MDF) - он повредит ваши индексы, фрагментируя их, что ухудшит производительность вашей базы данных.Поэтому вам нужно перестроить индексы, чтобы избавиться от фрагментации, вызванной командой сжатия.

Если вы хотите сжать только файл журнала, вы можете использовать SHRINKFILE .Я скопировал этот пример из MSDN:

USE AdventureWorks2012;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE AdventureWorks2012
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (AdventureWorks2012_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE AdventureWorks2012
SET RECOVERY FULL;
GO
28 голосов
/ 07 мая 2015

Не рискуйте удалять свои файлы LDF вручную! Если вам не нужны файлы транзакций или вы хотите уменьшить их до любого размера по вашему выбору, выполните следующие действия: (Обратите внимание, что это повлияет на ваши резервные копии, поэтому убедитесь, что сделали это)

  1. База данных правой кнопкой мыши
  2. Выберите Свойства
  3. Нажмите на вкладку «Опции».
  4. Установить модель восстановления на SIMPLE
  5. Далее выберите вкладку ФАЙЛЫ
  6. Теперь убедитесь, что вы выбрали файл LOG и прокрутите вправо. Под заголовком «Авторосеть» щелкните точки ....
  7. Затем отключите Autogrowth (это необязательно и ограничит дополнительный рост)
  8. Затем нажмите «ОК» и установите «Начальный размер» на размер, который вы хотите иметь (я установил свой размер на 20 МБ)
  9. Нажмите ОК, чтобы сохранить изменения
  10. Затем снова щелкните правой кнопкой мыши БД и выберите «Задачи> Сжать> База данных», нажмите ОК.
  11. Теперь сравните ваши размеры файлов!:)
18 голосов
/ 26 июня 2014

Я сделал это

  • Отключите базу данных (включая Drop Connections)
  • Удалите файл * .ldf
  • Присоедините базу данных, но удалите ожидаемую* .ldf file

Сделал это для 4 разных баз данных в SQL 2012, я должен быть таким же для SQL 2008

5 голосов
/ 27 апреля 2011

Поскольку вы можете читать комментарии, это не хорошее решение для удаления журнала.Но если вы уверены, что ничего не потеряете, вы можете просто изменить режим восстановления БД на простой, а затем использовать

DBCC shrinkdatabase ('here your database name')

для очистки журнала.

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

2 голосов
/ 27 апреля 2011

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

1 голос
/ 04 октября 2017

Лучший способ очистить ВСЕ файлы ldf (файлы журнала транзакций) во всех базах данных на сервере MS SQL, ЕСЛИ все базы данных, конечно, были зарезервированы ранее:

USE MASTER
print '*****************************************'
print '************ Czyścik LDF ****************'
print '*****************************************'

declare
   @isql varchar(2000),
   @dbname varchar(64),
   @logfile varchar(128),
   @recovery_model varchar(64)

   declare c1 cursor for 
   SELECT  d.name, mf.name as logfile, d.recovery_model_desc  --, physical_name AS current_file_location, size
   FROM sys.master_files mf
      inner join sys.databases d
      on mf.database_id = d.database_id
   --where recovery_model_desc <> 'SIMPLE'
   and d.name not in ('master','model','msdb','tempdb') 
   and mf.type_desc = 'LOG'
   and d.state_desc = 'online'   
   open c1
   fetch next from c1 into @dbname, @logfile, @recovery_model
   While @@fetch_status <> -1
      begin

      print '----- OPERATIONS FOR: ' + @dbname + ' ------'

      print 'CURRENT MODEL IS: ' + @recovery_model

      select @isql = 'ALTER DATABASE ' + @dbname + ' SET RECOVERY SIMPLE'
      print @isql
      exec(@isql)
      select @isql='USE ' + @dbname + ' checkpoint'
      print @isql
      exec(@isql)
      select @isql='USE ' + @dbname + ' DBCC SHRINKFILE (' + @logfile + ', 1)'
      print @isql
      exec(@isql)
      select @isql = 'ALTER DATABASE ' + @dbname + ' SET RECOVERY ' + @recovery_model
      print @isql
      exec(@isql)

      fetch next from c1 into @dbname, @logfile, @recovery_model
      end
   close c1
   deallocate c1

Это улучшенный код, основанный наon: https://www.sqlservercentral.com/Forums/Topic1163961-357-1.aspx

Рекомендую прочитать эту статью: https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/recovery-models-sql-server

Иногда стоит постоянно включать RECOVERY MODEL = SIMPLE в некоторых базах данных и, таким образом, раз и навсегда избавиться от журналапроблемы.Особенно, когда мы резервируем данные (или сервер), ежедневные и дневные изменения не являются критичными с точки зрения безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...