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

Применимо к:SQL Server

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

  • Восстановление после сбоя. Например, база данных находится в подозрительном режиме, или ее работа была прекращена из-за сбоя оборудования;

  • Плановое перемещение.

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

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

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

Внимание

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

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

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

Внимание

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

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

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

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

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' );
    

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

  4. Остановите экземпляр SQL Server для выполнения обслуживания. Дополнительные сведения см. в статье Запуск, остановка, приостановка, возобновление и перезапуск ядра СУБД, агента SQL Server или службы "Обозреватель SQL Server".

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

  6. Перезапустите экземпляр SQL Server или сервера. Дополнительные сведения см. в статье Запуск, остановка, приостановка, возобновление и перезапуск ядра СУБД, агента SQL Server или службы "Обозреватель SQL Server".

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

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    
  8. Поскольку на шаге 5 вместо того чтобы переместить файлы базы данных, вы скопировали их, теперь можно безопасно удалить неиспользуемые файлы базы данных из их предыдущего расположения.

Дальнейшие действия после перемещения системной базы данных msdb

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

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

    SELECT is_broker_enabled   
    FROM sys.databases  
    WHERE name = N'msdb';  
    

    Если компонент Service Broker не включен msdb, его необходимо повторно включить, чтобы компонент Database Mail функционировал. Дополнительные сведения см. в статье об ALTER DATABASE ... SET ENABLE_BROKER.

    ALTER DATABASE msdb 
    SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE;
    

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

  2. Отправкой тестового сообщения проверьте работоспособность компонента Database Mail.

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

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

Внимание

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

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

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

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

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

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

    NET START MSSQLSERVER /f /T3608
    

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

    NET START MSSQL$instancename /f /T3608
    

    Дополнительные сведения см. в статье Запуск, остановка, приостановка, возобновление и перезапуск ядра СУБД, агента SQL Server или службы "Обозреватель SQL Server".

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

    sqlcmd
    

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

    sqlcmd -S localhost\instancename
    

    Дополнительные сведения о синтаксисе sqlcmd см. в разделе о служебной программе sqlcmd.

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

    ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' )  
    GO
    
  5. Закройте служебную программу sqlcmd или SQL Server Management Studio.

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

  7. Скопируйте файл (файлы) в новое расположение.

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

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

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    
  10. Поскольку на шаге 7 вместо того чтобы переместить файлы базы данных, вы скопировали их, теперь можно безопасно удалить неиспользуемые файлы базы данных из их предыдущего расположения.

Перемещение базы данных master

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

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

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

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

  4. В диалоговом окне Свойства SQL Server (instance_name) выберите вкладку Параметры запуска.

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

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

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

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

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

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

    -dE:\SQLData\master.mdf

    -lE:\SQLData\mastlog.ldf

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

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

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

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

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

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files
    WHERE database_id = DB_ID('master');  
    
  12. На этом этапе среда SQL Server должна выполняться как обычно. Однако корпорация Майкрософт рекомендует также изменить запись реестра, указанную в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\instance_ID\Setup, где instance_ID имеет вид MSSQL13.MSSQLSERVER. В этом кусте измените SQLDataRoot значение на новый путь к новому расположению master файлов базы данных. Невозможность обновления реестра может привести сбою исправления и обновления.

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

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

Расположение базы данных Resource — \<*drive*>:\Program Files\Microsoft SQL Server\MSSQL\<version>.\<*instance_name*>\MSSQL\Binn\\. Базу данных нельзя переместить.

Дальнейшие действия. После перемещения всех системных баз данных

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

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

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

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

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

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

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

  3. В диалоговом окне Настройка журналов ошибок агента SQL Server задайте новое расположение для файла SQLAGENT.OUT. По умолчанию он расположен в папке C:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Log\\.

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

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

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

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

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

Примеры

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

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

Совет

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

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

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

    SELECT name, physical_name AS CurrentLocation  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'tempdb');  
    GO  
    
  2. Убедитесь, что учетная запись службы ядра СУБД SQL Server имеет полные разрешения на новое расположение файлов. Дополнительные сведения см. в статье Настройка учетных записей службы Windows и разрешений. Если учетная запись службы ядра СУБД не может управлять файлами в новом расположении, экземпляр SQL Server не запустится.

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

    USE master;  
    GO  
    ALTER DATABASE tempdb   
    MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf');  
    GO  
    ALTER DATABASE tempdb   
    MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf');  
    GO  
    

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

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

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

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'tempdb');  
    
  6. Удалите неиспользуемые файлыtempdb из исходного местоположения.

См. также

Далее