Переместить базу данных tempdb на другой диск

Обновлено: 21.11.2024

Как переместить базу данных TempDB SQL Server в другое место

Введение

Если вы не попросите разместить ее в другом месте, во время установки TempDB по умолчанию располагается на %SYSTEMDRIVE% (обычно в файловой системе C:).

Если у вас более одного диска, вам следует разместить базу данных TempDB SQL Server на другом диске, а не на %SYSTEMDRIVE%, а также базу данных Sage X3. Лучше всего иметь диск, предназначенный для баз данных. В производственных системах не рекомендуется иметь только один диск C: в вашей установке.

Вот основные причины для перемещения этой базы данных:
– Диск C: может быть не таким производительным, как другие диски.
– На диске C: может быть недостаточно свободного места для расширения TempDB.
– Для некоторых типов инстансов AWS используются недолговечные SSD-накопители, которые отлично подходят для хранения временных файлов.
– Не рекомендуется размещать базы данных на диске C:. Другие стандартные базы данных SQL Server, такие как Master или Model, также не должны размещаться на C:, хотя теоретически они не увеличиваются.

Справочный документ Microsoft

Относится к

  • SQL Server 2012
  • SQL Server 2014
  • SQL Server 2016
  • SQL Server 2017

Принципы

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

Вам просто нужно указать, где должны находиться файлы данных при следующем запуске экземпляра. Затем перезапустите экземпляр и удалите старые (теперь неиспользуемые) файлы данных.

Процедура

1. Получить характеристики текущей TempDB

Выполните следующий сценарий SQL:
Пример конфигурации по умолчанию для экземпляра SQL 2017 с именем SQL2K17FOREM с четырьмя файлами TempDB:

2. Измените расположение файлов TempDB на другой диск с той же иерархией каталогов

В этом примере диском при следующем запуске SQL Server будет E:\Program Files\Microsoft SQL Server\MSSQL14.SQLK217FOREM\MSSQL\DATA.
Результаты:

3. Перезапустите базу данных

Вы можете перезапустить базу данных с помощью управления службами Windows или SQL Server Management Studio.

4. Проверьте новые настройки

После перезапуска базы данных есть два способа убедиться, что новые настройки учтены:

- Поиск каталогов, в которых должны находиться новые файлы данных TempDB

- Запуск того же SQL-запроса, что и выше, для просмотра текущей конфигурации TempDB

Результат для нашего случая:

Каждый раз, когда мне приходится это делать, я ищу сценарий в Google. С тем же успехом я мог бы написать свой собственный и разместить его здесь, чтобы хотя бы найти себя в результатах Google:

Перемещение TempDB

Затем я могу скопировать/вставить результаты в SSMS, отредактировать их и запустить. Мне нравится создавать подобные скрипты, а не выполнять их автоматически, потому что иногда мне нужно настроить определенные местоположения файлов.

Я не беспокоюсь о том, какие имена файлов были раньше, а просто генерирую новые имена файлов, чтобы они соответствовали имени объекта базы данных.

Эрик говорит: Видишь ту тропинку? Убедитесь, что вы изменили этот путь на правильный. Предпочтительно тот, который существует и на который у SQL Server есть разрешения. Если вы этого не сделаете, ваш сервер не запустится, если вы не наберете в Google «как запустить SQL Server без tempdb» и не проведете следующее утро, объясняя своему боссу, почему вы должны сохранить свою работу. Я имею в виду, я слышал истории…

Хотите узнать больше? Возьмите мой урок.

Мое занятие по основам TempDB предназначено для любознательных людей, которые хотят учиться:

  • Для чего используется TempDB и как это влияет на производительность: не только временные таблицы и табличные переменные, но также триггеры, курсоры, индексы сортировки, сбросы рабочей области, хранилище версий и многое другое.
  • Как размещать TempDB в зависимости от того, как вы ее используете: понимание того, что содержится в файле журнала, файлах данных, почему количество файлов данных имеет значение и должна ли ваша конкретная рабочая нагрузка выполняться в SAN, локальном хранилище или временном хранилище. и почему
  • Как отслеживать его: после того, как вы поймете, что он использует и как его разместить, вам нужно следить за тем, как его производительность меняется с течением времени, используя DMV, счетчики Perfmon и сценарии комплекта быстрого реагирования.

