Как изменить путь к tempdb

Системная база данных tempdb служит рабочим пространством для хранения временных объектов, таких как временные таблицы, промежуточные результаты вычислений, временные хранимые процедуры, результаты буферов и сортировки, внутренние объекты, создаваемые компонентой Database Engine и пр. Кроме того, все изменения данных в базах данных, в которых используются транзакции изоляции моментальных снимков с зафиксированным чтением и транзакции изоляции моментальных снимков, а также изменения данных для таких операций, как операции с индексами в сети, множественные активные результирующие наборы (режим MARS) и триггеры AFTER также хранятся в системной базе данных tempdb. Таким образом, данная база данных используется системой довольно активно, и возможно получить значительный прирост производительности путем переноса файлов базы данных tempdb на отдельный дисковый накопитель, более быстрый SSD-диск или даже RAM-диск. О перемещении системной базы данных tempdb в MS SQL Server 2012 (справедливо для более ранних версий) и пойдет речь в данной статье.

logo_sql_2012Системная база данных tempdb служит рабочим пространством для хранения временных объектов, таких как временные таблицы, промежуточные результаты вычислений, временные хранимые процедуры, результаты буферов и сортировки, внутренние объекты, создаваемые компонентой Database Engine и пр. Кроме того, все изменения данных в базах данных, в которых используются транзакции изоляции моментальных снимков с зафиксированным чтением и транзакции изоляции моментальных снимков, а также изменения данных для таких операций, как операции с индексами в сети, множественные активные результирующие наборы (режим MARS) и триггеры AFTER также хранятся в системной базе данных tempdb. Таким образом, данная база данных используется системой довольно активно, и возможно получить значительный прирост производительности путем переноса файлов базы данных tempdb на отдельный дисковый накопитель, более быстрый SSD-диск или даже RAM-диск. О перемещении системной базы данных tempdb в MS SQL Server 2012 (справедливо для более ранних версий) и пойдет речь в данной статье.

1. Указание каталога хранения файлов базы данных tempdb во время установки  MS SQL Server 2012

Указать отдельный каталог расположения файлов базы данных tempdb, можно еще на стадии установки MS SQL Server 2012, на странице настройки компоненты Database Engine на вкладке «Каталоги данных» (Data Directories).

peremeshhenie-bd-tempdb_01

Подробнее про установку MS SQL Server 2012 можно прочить здесь.

2. Изменения каталога хранения файлов базы данных tempdb для существующего экземпляра MS SQL Server

Если же имеется уже установленный экземпляр MS SQL Server, то изменить каталог хранения файлов базы данных tempdb не удастся с помощью стандартных средств отсоединение и присоединение базы данных. В этом случае поможет инструкция ALTER DATABASE языка Transact-SQL. Подключимся к экземпляру MS SQL Server, для которого необходимо выполнить изменения, с помощью программы  «SQL Server Management Studio».

peremeshhenie-bd-tempdb_02

Просмотрим текущее расположение файлов базы данных tempdb. Для этого в обозревателе объектов (Object Explorer) раскроем вкладки «Базы данных» (Databases) — «Системные базы данных» (System Databases). Кликнем правой кнопкой мыши по базе данных tempdb и в контекстном меню выберем пункт «Свойства» (Properties).

peremeshhenie-bd-tempdb_03

В открывшемся окне свойств перейдем на вкладку «Файлы» (Files), где можно увидеть имена файлов (File Name), логические имена файлов (Logical Name) и путь расположения каждого из файлов (Path).

Для того чтобы изменить путь расположения необходимо выполнить запрос:

USE master;
GO
ALTER DATABASE tempdb 
MODIFY FILE (NAME = tempdev, FILENAME = 'E:SQL_Temptempdb.mdf');
GO
ALTER DATABASE tempdb 
MODIFY FILE (NAME = templog, FILENAME = 'E:SQL_Temptemplog.ldf');
GO

Где E:SQL_Temp новый путь расположения файлов базы данных tempdb. Каталоги файла данных базы — файла tempdb.mdf (или файлов, если их несколько) и файла журнала транзакций — tempdb.ldf могут различаться и, соответственно, могут быть изменены независимо. Для того чтобы выполнить запрос, необходимо нажать кнопку на панели задач «Создать запрос» (New Query), в окне нового запроса ввести текст запроса и нажать кнопку «Выполнить» (Execute), расположенную там же, на панели задач.

peremeshhenie-bd-tempdb_05

