在SQL Server 2005中移动日志文件的最佳方法

显然你可以分离整个数据块并使用sp_attach和sp_detach重新连接。 有没有一个在线的方式来做到这一点,有一个快速的谷歌,但什么都看不到。

如果您想要移动日志文件而不必使数据库脱机,则可以使用以前的方法。 我只是希望我记得正确:

  1. 在新的位置添加一个新的日志文件,如下所示:

    ALTER DATABASE foo添加日志文件(NAME = NewLog,FILENAME ='YourNewPhysicalPath',SIZE = 100MB,其他选项…);

  2. 清空旧的日志文件:

    使用foo; DBCC SHRINKFILE(OldLog,EMPTYFILE);

  3. 使用BACKUP LOG foo进行日志备份…

  4. 删除旧的日志文件:

    ALTER DATABASE foo REMOVE文件OldLog;

如果最后一个说你不能删除,因为该文件不是空的,尝试再次执行2和3,然后4。

编辑:好吧,事实certificate,我没有正确地修正它…它不会这样工作,因为gbn指出,你不能通过SHRINKFILE“清空”日志文件(但它不是我的目标 – 无论如何 – 我只是想将该文件标记为“不可用”,因此不会被重复使用,以后可以放弃)。 我认为还有一种类似的技术可以用于除第一个日志文件之外的任何其他日志文件,但是当我有机会研究这个日志文件时,我会发布这个技术。

最好的方式,这将需要一些停机时间,是使用ALTER DATABASE … SET离线。 这有几个很好的理由。

  1. 数据库所有者没有更改。 这可能会影响隐含权限和跨数据库所有权链接。
  2. 像FILESTREAM(2008年)或数据库特定configuration(如跨数据库所有权链接)的configuration不会丢失。
  3. 数据库不会使用错误的名称重新附加。 胖指法仍然发生。

更多在这里:

如何在同一个实例中移动SQL Server数据库而不丢失设置

对不起,没有“安全”的在线方法。

您必须离线访问数据库或将其分离。

您不能像数据文件那样“清空”日志文件。

MS KB 224071

你可以做一个备份,然后恢复备份。 在还原过程中,您可以为事务日志指定一个不同的位置。