您现在的位置:首页>教程>编程开发>mssql数据库 > sqlserver数据库移动数据库路径的脚本示例 sqlserver数据库移动数据库路径的脚本示例 感谢 3lian8 的投递 时间:2013-12-06 来源:三联教程 前段时间做过这么一件事情,把原本放在c盘的所有数据库(除了sql
您现在的位置:首页 > 教程 > 编程开发 > mssql数据库 > sqlserver数据库移动数据库路径的脚本示例
sqlserver数据库移动数据库路径的脚本示例
感谢 3lian8 的投递 时间:2013-12-06 来源:三联教程
前段时间做过这么一件事情,把原本放在c盘的所有数据库(除了sql server系统文件外)文件move到d盘,,主要是为了方便后续管理以及减少磁盘i/o阻塞(c,d是2个独立磁盘)。脚本需输入2个参数:目标数据库名字和目标目录
代码如下:
use master
go
declare
@dbname sysname,
@destpath varchar(256)
declare @db table(
name sysname,
physical_name sysname)
begin try
select
@dbname = 'targetdatabasename', --input database name
@destpath = 'd:sqldata' --input destination path
-- kill database processes
declare @spid varchar(20)
declare curprocess cursor for
select spid
from sys.sysprocesses
where db_name(dbid) = @dbname
open curprocess
fetch next from curprocess into @spid
while @@fetch_status = 0
begin
exec('kill ' + @spid)
fetch next from curprocess
end
close curprocess
deallocate curprocess
-- query physical name
insert @db(
name,
physical_name)
select
a.name,
a.physical_name
from sys.master_files a
inner join sys.databases b
on a.database_id = b.database_id
and b.name = @dbname
where a.type <=1
--set offline
exec('alter database ' + @dbname + ' set offline')
--move to dest path
declare
@login_name sysname,
@physical_name sysname,
@temp_name varchar(256)
declare curmove cursor for
select
name,
physical_name
from @db
open curmove
fetch next from curmove into @login_name,@physical_name
while @@fetch_status = 0
begin
set @temp_name = right(@physical_name,charindex('',reverse(@physical_name)) - 1)
exec('exec xp_cmdshell ''move "' + @physical_name + '" "' + @destpath + '"''')
exec('alter database ' + @dbname + ' modify file ( name = ' + @login_name
+ ', filename = ''' + @destpath + @temp_name + ''')')
fetch next from curmove into @login_name,@physical_name
end
close curmove
deallocate curmove
-- set online
exec('alter database ' + @dbname + ' set online')
-- show result
select
a.name,
a.physical_name
from sys.master_files a
inner join sys.databases b
on a.database_id = b.database_id
and b.name = @dbname
end try
begin catch
select error_message() as errormessage
end catch
go
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!