48 комментариев . Оставить новый

Эрик; расскажите нам больше об этих историях… ^_^

Ха-ха-ха, Эрик, мне бы хотелось услышать твою историю….

Janjansen — если TempDB не существует при запуске, SQL Server создаст ее, пока существует папка. Если вы используете эфемерный/локальный SSD в IaaS (например, виртуальные машины Azure, Amazon EC2 или Google Compute Engine), вам просто нужно убедиться, что папки TempDB создаются при запуске Windows до запуска SQL Server.

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

Перемещена запятая и добавлен символ табуляции, чтобы выходные строки выровнялись друг с другом, для приятного удовольствия от выбора блоков с помощью клавиши Alt:

SELECT 'ALTER DATABASE tempdb MODIFY FILE (NAME = [' + f.[name] + ']'
+ CHAR(9) /* Tab */
+ ',FILENAME = ”Z :\MSSQL\DATA\' + f.[name]
+ CASE WHEN f.[type] = 1 /* Log */ THEN '.ldf' ELSE '.mdf' END
+ ”' );'
FROM sys.master_files f
ГДЕ f.database_id = DB_ID(N'tempdb');

Фу. Интернет отформатировал все кавычки так, что SSMS сильно запуталась :’-(

Плохой Брент. Ставишь свои LDF и MDF на одни и те же диски… 🙂 Просто собираешь. Я постоянно искал эти ответы в Google. В этой работе я, наконец, создал папку в папке моих скриптов «Полезные инструменты» (также включает скрипты Адама Маханика, Олы и ваши скрипты).

Возможно, дело в возрасте/культуре, но вместо того, чтобы полагаться на Google... У меня есть папка "toolbox" для таких скриптов, так что мне не нужно искать их каждый раз, когда они мне нужны.

Несмотря на то, что файл «move tempdb.sql» в моем наборе инструментов датирован 2009 годом и ссылается на URL-адрес базы знаний 224071, он больше не работает, поэтому я думаю, что есть аргумент в пользу того, чтобы заставить себя проверить что-то более свежее. ! (Нужно ли по-прежнему останавливать и перезапускать SQL Server, как я заметил в комментариях к себе? Мне, наверное, уже давно не приходилось перемещать базу данных tempdb...)

(К сожалению, я вижу, что Тед Лок по крайней мере опередил меня, говоря это.)

Точно так же у меня была папка в общем сетевом ресурсе, где я хранил удобные SQL-скрипты.

Но когда мы были вынуждены работать удаленно, к общей папке в локальной сети нельзя было получить прямой доступ. Члены группы администраторов баз данных должны были сначала подключиться к ящику перехода по протоколу RDP, а затем получить оттуда доступ к сценариям!

Я нашел отличную альтернативу. В ServiceNow есть возможность создавать статьи базы знаний.

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

Это также делает фрагменты кода кроссплатформенными. Я могу копировать и вставлять как обычный текст в Windows и Linux, не беспокоясь о форматах файлов.

[…] для перемещения tempdb с одного диска на другой, чтобы освободить место. Так что я погуглил, чтобы найти сценарий, и нашел этот сценарий Брента Озара. Он был добавлен в StackExchange и улучшен […]

Мне нужно изменить путь и отредактировать имя файла .mdf и .ndf для temdb.

кто-нибудь может помочь

Чари – прочитайте пост.

Я могу изменить путь, но как я могу изменить свой tempdev.mdf на temp.mdf

есть ли у них какие-либо вопросы по этому поводу?

Да, Чари, пост. Прочтите это. Осторожно. Тогда делайте то, что он говорит. Вы можете редактировать сценарий. Если вас это не устраивает, то вам не следует выполнять эту задачу. Больше не отвечать.

Брент, если вы поставили не ту единицу измерения, вы можете запустить команду subst... и после этого внести исправления в правильном поддержании окон, это самый быстрый способ.

Я обновил этот скрипт, чтобы вы могли изменить расположение файлов/папок вверху:

DECLARE @TempData varchar(2000) = ‘F:\MSSQL\DATA\’
, @TempLog varchar(2000) = ‘H:\MSSQL\DATA\’

ВЫБРАТЬ 'ИЗМЕНИТЬ БАЗУ ДАННЫХ tempdb ИЗМЕНИТЬ ФАЙЛ (ИМЯ = [' + f.name + '],'
+ CASE WHEN right(f.physical_name, 3) = 'ldf' THEN ' FILENAME = '' + @TempLog + f.name ELSE ' FILENAME = »' + @TempData + f.name END
+ CASE WHEN right(f.physical_name, 3) = 'ldf' THEN '.ldf' WHEN right(f.physical_name , 3) = 'ndf' THEN '.ndf' КОГДА right(f.physical_name, 3) = 'mdf' THEN '.mdf' END
+ ”');'
ИЗ sys.master_files f
ГДЕ f.database_id = DB_ID(N'tempdb');

Вы имели в виду:
DECLARE @TempData varchar(2000) = 'F:\MSSQL\DATA\'
, @TempLog varchar(2000) = 'H:\MSSQL\DATA\'

ВЫБРАТЬ 'ИЗМЕНИТЬ БАЗУ ДАННЫХ tempdb ИЗМЕНИТЬ ФАЙЛ (ИМЯ = [' + f.name + '],'
+ CASE WHEN right(f.physical_name, 3) = 'ldf' THEN ' FILENAME = "' + @TempLog + f.name ELSE ' FILENAME = "' + @TempData + f.name END
+ CASE WHEN right(f.physical_name, 3) = 'ldf' THEN '.ldf' WHEN right(f.physical_name , 3) = 'ndf' THEN '.ndf' WHEN right(f.Physical_name, 3) = 'mdf' THEN '.mdf' END
+ ');'
FROM sys.master_files f
ГДЕ f.database_id = DB_ID(N'tempdb');< /p>

Обратите внимание, что вам по-прежнему необходимо исправить кавычки на правильные одинарные и двойные кавычки вместо левых/правых кавычек.

Неважно. Все равно запутался.

DECLARE @TempData varchar(2000) = ‘F:\MSSQL\DATA\’
, @TempLog varchar(2000) = ‘H:\MSSQL\DATA\’

ВЫБРАТЬ 'ИЗМЕНИТЬ БАЗУ ДАННЫХ tempdb ИЗМЕНИТЬ ФАЙЛ (ИМЯ = [' + f.name + '],'
+ CASE WHEN right(f.physical_name, 3) = 'ldf' THEN ' FILENAME = '' + @TempLog + f.name ELSE ' FILENAME = »' + @TempData + f.name END
+ CASE WHEN right(f.physical_name, 3) = 'ldf' THEN '.ldf' WHEN right(f.physical_name , 3) = 'ndf' THEN '.ndf' КОГДА right(f.physical_name, 3) = 'mdf' THEN '.mdf' END
+ ”');'
ИЗ sys.master_files f
ГДЕ f.database_id = DB_ID(N'tempdb');

–Исправлены кавычки. Но, вероятно, все еще есть левые/правые кавычки

[…] нужен оператор ALTER для каждого файла – если копирование/вставка не достаточно быстры, вот сообщение Брента Озара, чтобы написать сценарий […]

Я думаю, что вторичные файлы данных типа rows должны иметь расширение .ndf. Итак, это будет правильный запрос:
SELECT 'ALTER DATABASE tempdb MODIFY FILE (NAME = [' + f.name + '],'
+ ' FILENAME = ”H:\TempDB\' + f.name
+ CASE WHEN f.type = 1 THEN '.ldf' ELSE '.mdf' END
+ ”');'
FROM sys.master_files f
ГДЕ f.database_id = DB_ID(N'tempdb');

Обратите внимание, что я изменяю только оператор de CASE.

Нет, вы можете называть файлы как угодно, даже MP3 или TXT.

Хорошо. Я попробую это на своем настольном ПО. Кстати, может быть, я и старый парень правил, но я предпочитаю называть вторичные файлы данных типа строк с расширением .ndf.
В любом случае, спасибо, сэр, за урок.
Япония

Спасибо. как всегда на высоте!

Спасибо, Брент. Полезный материал.

Брент: Возможно, это глупый вопрос, но… «Можно ли переместить базу данных TempDb на другой диск, создав ее резервную копию и восстановив ее, как если бы это была просто еще одна пользовательская база данных?» Я предполагаю, что ответ примерно такой: «Нет, потому что TempDb сам по себе необходим для резервного копирования/восстановления. Итак, если вы попытаетесь сделать это таким образом, вы либо получите сообщение об ошибке, либо испортите вещи массово.”

Блейк – нет, вы не можете создать резервную копию TempDB.

Брент: Спасибо. Как я и ожидал. sp_Blitz сообщает (среди прочего) «В базе данных tempdb есть файлы на диске C…» Это меня удивило, потому что я знал, что при установке указал расположение tempdb на другом диске. Поэтому я проверил и увидел, что tempdb.mdf и templog.ldf находятся на моем диске F: (как и предполагалось). НО: у меня все еще есть 3 вторичных файла данных .ndf на моем диске C:, что объясняет предупреждение конфигурации файла sp_Blitz. Я вижу некоторую болтовню в приведенных выше комментариях об изменении вашего скрипта для обработки файлов .ndf, но я думаю, что в моем случае может быть лучше просто переместить файлы .ndf следующим образом:

Сначала выполните следующие инструкции:
ИЗМЕНИТЬ ФАЙЛ ИЗМЕНЕНИЯ БАЗЫ ДАННЫХ tempdb (ИМЯ = temp2, ИМЯ ФАЙЛА = 'F:\MSSQLData\temp2')
ИЗМЕНИТЬ ФАЙЛ tempdb ИЗМЕНИТЬ БАЗУ ДАННЫХ (ИМЯ = temp3, ИМЯ ФАЙЛА = 'F:\MSSQLData\temp3' )
ИЗМЕНИТЬ ФАЙЛ ИЗМЕНЕНИЯ tempdb БАЗЫ ДАННЫХ ( NAME = temp4 , FILENAME = 'F:\MSSQLData\temp4' )

Во-вторых, остановите экземпляр (сейчас он ничего не делает).

В-третьих, физически переместите (т.е. скопируйте/вставьте) 3 файла .ndf из их текущего местоположения C: в новое местоположение F:\MSSQLData\

В-четвертых, перезапустите экземпляр.

В-пятых, убедитесь, что это работает:

ВЫБЕРИТЕ имя, Physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N’tempdb’);

