移动数据库日志目的地?

soM*_*arn 6 sql-server configuration

我目前将 SQL DB 和日志文件发送到同一个驱动器。我想将日志文件移动到自己的驱动器。有没有一种简单的方法可以实现这一点,是否需要停机/重启服务器?

Aar*_*and 11

请不要分离和附加您的数据库。如果您分离它并且发生了某些事情,那么您现在的数据库副本为零。更安全的方法:


备份/恢复

USE master;
GO

BACKUP DATABASE floob TO DISK = 'c:\wherever\floob.bak' WITH INIT, COPY_ONLY;

ALTER DATABASE floob SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

RESTORE DATABASE floob FROM DISK = 'c:\wherever\floob.bak'
  WITH REPLACE, 
  MOVE N'floob_log' TO 'c:\new_path\floob.ldf';
Run Code Online (Sandbox Code Playgroud)

离线/在线

(在执行此操作之前,您仍应进行备份。)

USE master;
GO

ALTER DATABASE floob SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

ALTER DATABASE floob MODIFY FILE 
  (name = N'floob_log', filename = 'c:\new_path\floob.ldf');

ALTER DATABASE floob SET OFFLINE;
Run Code Online (Sandbox Code Playgroud)

现在转到 Windows 资源管理器,ldf 文件复制到新位置,并重命名原始文件。确保 SQL Server 服务帐户对新文件夹具有足够的权限。然后:

ALTER DATABASE floob SET ONLINE;

ALTER DATABASE floob SET MULTI_USER WITH ROLLBACK IMMEDIATE;
Run Code Online (Sandbox Code Playgroud)

数据库备份并运行后,您可以安全地从源位置删除日志文件。


这两种方法都需要短暂的停机时间(多少取决于很多因素,包括数据库的大小和驱动器本身的 I/O 速度以及它们之间的任何路径),但都不需要您重新启动服务器.