如何将 TempDB 文件移动到不同的驱动器或文件夹?

Ore*_*reo 9 sql-server t-sql tempdb datafile

如何将我的TempDB 数据或日志文件从现在的任何位置移动到不同的驱动器或文件夹

Ore*_*reo 12

移动 TempDB 文件是一个两步过程:

  1. 告诉SQL哪里你希望你的新TempDB文件去
  2. 重新启动SQL Server服务,以使更改生效

要告诉 SQL 在哪里创建新的 TempDB 文件,您可以使用:

DECLARE @newDriveAndFolder VARCHAR(8000);

SET @newDriveAndFolder = 'Z:\YourTempDBfolder';

SELECT [name] AS [Logical Name]
    ,physical_name AS [Current Location]
    ,state_desc AS [Status]
    ,size / 128 AS [Size(MB)] --Number of 8KB pages / 128 = MB
    ,'ALTER DATABASE tempdb MODIFY FILE (NAME = ' + QUOTENAME(f.[name])
    + CHAR(9) /* Tab */
    + ',FILENAME = ''' + @newDriveAndFolder + CHAR(92) /* Backslash */ + f.[name]
    + CASE WHEN f.[type] = 1 /* Log */ THEN '.ldf' ELSE '.mdf' END  + ''''
    + ');'
    AS [Create new TempDB files]
FROM sys.master_files f
WHERE f.database_id = DB_ID(N'tempdb')
ORDER BY f.[type];
Run Code Online (Sandbox Code Playgroud)

这将生成您需要运行的 T-SQL 语句,以将文件移动到drive:\folder您想要的新位置。(点击图片放大)

显示 2 行的图像,其中包含有关 TempDB 文件和用于移动它们的 T-SQL 语句的详细信息

运行移动语句后,您可以再次运行上述查询,以检查该Current Location列现在是否显示了新的drive:\folder.

显示 TempDB 文件的新位置的图像

对更改感到满意后,请重新启动 SQL Server 服务


小智 6

上面脚本中大小(MB)的计算已关闭。不要忘记 sys.master_files 中的大小是 8KB 页面的数量。这是正确的脚本:

DECLARE @newDriveAndFolder VARCHAR(8000);

SET @newDriveAndFolder = 'Z:\YourTempDBfolder';

SELECT [name] AS [Logical Name]
    ,physical_name AS [Current Location]
    ,state_desc AS [Status]
    ,size*8/1024 AS [Size(MB)] --Number of 8KB pages dived by 1024
    ,'ALTER DATABASE tempdb MODIFY FILE (NAME = ' + QUOTENAME(f.[name])
    + CHAR(9) /* Tab */
    + ',FILENAME = ''' + @newDriveAndFolder + CHAR(92) /* Backslash */ + f.[name]
    + CASE WHEN f.[type] = 1 /* Log */ THEN '.ldf' ELSE '.mdf' END  + ''''
    + ');'
    AS [Create new TempDB files]
FROM sys.master_files f
WHERE f.database_id = DB_ID(N'tempdb')
ORDER BY f.[type];
Run Code Online (Sandbox Code Playgroud)