显然,您可以分离整个数据库,然后使用 sp_attach 和 sp_detach 重新连接。有没有在线方法可以做到这一点,我快速谷歌了一下,但什么也没看到。
答案1
如果想在不使数据库脱机的情况下移动日志文件,我以前使用过一种方法。我只是希望我记得正确:
在新位置添加新的日志文件,例如:
ALTER DATABASE foo 添加日志文件(NAME=NewLog,FILENAME='YourNewPhysicalPath',SIZE=100MB,其他选项...);
使用以下命令清空旧日志文件:
使用 foo;DBCC SHRINKFILE(OldLog,EMPTYFILE);
使用 BACKUP LOG foo 进行日志备份...
使用以下命令删除旧日志文件:
更改数据库 foo 删除文件 OldLog;
如果最后一条提示说由于文件不为空所以无法删除,请尝试再次执行 2 和 3,然后执行 4。
编辑:好吧,事实证明我记错了……这种方式行不通,正如 gbn 指出的那样,您无法通过 SHRINKFILE“清空”日志文件(但这不是我的目标——我只是想将文件标记为“未使用”,这样它就不会被重复使用,以后可以删除)。我认为除了第一个日志文件之外,您拥有的任何其他日志文件仍然可以使用类似的技术,但当我有机会研究它时,我会发布相关信息。
答案2
最好的方法是使用 ALTER DATABASE ... SET OFFLINE,但这需要一些停机时间。这样做有几个很好的理由。
- 数据库所有者未发生改变。这可能对隐含权限和跨数据库所有权链接产生影响。
- FILESTREAM(2008 年)等配置或数据库特定配置(如跨数据库所有权链接)不会丢失。
- 数据库未使用错误的名称重新附加。错误指法仍然会发生。
更多内容请见:
答案3
答案4
您可以进行备份,然后恢复备份。在恢复期间,您可以为事务日志指定不同的位置。