I wanted to move about 50 databases on a Sharepoint server off the C-drive
(yes I know).
Sadly the only place I could move both datafiles and logfiles to was the D-Drive
(I know, I know).
Here’s the code I wrote to help me …
--move_db.sql
-- to move a user-database to different-drives on the same-server
USE [master]
GO
-- backup
DECLARE @dbname VARCHAR(max) = 'SomeDatabaseName' -- database name
DECLARE @backup_cmd VARCHAR(MAX) = 'BACKUP DATABASE ['+ @dbname + ']
TO DISK = N''\\SomeNetworkShare\SomeServerName_' + @dbname + '.bak''
WITH INIT, COMPRESSION, STATS = 1;'
SELECT (@backup_cmd)
--EXEC (@backup_cmd)
-- kill connections
DECLARE @kill_cmd VARCHAR(MAX) = 'DECLARE @kill varchar(8000) = '''';
SELECT @kill=@kill+''kill ''+convert(varchar(5),spid)+'';'' from master..sysprocesses
WHERE dbid=db_id(''' + @dbname + ''') and spid>50;
EXEC (@kill);'
SELECT (@kill_cmd)
--EXEC (@kill_cmd)
-- restore
DECLARE @restore_cmd VARCHAR(MAX) = 'RESTORE DATABASE [' + @dbname + ']
FROM DISK = N''\\SomeNetworkShare\SomeServerName_' + @dbname + '.bak''
WITH FILE = 1,
MOVE N''' + @dbname + ''' TO N''D:\SQL_Data\' + @dbname + '.mdf'',
MOVE N''' + @dbname + '_log'' TO N''D:\SQL_Log\' + @dbname + '_log.ldf'',
REPLACE, STATS = 1;'
SELECT (@restore_cmd)
--EXEC (@restore_cmd)