Выглядит нормально?

Один мощный скрипт, спасибо, чувак.
Твоя часть «Эрик говорит» почти заставила меня уйти, но потом я прочитал ее снова. Это было просто предупреждение, чтобы не забыть изменить путь. Конечно, это сделает айтишник.

Хороший сценарий! Но я решил изменить эту строку:

‘ FILENAME = ”Z:\MSSQL\DATA\’ + f.name

f.name — это логическое имя, и я хотел, чтобы оно соответствовало фактическому имени файла.
Таким образом, исходные физические имена файлов могут быть сохранены в новом каталоге.

поэтому я заменил f.name на это:

reverse(left(reverse(m.physical_name), charindex(‘\’,reverse(m.physical_name), 1) – 1))

Спасибо за этот скрипт, мне нужно переместить десятки и десятки файлов, и это мне очень помогло!
С уважением…

Можно ли, помимо перемещения файла, уменьшить его, чтобы занимать меньше места на целевом диске/папке в момент перезагрузки? Без фактического изменения размера файла перед перезагрузкой, потому что иногда это просто невозможно.

Извините, я не знал, что это было настолько общим… В любом случае, спасибо. Кстати, BOL кажется, что мы должны сначала уменьшить файл данных (сжать или что-то еще).

Хороший Брент. Именно тогда, когда мне это было нужно.

