Подтвердить что ты не робот

Как удалить .ldf файл из SQL Server 2008?

Спасибо в Advance

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

Спасибо

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

  • Щелкните правой кнопкой мыши базу данных
  • Выберите "Свойства"
  • Перейдите на вкладку "Параметры".
  • Установить модель восстановления в SIMPLE
  • Затем выберите вкладку FILES
  • Теперь убедитесь, что вы выбрали файл LOG и прокрутите вправо. Под заголовком "Авторазработка" щелкните точки.
  • Затем отключите Autogrowth (это необязательно и ограничит дополнительный рост)
  • Затем нажмите "ОК" и установите "Начальный размер" в размере, который вы хотите иметь (я установил 20 МБ).
  • Нажмите "ОК", чтобы сохранить изменения.
  • Затем щелкните правой кнопкой мыши DB и выберите "Tasks > Shrink > Database", нажмите OK.
  • Теперь сравните размеры ваших файлов!:)

Ответ 3

Я сделал это с помощью

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

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

Ответ 4

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

DBCC shrinkdatabase ('here your database name')

чтобы очистить журнал.

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

Ответ 5

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

Ответ 6

Лучший способ очистить ВСЕ файлы 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

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

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

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