前一段时间,我注意到我们的一台服务器仍有旧的 tempdb ndf 文件
sys.master_files
。
当然sys.databases
或sys.database_files
是真实的。
问题是,实例重新启动后,不会重新创建 tempdb 的新 ndf 文件,因为 sys.master_files
中的旧 ndf 文件正在阻止它们。
实际上,您可以在服务器启动时在 SQL 日志中找到它:
创建文件在尝试打开或创建物理文件时遇到操作系统错误 3(系统找不到指定的路径。)...
是的,它无法打开路径,因为它不再存在。 前段时间有一个维护窗口,数据库、临时文件和日志被移动到不同的磁盘,因此原始磁盘甚至不再存在。
问题是,我如何从
sys.master_files
更新/删除或清除旧的和未使用的行,因为它不允许临时查询及其系统视频视图。
此外,无法添加磁盘并重新启动 SQL Server 以让它创建 tempdb 文件(然后删除它们),因为它只会需要太多存储空间。
环境正在 SQL Server STD 2016 上运行。
我尝试在测试环境中启用允许更新,但这仍然不允许我在 sys.master_files 上运行查询。 我尝试删除不存在的数据库,但当然你不能删除不再存在的数据库...... 我尝试过重新启动 SQL,但这不会更新视图。 我正在考虑用模板替换 master 数据库,但我太害怕失去 Agent 工作、用户等
您需要停止 SQL Server,然后以最小配置模式从命令行启动它 (
-f
):
<path>\sqlservr.exe -f
然后移动临时数据库文件:
ALTER DATABASE tempdb
MODIFY FILE
(
NAME = <logical_file_name>,
FILENAME = '<drive that exists>:\<folder>\<file_name>.ndf'
);
然后停止服务,然后正常启动。
此外,“允许更新”大约在 20 年前就已被弃用,最后一次在 SQL Server 2000 中起作用。