После чего необходимо перезапустить экземпляр SQL Server. Сделать это можно, здесь же, кликнув правой кнопкой мыши по имени сервера в обозревателе объектов, и выбрав в контекстном меню пункт «Перезапустить» (Restart).

peremeshhenie-bd-tempdb_06

Если теперь вызвать свойства базы данных tempdb, можно увидеть, что путь расположения файлов изменился.

При старте SQL Server база данных tempdb создается каждый раз заново. Поэтому из старого каталога файлы tempdb.mdf и tempdb.ldf необходимо удалить вручную.

3. Универсальный скрипт для продвинутых

-------------------------------------------
-- Скрипт перемещает все файлы базы данных tempdb в указанный каталог
-- Версия от 27.10.2021
-- Свежие версии скриптов: https://github.com/Tavalik/SQL_TScripts
 
-------------------------------------------
-- НАСТРАИВАЕМЫЕ ПЕРЕМЕННЫЕ
-- Новый каталог для базы tempdb
DECLARE @Path as NVARCHAR(400) = 'E:SQL_Temp'
 
-------------------------------------------
-- СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ
DECLARE @physicalName NVARCHAR(500), @logicalName NVARCHAR(500)
DECLARE @SQLString NVARCHAR(400)
 
-------------------------------------------
-- ТЕЛО СКРИПТА
USE master;
 
-- Цикл по всем файлам базы данных tempdb
DECLARE fnc CURSOR LOCAL FAST_FORWARD FOR 
	(
		SELECT
			name,
			physical_name
		FROM sys.master_files 
		WHERE database_id = DB_ID('tempdb')
	)
