Kil*_*fer 25 database sql-server-2005
我不打算将数据库完全重定位到另一台服务器,只是将数据文件和日志文件移动到另一个具有更多空间的驱动器.我已经看到了如何做到这一点的相互矛盾的方向,所以我正在寻找推荐的正确方法.
小智 27
use master
go
sp_detach_db 'mydb'
Run Code Online (Sandbox Code Playgroud)
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)
sp_attach_db 'mydb', 'D:\Data\mydb.mdf', 'E:\Log\mydb_log.ldf'
Run Code Online (Sandbox Code Playgroud)
这篇Microsoft知识库文章有更详细的内容.
为了绝对安全,我会做以下事情:
脚本示例:
-- 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:驱动器.