Рад, что смог помочь!

Кто-нибудь пробовал перемещать эти файлы в docker/container world.

Эти шаги не работают после перезапуска сервера POD или sql.

Есть ли другой способ работы в K8 или Docker?

Именно то, что мне нужно сегодня, спасибо!

Привет, я хочу переместить временную базу данных на новый диск, но я хотел бы иметь только 1 файл .mdf, а не несколько. Как мне этого добиться?

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

К счастью, я посмотрел сценарий, и он выглядел нормально. Затем кто-то предложил «о, просто очистите каталог», поэтому я переместил все файлы tempdb в другой каталог, и сервер альта sql запустился и автоматически создал файлы в новом месте.

Спасибо, SQL2016, возможно, вы только что спасли мою работу.

Поэтому, когда вы запускаете скрипт в sql2016, нет необходимости останавливать и запускать службу, она просто создаст файлы в новом месте на лету. И я считаю, что старые файлы просто останутся в старом месте (я еще не проверял это).

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

Введение

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

  • Определить расположение файлов данных и журналов TempDB
  • Изменить расположение файлов данных и журнала TempDB с помощью команды ALTER DATABASE
  • Остановить и перезапустить службу SQL Server
  • Проверьте изменение файла
  • Удалите старые файлы tempdb.mdf и templog.ldf.