OPEN fnc;
FETCH fnc INTO @logicalName, @physicalName;
WHILE @@FETCH_STATUS=0
 
	BEGIN
		SET @SQLString = '
		ALTER DATABASE tempdb
		MODIFY FILE (NAME = ' + @logicalName 
		+ ', FILENAME = ''' + @Path + '' 
		+ REVERSE(SUBSTRING(REVERSE(@physicalName), 1, CHARINDEX('', REVERSE(@physicalName))-1)) 
		+ ''');'
 
		PRINT @SQLString
		EXEC sp_executesql @SQLString
 
		FETCH fnc INTO @logicalName, @physicalName;
	END;
 
CLOSE fnc;
DEALLOCATE fnc;

Больше полезных скриптов здесь: https://github.com/Tavalik/SQL_TScripts

Оглавление

  • Расположение файлов базы tempdb по умолчанию
  • Выполняем запрос на перенос базы tempdb на другой диск
  • Проверяем новые пути tempdb через запрос

Введение

Microsoft SQL Server использует tempdb при выполнении запросов и является служебной базой и хранит в себе временные оьъекты (временные таблицы, процедуры, вычисления, сортировки, объекты и т.д.).

Как правило база tempdb всегда сильно нагружена и её ускорение даст нам небольшой прирост в производительности.
Одна из рекомендаций — перенос базы tempdb на другой дискю Лучше всего переносить на SSD диск.

Это основная причина для переноса tempdb на другой диск и эта процедура довольно простая.

Расположение файлов базы tempdb по умолчанию

Во время установки MS SQL Server будет предложена Настройка компонента Database Engine, где в вкладке Каталоги данных мы можем
выбрать каталог хранения базы данных tempdb. По умоланию база tempdb распологается в следующем каталоге:

C:Program FilesMicrosoft SQL ServerMSSQL14.MSSQLSERVERMSSQLDATA

Выполняем запрос на перенос базы tempdb на другой диск

Поскольку база MS SQL Server постоянно использует базу данных, базу tempdb не получится переместить сделав просто отсоединение и присоединение базы данных.
Для перемещения файлов базы tempdb нам необходимо создать запрос и выполнить скрипт под фото, предварительно подставив в него свои пути нового расположения перемещаемой базы.

USE master
GO
ALTER DATABASE tempdb 
MODIFY FILE (NAME = tempdev, FILENAME = 'D:TEMP_DBtempdb.mdf')
GO
ALTER DATABASE  tempdb 
MODIFY FILE (NAME = templog, FILENAME = 'D:TEMP_DBtemplog.ldf')
GO

После выполнения запроса вам потребуется Перезапустить Microsoft SQL Server. В процессе перезапуска пользователей не выбросит из 1С 😏 так что жмём смелее! После перезапуска сервер самостоятельно создаст базу tempdb там, где вы указали. Старые файлы необходимо самостоятельно
подчистить 🗑.

Также помимо файлов tempdb.mdf и templog.ldf могут быть ещё несколько штук типа tempdb_mssql_1.ndf. Их таже необходимо перенести в новый каталог:

ALTER DATABASE tempdb MODIFY FILE ( NAME = temp2, FILENAME = 'D:TEMP_DBtempdb_mssql_1.ndf' )
ALTER DATABASE tempdb MODIFY FILE ( NAME = temp3, FILENAME = 'D:TEMP_DBtempdb_mssql_2.ndf' )

Проверяем новые пути tempdb через запрос

После того, как мы перенесли все файлы в новую директорию и перезапустили службу MS SQL SERVER мы можем проверяем новые пути расположения баз данных tempdb выполнив запрос ниже:

SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');

В ответ мы получим таблицу с новыми путями до файлов баз данных TEMPDB

Вот и всё 😎

Роман, данная операция выполняется в несколько этапов.

Настоятельно рекомендую не размещать файлы в корне диска даже если он создан только под хранение баз(ы). Создайте отдельную директорию, к примеру, так её и назовите:
TEMPDB 

Убедитесь, что у учётной записи, из-под которой запущена служба SQL Server Database Engine, есть права на чтение и модификацию этой директории. Лучше даже выдать полные права на NT SERVICEMSSQLSERVER,
либо NT SERVICEMSSQL$ имя_экземпляра
если инстанс именованный.

Далее открываем SQL Server Management Studio и выполняем следующую команду:

SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');

Результатом будет что-то такое:

Нам нужно содержение колонки name, это логические имена файлов на которые разбита база.

Для каждого файла нужно выполнить следующий код:

ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_pathos_file_name' )

Где

database_name — имя базы, в нашем случае – tempdb

logical_name — логическое имя файла базы, в случае моего примера это tempdev, templog, temp2, temp3 и т.д.

new_pathos_file_name — полный путь и физическое название файла, к примеру: T:TEMPDBtempdb.mdf
Вышеупомянутый запрос, который вернул логические имена файлов, также возвращает колонку
CurrentLocation По сути, Вам просто нужно скопировать её содержимое и поменять первую часть строки с текущим размещением файла на новое.

Для моего примера код для перемещения файлов будет следующий:

ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = tempdev, FILENAME = T:TEMPDBtempdb.mdf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = templog, FILENAME = T:TEMPDBtemplog.ldf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = temp2, FILENAME = T:TEMPDBtempdb_mssql_2.ndf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = temp3, FILENAME = T:TEMPDBtempdb_mssql_3.ndf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = temp4, FILENAME = T:TEMPDBtempdb_mssql_4.ndf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = temp5, FILENAME = T:TEMPDBtempdb_mssql_5.ndf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = temp6, FILENAME = T:TEMPDBtempdb_mssql_6.ndf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = temp7, FILENAME = T:TEMPDBtempdb_mssql_7.ndf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = temp8, FILENAME = T:TEMPDBtempdb_mssql_8.ndf )

Сгененрировал я его седующим путём (перед выполнением нажмите CTRL + T для возврата результата в виде текста):

SELECT 'ALTER DATABASE ''tempdb'' MODIFY FILE ( NAME = '+[name]+', FILENAME = '+[physical_name]+' )'
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');

Осталось только перезапустить службу SQL Server Database Engine. Сделать это можно в любое удобное Вам время. Новые файлы начнут использоваться только после перезапуска службы. 

Правильность настроек можно определить с помощью того же запроса выше:

SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');

Запрос должен вернуть новые пути к файлам. Хотя да, до перезапуска службы они будут неактуальны.

Важные моменты: 

  1. Файлы не обязательно переносить с места на место, система сама создаст их во время старта службы.
  2. Если файлы большие
    – 
    желательно дать системной учётной записи право на Perform Volume Maintenance Tasks
  3. Пока не будет создан основной файл и файл лога — служба полностью не стартует, СУБД будет не доступна.
  4. Рекомендую для проверки не перезапускать службу, а остановить. Далее переименовать старую директорию где была tempdb, и только потом запускать службу. Так Вы точно поймёте, что всё работает верно и всегда сможете откатиться
    обратно.

Частые ошибки, которые с которыми ко мне обращаются за помощью:

  1. Забыли выдать доступ на новую директорию
  2. Нашли скрипт в интернете на перенос только основного файла данных и журнала транзакций, бездумно запустили
  3. Поменяли настройки, но не перезапустили службу по ряду причин. Другой администратор увидел пустую папку и удалил её. Когда службу перезапустили, она не стартовала, так как не было где разместить tempdb

В любом случае, если что-то не так – посмотрите лог ошибок. Ну и пишите. Уверен, что всё пройдёт удачно, операция не сложная.

Временная база данных (tempdb) в SQL Server — это системная база данных, доступная всем пользователям, подключенным к экземпляру SQL Server. В tempdb хранятся как временные пользовательские объекты, так и внутренние объекты, создаваемые ядром СУБД.

Tempdb пользуется особой популярностью, поэтому для нее настоятельно рекомендуется размещать файлы данных и журнала транзакций на специально выделенных дисках, отдельно от операционной системы и других баз данных. И желательно на максимально быстром хранилище с низким временем задержки, типа SSD NVMe или Intel Optane.

Также для ускорения ввода-вывода рекомендуется создавать несколько файлов данных в зависимости от количества логических процессоров, выделенных для сервера базы данных (Database Engine). Если число логических процессоров меньше восьми, рекомендуется создать файл данных для каждого логического процессора, если равно или больше восьми, то используйте восемь файлов данных.

В идеале размещение баз лучше планировать заранее, но, к сожалению, это не всегда возможно. И может возникнуть ситуация, когда требуется переместить файлы базы на уже работающем сервере. Для tempdb эта процедура несложная, рассмотрим ее по пунктам.

Первым делом выделяем новый диск H, на котором будут находиться файлы TempDB.  Размещать файлы базы в корне диска не рекомендуется, даже если диск целиком выделен под их хранение, поэтому создаем отдельную директорию, назовем ее TempDB. На эту директорию необходимо выдать права на чтение и изменение учетной записи, от имени которой работает служба MS SQL (SQL Server Database Engine).

Теперь нам надо выяснить текущее расположение файлов tempdb. Сделать это можно из графической оснастки, открыв в свойствах базы вкладку Files

Просмотр файлов TempDB

либо с помощью вот такого sql-запроса:

SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');

В поле Name мы получаем логическое имя файла, а в поле CurrentLocation путь к файлу. Как видите, в нашем примере имеется 8 файлов базы и один файл журнала транзакций.

Просмотр файлов TempDB с помощью запроса

Для каждого файла нужно выполнить следующий код:

ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_pathfile_name' )

Где:

• database_name — имя базы (в нашем случае tempdb);
logical_name — логическое имя файла базы;
new_pathfile_name — новый путь и физическое имя файла.

Можно немного облегчить себе жизнь и сгенерировать код с помощью запроса (перед выполнением нажмите CTRL + T для возврата результата в виде текста):

SELECT 'ALTER DATABASE ''tempdb'' MODIFY FILE ( NAME = '+[name]+', FILENAME = '+[physical_name]+' )'
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');

Подготовка команд для переноса файлов

В полученном запросе остается только поменять старый путь на новый. В результате получим:

ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = tempdev, FILENAME = H:TEMPDBtempdb.mdf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = templog, FILENAME = H:TEMPDBtemplog.ldf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = temp2, FILENAME = H:TEMPDBtempdb_mssql_2.ndf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = temp3, FILENAME = H:TEMPDBtempdb_mssql_3.ndf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = temp4, FILENAME = H:TEMPDBtempdb_mssql_4.ndf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = temp5, FILENAME = H:TEMPDBtempdb_mssql_5.ndf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = temp6, FILENAME = H:TEMPDBtempdb_mssql_6.ndf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = temp7, FILENAME = H:TEMPDBtempdb_mssql_7.ndf )
ALTER DATABASE 'tempdb' MODIFY FILE ( NAME = temp8, FILENAME = H:TEMPDBtempdb_mssql_8.ndf )

Выполняем полученный запрос.

Перенос файлов

Рестартуем службу MS SQL (SQL Server Database Engine). Проверяем в настройках tempdb расположение файлов.

Проверка перемещения файлов

И затем идем в новую папку и проверяем, что в ней появились файлы.

Проверка файлов в папке

На этом процесс переноса завершен и можно удалить файлы из старого расположения. В завершение некоторые важные моменты:

• Tempdb создается заново всякий раз, когда стартует служба SQL. Поэтому файлы не требуется переносить с места на место, система сама создаст их во время старта службы;
• Пока не будет создан основной файл и файл лога — служба полностью не стартует и СУБД будет недоступна;
• Для подстраховки можно не перезапускать службу MS SQL, а полностью остановить ее, переименовать старую директорию с tempdb, и только потом запускать службу. Так будет сразу видно, что всё работает, а в случае проблем можно быстро откатить изменения;
• Если файлы большие – желательно дать учётной записи SQL право Perform Volume Maintenance Tasks (Выполнение задач по обслуживанию томов).

There are times when as a DBA you find the need to move TempDB Data and Log Files to a new Drive. This article explains all the steps you need to follow to move TempDB files.

Introduction

This article explains the steps you must follow to move TempDB database from one drive to another in SQL Server. However, for the changes to come into effect you must restart SQL Server Service.

Overview of Steps to move TempDB data and log files to new location are:-

  • Identify the location of TempDB Data and Log Files
  • Change the location of TempDB Data and Log files using ALTER DATABASE
  • Stop and Restart SQL Server Service
  • Verify the File Change
  • Delete old tempdb.mdf and templog.ldf files

This article outlines the step to Change the Location of TempDB Data and Log files in SQL Server.

Move TempDB / Change TempDB Location / Move TempDB to Another Drive / Move TempDB to New Drive / How to Move SQL Server TempDB Files

Identify the location of TempDB Data and Log Files

In the New Query window of SQL Server Management Studio, execute the below-mentioned script to identify the location of TempDB data and log file.

Use master
GO

SELECT 
name AS [LogicalName]
,physical_name AS [Location]
,state_desc AS [Status]
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');
GO

In a Failover Cluster Instance to Move TempDB read, How to Configure TempDB on Local Disk in SQL Server 2012/2014 Failover Cluster to Improve Performance

Once you have identified the location of TempDB files, then the next step will be to create the respective folders on the new drive where you would like to store the TempDB data and log file. However, you need to make sure that the new location where the TempDB files are stored is accessible by SQL Server. i.e., you need to ensure that the Account under which SQL Server Service is running has read and write permissions on the folder where the files are stored.

Top Trending SQL Server DBA and Developer Articles and Tips

  • SQL Delete Duplicate Rows from a SQL Table in SQL Server
  • New to SQL Server? Get Started and Learn Transact-SQL
  • SQL Server Tutorial: T-SQL Enhancements in SQL Server
  • SQL Server Tutorial: Database Backups with Examples
  • How to Configure Contained Databases Feature, Create Contained Databases, Create Access to Contained Databases, and Connect to Contained Databases.
  • How to Backup, Restore, Synchronize, Attach, Detach, Automate Backup, and Perform DBCC Check of Analysis Services Databases.
  • How to Fix PowerShell Execution Policy Error in Windows Server
  • How to Repair Suspect Database in SQL Server
  • How to Enable Dedicated Administrator Connection in SQL Server
  • How to Configuring Database Instant File Initialization Feature of SQL Server
  • How to Backup and Restore Resource Database in SQL Server
  • How to Start SQL Server in Single User Mode?
  • How to Start SQL Server with Minimal Configuration
  • How to Detect Virtual Log Files in SQL Server Transaction Log File
  • How to Identify the Location of Resource Database in SQL Server
  • How to Disable an Index in SQL Server
  • How to Monitor Transaction Log File Usage in SQL Server
  • How to Connect to SQL Server When all System Administrators are Locked Out
  • FORMAT SQL Server Dates Using FORMAT Function in SQL Server

Change the location of TempDB Data and Log files using ALTER DATABASE

Execute the below ALTER DATABASE command to change the location of TempDB Data and Log file in SQL Server.

USE master;
GO

ALTER DATABASE tempdb 
MODIFY FILE (NAME = tempdev, FILENAME = 'T:MSSQLDATAtempdb.mdf');
GO

ALTER DATABASE tempdb 
MODIFY FILE (NAME = templog, FILENAME = 'T:MSSQLDATAtemplog.ldf');
GO

Once the above script has executed successfully you will receive a message to restart SQL Server Service for the changes to come into effect.

The file "tempdev" has been modified in the system catalog. The new path will be used the next time the database is started.

The file "templog" has been modified in the system catalog. The new path will be used the next time the database is started. 

Stop and Restart SQL Server Service

Stop and restart the instance of SQL Server for the changes to come into effect.

Verify the File Change

Execute the below TSQL to verify whether TempDB Data and Log files are residing in the new location.

Use master
GO

SELECT 
name AS [LogicalName]
,physical_name AS [Location]
,state_desc AS [Status]
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');
GO

Delete old tempdb.mdf and templog.ldf files

The final step will be to delete the tempdb.mdf & templog.ldf files from the original location.

Important Note: SQL Server doesn’t support moving TempDB Database using backup/restore and by using detach database methods.

Error Message Received when you try Backup and Restore Method

Msg 3147, Level 16, State 3, Line 1 
Backup and restore operations are not allowed on database tempdb. 
Msg 3013, Level 16, State 1, Line 1 
BACKUP DATABASE is terminating abnormally.

Error Message Received when you try Detach Method

Msg 7940, Level 16, State 1, Line 1 
System databases master, model, msdb, and tempdb cannot be detached.

Conclusion

This article explains the steps you must follow to move TempDB database from one drive to another in SQL Server.

Recommendation: Top 10 Trending SQL Server Tips for DBAs and Developer.

Chetna Bhalla

LESS ME MORE WE

Chetna Bhalla, the founder of MyTechMantra.com, believes that by sharing knowledge and building communities, we can make this world a better place to live in. Chetna is a Graduate in Social Sciences and a Masters in Human Resources and International Business. She is an alumnus of Vignana Jyothi Institute of Management, Hyderabad, India. After graduation, Chetna founded this website, which has since then become quite a favorite in the tech world. Her vision is to make this website the favorite place for seeking information on Databases and other Information Technology areas. She believes that companies which can organize and deploy their data to frame strategies are going to have a competitive edge over others. Her interest areas include Microsoft SQL Server and overall Database Management. Apart from her work, Chetna enjoys spending time with her friends, painting, gardening, playing the violin, and spending time with her son.

Though it’s not something that you should have to do often, occasionally you may find that you need to move your tempdb to a new drive.  This scenario occurred recently when, in the process of building out a virtual server, only 2 additional drives were created for me. Since it is best practice to put your data, log and tempdb on separate drives, I was left with having to temporarily put the tempdb on the E: drive when initially configuring the new installation of SQL Server.

Eventually the new drive, we’ll call it R:, was added to the server and I now needed to move tempdb to this drive.

In this case I already knew where my tempdb was located but this may not always be the case.  The first step you should take when moving tempdb to a new drive is to verify it’s current location.  The following script can be used to do just that.

USE [master]
SELECT name AS 'Name',
	physical_name AS 'Physical Location',
	state_desc AS 'Status'
FROM sys.master_files
WHERE database_id = DB_ID('tempdb')

This script will return the name, physical location and current status of the tempdb data and log files.  The results should look something like this:

TempDBLocation_Results

Now that I have confirmed the location of the tempdb data and log files my next step will be to move them to the new location.  Before moving them I’ll want to make sure I have created any necessary folders on the new drive.  In the example below I am putting them in the R:SQL folder so I would need to go create a folder named SQL on the R: drive.

The script below can be used to change the location of both the tempdb data and tempdb log files.  You can modify the FILENAME section to correspond to the location of your choosing.

USE [master]
GO
ALTER DATABASE tempdb 
MODIFY FILE (NAME = tempdev, 
	FILENAME = 'R:SQLtempdb.mdf')
GO

ALTER DATABASE tempdb 
MODIFY FILE (NAME = templog, 
	FILENAME = 'R:SQLtemplog.ldf')
GO

The final step is to restart the instance of SQL Server.  You can do this by either right-clicking on the SQL Server name in the Object Explorer and selecting to Stop, then Start the service or by opening up SQL Server Configuration Manager and doing it from there.  I prefer using SQL Server Configuration Manager for this as I’ve had issues in dealing with services when remotely connected to SQL server through Management Studio.  Though rare, it’s happened enough to encourage me to always log directly into the server to start/stop services.

Once the service is back up and running, you can re-run the first script to confirm the new location of your TempDB data and log files.

The above steps can also be used to move the msdb and model system databases.  You’ll just need to modify the ALTER DATABASE, NAME and FILENAME values to point to the applicable database.   If you’re wanting to move the master database it requires a slightly different approach.  To learn more about this you can reference my post on Moving The master System Database To A New Location In SQL Server.

Понравилась статья? Поделить с друзьями:
  • Как изменить путь скачивания торрент
  • Как изменить путь запуска службы
  • Как изменить путь скачивания на другой диск
  • Как изменить путь загрузки файлов на компьютере
  • Как изменить путь скачивания валорант