web-dev-qa-db-ja.com

TempDBファイルを別のドライブまたはフォルダーに移動する方法

TempDBデータまたはログファイルを現在の場所から別のドライブまたはフォルダーに移動するにはどうすればよいですか?

7
Oreo

TempDBファイルの移動は2段階のプロセスです。

  1. SQLに、新しいTempDBファイルの移動先を伝えます。
  2. 再起動変更を有効にするためのSQL Serverサービス

新しいTempDBファイルを作成する場所をSQLに指示するには、次を使用できます。

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];

これにより、ファイルを新しいdrive:\folderに移動するために実行する必要があるT-SQLステートメントが生成されます。 (画像をクリックすると大きくなります)

Image showing 2 rows with details on TempDB files and T-SQL statements to move them

移動ステートメントを実行したら、上記のクエリを再度実行して、Current Location列に新しいdrive:\folderが表示されていることを確認できます。

Image showing TempDB files' new locations

変更に満足したら、SQL Serverサービスを再起動します

9
Oreo

上記のスクリプトのサイズ(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];
4
gtsqldba