В этой статье описывается шаг по изменению расположения файлов данных и журналов TempDB в SQL Server.

Перемещение TempDB / Изменение местоположения TempDB / Перемещение TempDB на другой диск / Перемещение TempDB на новый диск / Как Переместить файлы TempDB SQL Server

Определить расположение файлов данных и журналов TempDB

В окне "Новый запрос" SQL Server Management Studio выполните приведенный ниже сценарий, чтобы определить расположение данных TempDB и файла журнала.

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

Популярные статьи и советы по SQL Server для администраторов баз данных и разработчиков

Изменить расположение файлов данных и журнала TempDB с помощью команды ALTER DATABASE

Выполните приведенную ниже команду ALTER DATABASE, чтобы изменить расположение файла данных и журнала TempDB в SQL Server.

После успешного выполнения приведенного выше сценария вы получите сообщение о перезапуске службы SQL Server, чтобы изменения вступили в силу.

Остановить и перезапустить службу SQL Server

Остановите и перезапустите экземпляр SQL Server, чтобы изменения вступили в силу.

Проверьте изменение файла

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

Удалите старые файлы tempdb.mdf и templog.ldf

Последним шагом будет удаление файлов tempdb.mdf и templog.ldf из исходного местоположения.

Важное примечание. SQL Server не поддерживает перемещение базы данных TempDB с помощью резервного копирования/восстановления и методов отсоединения базы данных.

Получено сообщение об ошибке при попытке резервного копирования и восстановления

Получено сообщение об ошибке при попытке отсоединить метод

Заключение

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

В этой статье описывается перемещение системных баз данных в SQL Server. Перемещение системных баз данных может быть полезно в следующих ситуациях:

Восстановление после сбоя. Например, база данных находится в подозрительном режиме или отключена из-за аппаратного сбоя.

Перемещение для планового обслуживания диска.

Следующие процедуры применяются к перемещению файлов базы данных в пределах одного экземпляра SQL Server. Чтобы переместить базу данных в другой экземпляр SQL Server или на другой сервер, используйте операцию резервного копирования и восстановления.

Для процедур, описанных в этой статье, требуется логическое имя файлов базы данных. Чтобы получить имя, запросите столбец имени в представлении каталога sys.master_files.

Если вы перемещаете системную базу данных, а затем перестраиваете основную базу данных, вы должны снова переместить системную базу данных, поскольку операция перестроения устанавливает все системные базы данных в расположение по умолчанию.

Переместить системные базы данных

Чтобы переместить данные системной базы данных или файл журнала в рамках запланированного перемещения или планового обслуживания, выполните следующие действия. Сюда входят системные базы данных model , msdb и tempdb.

Эта процедура применяется ко всем системным базам данных, кроме основной базы данных и базы данных ресурсов. См. далее в этой статье шаги по перемещению базы данных master. База данных Resource не может быть перемещена.

Запишите существующее расположение файлов базы данных, которые вы собираетесь переместить, просмотрев представление каталога sys.master_files.

Убедитесь, что учетная запись службы для ядра базы данных SQL Server имеет полные права доступа к новому местоположению файлов. Дополнительные сведения см. в разделе Настройка учетных записей служб Windows и разрешений. Если учетная запись службы Database Engine не может управлять файлами в новом расположении, экземпляр SQL Server не запустится.

Для каждого перемещаемого файла базы данных выполните следующую инструкцию.

Пока служба не будет перезапущена, база данных будет продолжать использовать файлы данных и журналов в существующем расположении.

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

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

Поскольку на шаге 5 вы скопировали файлы базы данных, а не переместили их, теперь вы можете безопасно удалить неиспользуемые файлы базы данных из их предыдущего местоположения.

Последующие действия: после перемещения системной базы данных msdb

