最近公司项目在用sqlserver2012,因数据量非常大,程序跑起来临时表的数据量高达40多G,严重影响C盘的存量,所以决定将临时表文件迁移到存量比较大的分区。
- 临时方法:重启MSSQLSERVER服务可删除缓存,可是不方便,更好的方法是更换缓存分区。
具体方法:
1.在sqlserver中运行以下代码:
SELECT name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID('tempdb');
运行后会返回tempdb.mdf与templog.ldf的路径。
2.在控制面板-管理工具-服务中停止MSSQLSERVER的服务并将以上两个文件移动到其他分区,并记下路径。再执行以下语句:
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'D:\tempdb\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'D:\tempdb\templog.ldf');
NAME = tempdev,NAME = templog 是逻辑名,FILENAME 指向的是数据库文件的实际位置
3.重启服务,检查sqlserver是否移动成功:
FROM sys.master_files
WHERE database_id = DB_ID('tempdb');
运行后会返回新的tempdb.mdf与templog.ldf的路径。
坑来了!
第二天重启电脑后发现sqlserver2012不能登录了,MSSQLSERVER 显示[[SQL Server无法连接到服务器]标题: 连接到服务器 --------- 无法连接到 ****],找不到指定文件......并且启动MSSQLSERVER服务时会自动停止,经过查看计算机管理日志后发现错误:
- 尝试打开或创建物理文件 'F:\tempdb\tempdb.mdf' 时,CREATE FILE 遇到操作系统错误 5(拒绝访问。)。
- FCB::Open failed: 无法打开文件号 1 的文件 F:\tempdb\tempdb.mdf。操作系统错误: 5(拒绝访问。)。
确定是改变临时表路径引起的权限问题!
解决方法:
分区->属性->安全
把User的权限改为完全控制,重启服务即可。