Скопировать файл tempdb SQL Server после установки SQL Server

 Работая с одним из моих  клиентов в сфере образования, я недавно должен был выполнить некоторое обслуживание на их сервере баз данных SQL, так как у них было мало дискового пространства и у них был свободный неиспользуемый виртуальный диск, на который мы могли бы бросить их tempdb (он должен был сюда установлен изначально, но они не поместили его туда во время установки). Так что у меня была задача переместить его.

Первый шаг - получить как есть информацию о том, где в данный момент находится база данных tempdb и сколько в ней фрагментов; откройте SQL Management Studio и выполните следующий запрос.

<ya-tr-span data-index="7-0" data-value="-- Lists all current tempdb files and their paths
" data-translation="-- Список всех текущих файлов tempdb и их путей
" data-type="trSpan">-- Список всех текущих файлов tempdb и их путей
</ya-tr-span><ya-tr-span data-index="7-1" data-value="SELECT name, physical_name AS CurrentLocation
" data-translation="Выберите имя, physical_name в качестве текущего местоположения
" data-type="trSpan">Выберите имя, physical_name в качестве текущего местоположения
</ya-tr-span><ya-tr-span data-index="7-2" data-value="FROM sys." data-translation="Из sys." data-type="trSpan">Из sys.</ya-tr-span><ya-tr-span data-index="7-3" data-value="master_files
" data-translation="главный файл
" data-type="trSpan">главный файл
</ya-tr-span><ya-tr-span data-index="7-4" data-value="WHERE database_id = DB_ID (N'tempdb');
" data-translation="Где database_id = DB_ID (N'tempdb');
" data-type="trSpan">Где database_id = DB_ID (N'tempdb');
</ya-tr-span><ya-tr-span data-index="7-5" data-value="GO
" data-translation="ВПЕРЕД
" data-type="trSpan">ВПЕРЕД
</ya-tr-span>

Теперь нам нужно создать запрос для копирования файлов базы данных с одного диска на другой. Он должен выглядеть примерно так же, как приведенный ниже запрос, изменяя пути и добавляя / удаляя фрагменты tempdb по мере необходимости (просто добавьте больше инструкций alter database для каждого узла файла).

USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\templog.ldf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp2, FILENAME = 'F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb_mssql_2.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp3, FILENAME = 'F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb_mssql_3.ndf');
GO

В приведенном выше примере мы указали диск F. Кроме того, следует отметить, что если у вас есть SQL Server, работающий через учетную запись службы, то для этого потребуются разрешения NTFS на изменение назначения. Как только это будет выполнено в контексте главной базы данных, файлы будут повторно созданы при следующем перезапуске службы SQL Server.