TempDB — это системная база данных Microsoft SQL Server, в которой хранятся временные таблицы (их создает сама СУБД и пользователи, работающие в своих базах). Она хранит всю временную информацию, которая используется сейчас в работе, например, временные сущности, таблицы, курсоры.
Особенность TempDB — поддержка создания резервных копий для восстановления, а при каждом запуске SQL Server создаётся заново.
Исходя из вышесказанного, выходит, что TempDB постоянно работает с данными (загружая и выгружая их), при этом работая со всеми базами конкретного сервера MSSQL. В связи с этим, оптимальным решением будет отделение TempDB от основных баз и файлов СУБД (лучше всего перенеся на отдельный диск с максимально доступной производительностью).
Лучше всего это делать вовремя установки сервера MSSQL, когда программа спрашивает, где расположить файлы. Но потребность в переносе может возникнуть уже после установки, поэтому сейчас разберем – как осуществить перенос TempDB на другой диск.
Шаг 1
Для начала нам потребуется приложение SQL Server Management Studio (SSMS) – его можно с официального сайта Microsoft. Это программа-менеджер с удобным функционалом, без которой невозможно полноценно управлять СУБД MSSQL.
Шаг 2
Затем нужно зайти в программу и подключится к серверу СУБД под учетной записью (УЗ) с правами администратора и создать запрос.
Шаг 3
С помощью запроса узнаем точное расположение всех наших файлов, которые связаны с TempDB:
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'tempdb');
Должен получится подобный результат:
Рисунок 1 — Пути файлов TempDB.
Шаг 4
Далее нужно выполнить еще один запрос, он упростит следующий шаг, но перед выполнением нужно переключить вывод в текст или нажать CTRL+T:
SELECT 'ALTER DATABASE ''tempdb'' MODIFY FILE ( NAME = '+[name]+', FILENAME = '+[physical_name]+' )' FROM sys.master_files WHERE database_id = DB_ID(N'tempdb');
Должен получится подобный результат:
Рисунок 2 — Дополнительный запрос MSSQL.
Шаг 5
Теперь нужно скопировать результат запроса из предыдущего шага, и немного отредактировать:
После FILENAME должен быть указан путь в кавычках В инструкции это: например 'R:\tempdb_mssql_2.ndf', где R:\ - диск tempdb_mssql_2.ndf - один из файлов TempDB А у tempdb кавычек быть не должно.
Команда будет выглядеть подобным образом:
ALTER DATABASE tempdb MODIFY FILE ( NAME = tempdev, FILENAME = 'R:\tempdb.mdf' ) ALTER DATABASE tempdb MODIFY FILE ( NAME = templog, FILENAME = 'R:\templog.ldf' ) ALTER DATABASE tempdb MODIFY FILE ( NAME = temp2, FILENAME = 'R:\tempdb_mssql_2.ndf' ) ALTER DATABASE tempdb MODIFY FILE ( NAME = temp3, FILENAME = 'R:\tempdb_mssql_3.ndf' ) ALTER DATABASE tempdb MODIFY FILE ( NAME = temp4, FILENAME = 'R:\tempdb_mssql_4.ndf' ) ALTER DATABASE tempdb MODIFY FILE ( NAME = temp5, FILENAME = 'R:\tempdb_mssql_5.ndf' ) ALTER DATABASE tempdb MODIFY FILE ( NAME = temp6, FILENAME = 'R:\tempdb_mssql_6.ndf' ) ALTER DATABASE tempdb MODIFY FILE ( NAME = temp7, FILENAME = 'R:\tempdb_mssql_7.ndf' ) ALTER DATABASE tempdb MODIFY FILE ( NAME = temp8, FILENAME = 'R:\tempdb_mssql_8.ndf' )
Результатом ее выполнения станет успешный перенос файлов.
Рисунок 3 — Успешный перенос файлов TempDB.
Шаг 6
Однако, если мы зайдем по новому пути, то не обнаружим там файлов.
В этом нет ошибки, т.к. файлы TempDB существуют пока активна служба сервера MSSQL и после каждого перезапуска создаются новые файлы. Для смены расположения, нужно перезапустить службу сервера MSSQL и файлы сразу появятся уже в новой папке.