Если база данных msdb перемещена и настроена Database Mail, выполните следующие дополнительные действия.

Убедитесь, что компонент Service Broker включен для базы данных msdb, выполнив следующий запрос.

Если Service Broker не включен для msdb , его необходимо снова включить, чтобы Database Mail работала. Дополнительные сведения см. в разделе ALTER DATABASE. УСТАНОВИТЬ ENABLE_BROKER.

Убедитесь, что значение is_broker_enabled теперь равно 1.

Убедитесь, что Database Mail работает, отправив тестовое письмо.

Процедура восстановления после сбоя

Если файл необходимо переместить из-за аппаратного сбоя, выполните следующие действия, чтобы переместить файл в новое место. Эта процедура применяется ко всем системным базам данных, кроме основной базы данных и базы данных ресурсов. В следующих примерах используется приглашение командной строки Windows и утилита sqlcmd.

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

Убедитесь, что учетная запись службы для ядра базы данных SQL Server имеет полные права доступа к новому местоположению файлов. Дополнительные сведения см. в разделе Настройка учетных записей служб Windows и разрешений. Если учетная запись службы Database Engine не может управлять файлами в новом расположении, экземпляр SQL Server не запустится.

Остановить экземпляр SQL Server, если он запущен.

Запустите экземпляр SQL Server в основном режиме восстановления, введя одну из следующих команд в командной строке. Использование параметра запуска 3608 запрещает SQL Server автоматически запускать и восстанавливать любую базу данных, кроме базы данных master. Дополнительные сведения см. в разделе Параметры запуска и TF3608.

Параметры, указанные в этих командах, чувствительны к регистру. Команды не выполняются, если параметры не указаны, как показано.

Для экземпляра по умолчанию (MSSQLSERVER) выполните следующую команду:

Для именованного экземпляра выполните следующую команду:

Сразу после запуска службы с флагом трассировки 3608 и /f запустите соединение sqlcmd с сервером, чтобы заявить единственное доступное соединение. Например, при локальном выполнении sqlcmd на том же сервере, что и экземпляр по умолчанию (MSSQLSERVER), и для подключения с проверкой подлинности интеграции с Active Directory выполните следующую команду:

Чтобы подключиться к именованному экземпляру на локальном сервере с аутентификацией интеграции с Active Directory:

Дополнительную информацию о синтаксисе sqlcmd см. в разделе утилита sqlcmd.

Для каждого файла, который нужно переместить, используйте команды sqlcmd или SQL Server Management Studio, чтобы выполнить следующую инструкцию. Дополнительные сведения об использовании служебной программы sqlcmd см. в разделе Использование служебной программы sqlcmd. После открытия сеанса sqlcmd выполните следующую инструкцию один раз для каждого перемещаемого файла:

Закройте утилиту sqlcmd или SQL Server Management Studio.

Остановите экземпляр SQL Server. Например, запустите NET STOP MSSQLSERVER в командной строке.

Скопируйте файл или файлы в новое место.

Перезапустите экземпляр SQL Server. Например, запустите NET START MSSQLSERVER в командной строке.

Проверьте изменение файла, выполнив следующий запрос.

Поскольку на шаге 7 вы скопировали файлы базы данных, а не переместили их, теперь вы можете безопасно удалить неиспользуемые файлы базы данных из их предыдущего местоположения.

Перемещение основной базы данных

Чтобы переместить основную базу данных, выполните следующие действия.

Убедитесь, что учетная запись службы для ядра базы данных SQL Server имеет полные права доступа к новому местоположению файлов. Дополнительные сведения см. в разделе Настройка учетных записей служб Windows и разрешений. Если учетная запись службы Database Engine не может управлять файлами в новом расположении, экземпляр SQL Server не запустится.

В меню "Пуск" найдите и запустите Диспетчер конфигурации SQL Server. Дополнительные сведения об ожидаемом расположении см. в разделе Диспетчер конфигурации SQL Server.

В узле "Службы SQL Server" щелкните правой кнопкой мыши экземпляр SQL Server (например, SQL Server (MSSQLSERVER)) и выберите "Свойства".

В диалоговом окне свойств SQL Server (имя_экземпляра) выберите вкладку "Параметры запуска".

