Move log file without taking database offline

There is no way to do this with an online database.

When you move a database file (ALTER DATABASE ... MODIFY FILE), you even get the following message:

The file "YourFile" has been modified in the system catalog. The new path will be used the next time the database is started.


The normal way of doing this would be to detach the DB, move the log file then reattach the db.

That's not the "normal" or accepted way I would do it. To move database files, I do the following:

  1. Run an ALTER DATABASE command to change the location of the file(s)
  2. Take the database offline
  3. Physically move the file(s) to the new location specified in step #1
  4. Bring database online

See this reference on TechNet: Move User Databases


According to the reference on TechNet Move User Databases from Thomas Stringer's answer, if you want to move the files without stopping the whole SQL Server instance (following the "Planned Relocation Procedure"), the order should be:

ALTER DATABASE database_name SET OFFLINE;
... move the file(s) to new location
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );
ALTER DATABASE database_name SET ONLINE;

Note the OFFLINE first; afterwards move the files and tell SQL Server about the new location(s).

If you do need to take the whole SQL Server instance down (see the procedure for "Relocation for Scheduled Disk Maintenance"), it is best to modify the file locations first so that when the instance is restarted, there is no issue finding the files in the new locations.