在Sql server 2008上使用delete删除4180万条记录时(特别注意下删除大数据最好不要使用delete删除记录,效率太低了,推荐使用Truncate table方式删除),发生报错:
无法为数据库 'tempdb' 中的对象 '<temporary system object: 422212474044416>' 分配空间,因为
'PRIMARY' 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的
现有文件启用自动增长,以便增加可用磁盘空间。
原因是数据库默认安装在了C盘,而现在C盘已经没有任何空间了!
这就是tempdb没有规划好的结果,今年11月也是在一个客户那在两个数据库之间导数据导了2个小时时发生报错,当时tempdb存放在C盘里,执行到第二个小时左右时tempdb.mdf 增涨到了10G刚好把C盘撑爆了!然后报错中断......
解决办法是把tempdb路径设置到空间足够的磁盘上,这也是新建数据库时要考虑到的问题:
先看查看原tempdb存放路径的两种方式:
1、使用sp_helpfile
use tempdb
go
sp_helpfile
go
结果如下:
tempdev 1 E:\MSSQL\tempdb.mdf PRIMARY 14165056 KB Unlimited 10% data only
templog 2 E:\MSSQL\templog.ldf NULL 164672 KB Unlimited 10% log only
2、使用sys.master_files
use master
go
select * from sys.master_files where name like 'temp%'
结果如下:
修改tempdb路径的方法为:
use master
go
Alter database tempdb modify file (name = tempdev, filename = 'D:\MSSQL\tempdb.mdf')
go
Alter database tempdb modify file (name = templog, filename = 'D:\MSSQL\templog.ldf')
go
注意运行完后需要重启实例才会生效。