欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

sqlserver 2008 tempdb 数据库数据和日志文件过大怎么解决?

程序员文章站 2022-11-01 08:01:44
今天早上服务器预警,显示空间不足。检查服务器发现tempdb系统数据库占用了大量的控件,日志文件就占用了50G。 1、首先通过系统自带的收缩工具收缩数据库,不起作用。(数据库&m...

今天早上服务器预警,显示空间不足。检查服务器发现tempdb系统数据库占用了大量的控件,日志文件就占用了50G。

1、首先通过系统自带的收缩工具收缩数据库,不起作用。(数据库—右键—任务—收缩—文件)

2、查询数据库当前的活动状态

 USE [master]
 SELECT [name] ,[database_id] ,[log_reuse_wait] ,[log_reuse_wait_desc] FROM [sys].[databases] WHERE name ='tempdb'

结果如下:

sqlserver 2008 tempdb 数据库数据和日志文件过大怎么解决?

结论:事务处于活动状态

3、查询虚拟文件信息

 USE tempdb
 DBCC LOGINFO('tempdb')

结果如下:

sqlserver 2008 tempdb 数据库数据和日志文件过大怎么解决?

结论:存在大量使用中的虚拟文件(status :2)

4、查询并杀掉正在运行的事务

USE master

SELECT  '正在运行事务的会话的ID' = session_id ,              
        '事务的 ID' = transaction_id
FROM    sys.dm_tran_session_transactions  --会话中的事务,识别所有打开的事务     
WHERE   is_user_transaction = 1    
        
        
KILL 正在运行事务的会话的ID

5、现在就可以正常收缩数据库及日志文件

小结:造成数据库不能收缩的原因很多,这只是其中的一个原因。查询数据库状态找到病症,才能对症下药。