在SQL Server 2005中将数据库从一个驱动器移动到另一个驱动器的正确方法是什么?

Kil*_*fer 25 database sql-server-2005

我不打算将数据库完全重定位到另一台服务器,只是将数据文件和日志文件移动到另一个具有更多空间的驱动器.我已经看到了如何做到这一点的相互矛盾的方向,所以我正在寻找推荐的正确方法.

小智 27

分离数据库:

use master
go 
sp_detach_db 'mydb'
Run Code Online (Sandbox Code Playgroud)

移动数据库文件(显示Xcopy到xp_cmdshell):

DECLARE @SRCData nvarchar(1000)
SET @SRCData = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\mydb.mdf';
DECLARE @SRCLog nvarchar(1000)
SET @SRCLog = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\mydb_log.ldf';
DECLARE @FILEPATH nvarchar(1000);
DECLARE @LOGPATH nvarchar(1000);
SET @FILEPATH = N'xcopy /Y ' + @SRCData + N' D:\Data';
SET @LOGPATH = N'xcopy /Y ' + @SRCLog + N' E:\Log';
exec xp_cmdshell @FILEPATH;
exec xp_cmdshell @LOGPATH;
Run Code Online (Sandbox Code Playgroud)

ReAttach数据库:

sp_attach_db 'mydb', 'D:\Data\mydb.mdf', 'E:\Log\mydb_log.ldf'
Run Code Online (Sandbox Code Playgroud)

这篇Microsoft知识库文章有更详细的内容.


Ale*_*x_L 11

另一种方法 - 分离数据库文件(database-> tasks-> detach),将它们移动到新驱动器然后再次附加.但Jay S描述的方式是最简单的.


Jay*_*y S 9

为了绝对安全,我会做以下事情:

  1. 将数据库备份到BAK文件.
  2. 使当前数据库脱机,或者根据需要将其删除.
  3. 还原数据库并更改MDF和LDF文件的位置.

脚本示例:

-- Get the file list from a backup file.  
-- This will show you current logical names and paths in the BAK file
RESTORE FILELISTONLY FROM disk = N'C:\Backups\MyDatabaseName.bak'

-- Perform the restore of the database from the backup file.  
-- Replace 'move' names (MDFLogicalName, LDFLogicalName) with those found in 
-- the previous filelistonly command
restore database MyDatabaseName
from disk = N'C:\Backups\MyDatabaseName.bak'
with move 'MDFLogicalName' to 'D:\SQLData\MyDatabaseName.mdf',
     move 'LDFLogicalName' to 'D:\SQLLogs\MyDatabaseName_log.ldf',
replace, stats=10;
Run Code Online (Sandbox Code Playgroud)

笔记

第一个脚本将为您提供第二个脚本中需要的当前名称和路径.第二个脚本将数据库还原为您希望它拥有的名称,但您可以更改要存储的位置.在上面的示例中,它将MDF和LDF文件移动到D:驱动器.