tempdb太大引起磁盘容量不足的处理

最近公司项目在用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的权限改为完全控制,重启服务即可。

参考资料:http://www.cnblogs.com/shadow-ccos/p/5304106.html

    原文作者:shakesbears
    原文地址: https://www.jianshu.com/p/f7674b38833f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