Why do we need the LDF files along with MDF files?

早过忘川 提交于 2019-11-30 19:53:48
Dustin Laine

The LDF file is the transaction log and is required for all SQL server configurations. Depending on the recovery mode, will determine how it is used. However all queries basically get stored here until successfully committed to the database (MDF).

You will not be able to delete it while SQL server service is running. You can detach the database, delete the log file (LDF) and reattach the data file (MDF). However it will just create a new log file. You really should not need to delete it. If it is getting too large you will need to manage it, typically through the backup process.

The database will be marked as suspect on SQL Server restart and inaccessible without some in depth fiddling to recover it.

The LDF is an essential part of the database: you need this file.

You can of course ignore us, and delete it and see for yourself...

As already pointed out, the .LDF file is crucial for the DB and the DB will not be available without one. The .LDF can be deleted only if the DB is offline, or detached or SQL Service is stopped.

Assuming that one of the above 3 scenario was true and you did delete the .LDF file, then the DB would be suspect when SQL server is restarted. If the DB was offline and you try to bring it back online, it will give you an error:

File activation failure. The physical file name "<<filename.ldf>>" may be incorrect.
Msg 945, Level 14, State 2, Line 1
Database '<<DB Name>>' cannot be opened due to inaccessible files or insufficient
memory or disk space.  See the SQL Server errorlog for details.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.

It is quite simple to fix this error, but you will need to delete all the Metadata pertaining to the DB from system files. The easiest way to do that would be to drop the DB. Here is what you will need to do.

  • Take the DB offline or detach the DB
  • Make a copy of the .MDF file to your backup directory
  • Now Drop the DB (You will have to reattach the DB, if you detached, of course)
  • Copy the .MDF back to the original location

After these steps, run the following:

SP_ATTACH_SINGLE_FILE_DB @dbname='<<DBName>>' ,@physname=N'<<filepath\filename.MDF>>'

This should return you the following:

File activation failure. The physical file name "<<Filepath\filename.ldf>>" 
may be incorrect.
New log file '<<Filepath\filename.ldf>>' was created.

That would bring your DB back to an usable state.

The million $$$$ question still remains - why would anyone want to delete the .LDF file???

Raj

Mahmood Sheikh

The best way to keep the size of .LDF file in check is:

  • to regularly take transaction log backups at least once a day or
  • change your recovery model from full to simple ( by default, its full)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!