Tempdb配置有8个文件,我们正在将它们减少到4个。我阅读了许多博客,其中Server将允许您删除多余的..ndf,如果您运行4 dbcc drop和file语句,然后运行dbcc shrinkfile和emptyfile子句,然后运行alter命令和remove file子句。当尝试此操作时,错误
:第9页:364016无法移动,因为它是工作表页。Msg 2555、级别16、状态1、第19行不能将文件"tempdev8“的所有内容移到其他地方以完成空文件操作。DBCC执行完成。如果DBCC打印错误消息,请与系统管理员联系。
我的问题是:
我应该尝试通过标识锁定的临时表来删除它们,然后,重新运行dbcc语句,还是简单地运行ALTER语句,然后重新启动实例,或者重新启动实例,然后重新运行alter?我意识到temp表被tempdb一致使用的问题,这导致删除文件无法工作。
发布于 2016-01-08 16:06:45
根据微软社交网站上的迈克·罗斯的回答,我认为这应该是可行的:
DBCC FREESYSTEMCACHE ('ALL');
DBCC FREEPROCCACHE;这将影响性能,因为Server将重新创建查询计划,但它应该允许您收缩TEMPDB。
发布于 2021-03-02 11:16:45
我首先运行以下命令,看看是否可以删除该文件,而不必重新启动sql服务。
USE [tempdb]
GO
DBCC DROPCLEANBUFFERS
GO
DBCC FREEPROCCACHE
GO
DBCC FREESESSIONCACHE
GO
DBCC FREESYSTEMCACHE ( 'ALL')
GO
DBCC SHRINKFILE (N'temp5' , EMPTYFILE)
GO
ALTER DATABASE [tempdb] REMOVE FILE [temp5]
GO如果文件被阻止,那么我将更改大小和文件增长。然后,如果可以重新启动sql服务,则等待下一个服务窗口。然后文件是小的,空的,并锁定增长。这样你就可以很容易地删除它们。
--before the sql server restart
USE [master]
ALTER DATABASE TempDB MODIFY FILE
(NAME = temp5, SIZE = 1KB, FILEGROWTH = 0 )
GO
--then after the sql server restart
USE [TempDB]
DBCC SHRINKFILE (N'temp5' , EMPTYFILE)
GO
ALTER DATABASE [tempdb] REMOVE FILE [temp5]
GOhttps://dba.stackexchange.com/questions/125644
复制相似问题