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

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

显然,您可以分离整个数据库,然后使用 sp_attach 和 sp_detach 重新连接。有没有在线方法可以做到这一点,我快速谷歌了一下,但什么也没看到。

答案1

如果想在不使数据库脱机的情况下移动日志文件,我以前使用过一种方法。我只是希望我记得正确:

  1. 在新位置添加新的日志文件,例如:

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

  2. 使用以下命令清空旧日志文件:

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

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

  4. 使用以下命令删除旧日志文件:

    更改数据库 foo 删除文件 OldLog;

如果最后一条提示说由于文件不为空所以无法删除,请尝试再次执行 2 和 3,然后执行 4。

编辑:好吧,事实证明我记错了……这种方式行不通,正如 gbn 指出的那样,您无法通过 SHRINKFILE“清空”日志文件(但这不是我的目标——我只是想将文件标记为“未使用”,这样它就不会被重复使用,以后可以删除)。我认为除了第一个日志文件之外,您拥有的任何其他日志文件仍然可以使用类似的技术,但当我有机会研究它时,我会发布相关信息。

答案2

最好的方法是使用 ALTER DATABASE ... SET OFFLINE,但这需要一些停机时间。这样做有几个很好的理由。

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

更多内容请见:

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

答案3

抱歉,没有“安全”的在线方法。

您必须使数据库脱机或者将其分离。

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

微软知识库 224071

答案4

您可以进行备份,然后恢复备份。在恢复期间,您可以为事务日志指定不同的位置。

相关内容