您好,欢迎访问一九零五行业门户网

改变当前Server下所有DB的物理路径的方案参考

当你需要改变当前server下所有db的物理路径时,比如,从c盘搬到d盘,你会怎么办呢?或许你想到逐个对db进行分离--〉搬文件--〉附加来实现,可是系统数据库并不能让你直接做分离这个动作,如下图所示。那怎么办呢?不急,这里提供一个可行的方案供大家参考。
当你需要改变当前server下所有db的物理路径时,比如,从c盘搬到d盘,你会怎么办呢?或许你想到逐个对db进行分离--〉搬文件--〉附加来实现,可是系统数据库并不能让你直接做分离这个动作,如下图所示。那怎么办呢?不急,这里提供一个可行的方案供大家参考。
方案分3步进行:
通过sql更新所有文件的路径停掉sql server服务,手动将文件搬到目标位置为master更改sql server的启动参数检查当前server中db的文件位置:
select database_id,name, physical_name,case when type = 0 then 'data' when type = 1 then 'log' end as filetype from sys.master_files
使用动态sql生成alter database的脚本(排除master):
select 'alter database ' + d.name + ' modify file ( name = ' + f.name + ', filename = ' +' ''d:\newfolder\'+ --这里是目标路径right(physical_name, charindex('\',reverse(physical_name))-1 ) + ''' ) 'from sys.databases dinner join sys.master_files f on d.database_id = f.database_idwhere type = 0 and d.database_id 1
运行完alter database的脚本后,应该会看到一堆类似以下截图的消息:
下面,你可以停掉sql server服务,然后将物理文件搬到目标路径下。当所有文件(包括master)都搬完之后,再来修改启动参数:
启动sql server配置管理器
右击sql server实例--〉属性--〉启动参数,然后更新master .mdf的路径
一旦你更新了启动参数,应该就可以了。不过,如果服务账号对新的路径没有访问权限,sql server将会启动失败。
ps:如果要对production server实施该方案,请事先在test server试验,并对production server进行完整备份,以备不测。
其它类似信息

推荐信息