В поле "Существующие параметры" выберите параметр -d. В поле Укажите параметр запуска измените параметр на новый путь к основному файлу data. Выберите Обновить, чтобы сохранить изменения.

В поле "Существующие параметры" выберите параметр -l. В поле Укажите параметр запуска измените параметр на новый путь к главному файлу log. Выберите Обновить, чтобы сохранить изменения.

Значение параметра файла данных должно следовать за параметром -d, а значение файла журнала должно следовать за параметром -l. В следующем примере показаны значения параметров для расположения файла основных данных по умолчанию.

-dC:\Program Files\Microsoft SQL Server\MSSQL .MSSQLSERVER\MSSQL\DATA\master.mdf

-lC:\Program Files\Microsoft SQL Server\MSSQL .MSSQLSERVER\MSSQL\DATA\mastlog.ldf

Если планируется перемещение файла основных данных в E:\SQLData , значения параметров будут изменены следующим образом:

Нажмите "ОК", чтобы сохранить изменения навсегда и закрыть диалоговое окно свойств SQL Server (имя_экземпляра).

Остановите экземпляр SQL Server, щелкнув имя экземпляра правой кнопкой мыши и выбрав Остановить.

Скопируйте файлы master.mdf и mastlog.ldf в новое место.

Перезапустите экземпляр SQL Server.

Проверьте изменение файла для базы данных master, выполнив следующий запрос.

С этого момента SQL Server должен работать нормально. Однако Microsoft рекомендует также изменить запись реестра в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\instance_ID\Setup , где instance_ID похоже на MSSQL13.MSSQLSERVER . В этом кусте измените значение SQLDataRoot на новый путь. Отсутствие обновления реестра может привести к сбою установки исправлений и обновлений.

Поскольку на шаге 9 вы скопировали файлы базы данных, а не переместили их, теперь вы можете безопасно удалить неиспользуемые файлы базы данных из их предыдущего местоположения.

Перемещение базы данных ресурсов

Расположение базы данных Resource: \ :\Program Files\Microsoft SQL Server\MSSQL\ .\ \MSSQL\Binn\\ . База данных не может быть перемещена.

Последующие действия: после перемещения всех системных баз данных

Если вы переместили все системные базы данных на новый диск или том или на другой сервер с другой буквой диска, внесите следующие изменения.

Измените путь журнала агента SQL Server. Если вы не обновите этот путь, агент SQL Server не запустится.

Изменить расположение базы данных по умолчанию. Создание новой базы данных может завершиться ошибкой, если буква диска и путь, указанные в качестве расположения по умолчанию, не существуют.

Изменить путь к журналу агента SQL Server

В SQL Server Management Studio в обозревателе объектов разверните агент SQL Server.

Щелкните правой кнопкой мыши Журналы ошибок и выберите Настроить.

В диалоговом окне "Настройка журналов ошибок агента SQL Server" укажите новое расположение файла SQLAGENT.OUT. Расположение по умолчанию — C:\Program Files\Microsoft SQL Server\MSSQL\ . \MSSQL\Журнал\\ .

Изменить местоположение базы данных по умолчанию

Из SQL Server Management Studio в обозревателе объектов подключитесь к нужному экземпляру SQL Server. Щелкните экземпляр правой кнопкой мыши и выберите "Свойства".

В диалоговом окне "Свойства сервера" выберите "Настройки базы данных".

В разделе "Расположения базы данных по умолчанию" перейдите к новому расположению файлов данных и журналов.

Остановите и запустите службу SQL Server, чтобы завершить изменение.

Примеры

А. Перемещение базы данных tempdb

В следующем примере файлы данных и журналов tempdb перемещаются в новое место в рамках запланированного перемещения.

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

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

Определите логические имена файлов базы данных tempdb и их текущее расположение на диске.

Убедитесь, что учетная запись службы для ядра базы данных SQL Server имеет полные права доступа к новому местоположению файлов. Дополнительные сведения см. в разделе Настройка учетных записей служб Windows и разрешений. Если учетная запись службы Database Engine не может управлять файлами в новом расположении, экземпляр SQL Server не запустится.

Измените расположение каждого файла с помощью команды ALTER DATABASE .

Пока служба не будет перезапущена, база данных tempdb будет использовать файлы данных и журналов в существующем расположении.

Читайте также: