Как перенести tempdb на другой диск

TEMPDB представляет собой системную базу данных Microsoft SQL Server, в которой хранятся временные таблицы, созданные как самим сервером, так и пользователями. Эта база данных создается заново при каждом перезапуске Microsoft SQL Server. По умолчанию размер этой базы данных неограничен и увеличение его осуществляется при необходимости автоматически, порциями по 10% от текущего размера TEMPDB. Однако эти параметры могут быть переопределены пользователем. По умолчанию, минимальный размер этой базы данных, который устанавливается при старте Microsoft SQL Server, определяется размером системной базы данных MODEL. Очистка журнала транзакций в этой базе данных производится автоматически, при этом удаляются только неактивные записи журнала транзакций.

При работе 1С:Предприятия 8 в режиме клиент-сервер широко используются временные таблицы . Кроме того, TEMPDB используется Microsoft SQL Server при выполнении запросов, использующих операторы GROUP BY , UNION , DISTINCT и т.п.

Проблема

В процессе работы 1С:Предприятия 8 возможно значительное увеличение размера базы данных TEMPDB. Если размер диска, на котором расположена база данных TEMPDB, окажется недостаточным, работа 1С:Предприятия 8 может завершиться аварийно.

Решение

Если эта проблема проявляется регулярно, то рекомендуется переместить TEMPDB на другой диск большего размера.

Эту операцию можно выполнить следующим способом:

  • определить логические имена файлов базы данных TEMPDB (колонка "NAME" результата выполнения процедуры). Для этого нужно в Query Analyzer выполнить следующую команду:
  • изменить месторасположение файлов базы данных TEMPDB с помощью команды ALTER DATABASE . Для этого нужно в Query Analyzer выполнить следующую последовательность команд:
  1. Перезапустить Microsoft SQL Server.

Более подробное описание и рекомендации по использованию этих команд можно найти в документации по Microsoft SQL Server.

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

Читайте также:  Как включить звук на телефоне андроид

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

Следует учитывать, что для достижения максимальной производительности в работе tempdb может потребоваться разнесение файла данных и лога транзакций БД tempdb . Также следует отметить то, что для поднятия производительности хорошо нагруженных систем в документе MSDN Library – Optimizing tempdb Performance присутствует рекомендация создавать отдельные группы файлов tempdb на разных дисках для каждого ядра серверного процессора.

По умолчанию БД tempdb настроена на авто-расширение (Autogrow) и при каждой перезагрузке SQL Server пересоздаёт файлы этой БД с минимальным размером инициализации ( Initial Size ). Опираясь на рекомендации вышеуказанного документа, мы увеличим размер инициализации файлов tempdb таким образом, чтобы свести к минимуму затраты системных ресурсов на операции авто-расширения.

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

SELECT name , physical_name AS CurrentLocation

FROM sys . master_files

WHERE database_id = DB_ID ( N’tempdb’ );

Получим примерно такой результат:

Затем, определившись с тем, на каких логических дисках будут расположены файлы БД, и какой они будут иметь размер, выполним SQL запрос:

ALTER DATABASE tempdb

MODIFY FILE ( NAME = tempdev , FILENAME = ‘H:TempDB_Datatempdb.mdf’ , SIZE = 10240 );

ALTER DATABASE tempdb

MODIFY FILE ( NAME = templog , FILENAME = ‘I:TempDB_Logtemplog.ldf’ , SIZE = 3072 );

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

Читайте также:  Как изготовить печатную плату своими руками

После успешного выполнения запроса – перезапустим службу SQL Server и убедимся что наши файлы расположены там где мы хотим, выполнив SQL запрос:

SELECT name , physical_name AS CurrentLocation , size , state_desc

FROM sys . master_files

WHERE database_id = DB_ID ( N’tempdb’ );

Если всё нормально, результат должен быть примерно таким:

После этого необходимо удалить файлы tempdb . mdf и templog . ldf с их старого месторасположения.

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

Запланированный перенос базы данных

В случае если вам просто необходимо перенести рабочую базу данных, то в manegement studio необходимо выполнить запрос:

  • database_name — имя базы данных, которую необходимо перенести;
  • logical_name — логическое имя файла;
  • disk:
    ew_path
    ew_file_name
    — новый путь к файлу данных.

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

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

Такая ситуация может возникнуть, если восстановить базу данных в прежнее место невозможно, а без этой базы данных SQL сервер не запускается. Например, как я уже писал в начале, вышедший из строя диск с базой tempdb приведет к остановке MSSQL и невозможности его запуска.

Процедура действий в данном случае почти такая же как и при запланированном переносе. Все операции производим через командную строку cmd с правами администратора. Для начала необходимо запустить SQL сервер в режиме восстановления:

Читайте также:  Звуковая карта не видит разъемы

Затем запустив консольную команду sqlcmd выполнить все те же команды по указанию нового пути к файлам данных для БД. Например для tempdb будут примерно такие команды:

После того как введены все SQL запросы в интерактивном режиме sqlcmd необходимо ввести команду GO, чтобы выполнить этим самые запросы, а затем EXIT, чтобы выйти из интерактивного режима sqlcmd. Папка c: empdb (или та куда вы переносите базу данных tempdb) должна быть заранее создана. Если вы восстанавливаете не tempdb, а любую другую БД, то необходимо в эту папку так же положить файлы БД из резервной копии с именами совпадающими с теми, что указаны в SQL запросах.

Теперь можно перезапускать MSSQL сервер в стандартном режиме:

Если используется не экземпляр по умолчанию, а именованый, то необходимо заменить MSSQLSERVER на MSSQL $instancename, где instancename — наименование экземпляра MSSQL.

Если все сделано верно, то службы MSSQL запустятся и продолжат работу в штатном режиме.

Добавить комментарий Отменить ответ

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock detector