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

Изменения: 17 ноября 2008 г.

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

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

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

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

ms345408.note(ru-ru,SQL.90).gifВажно!
При перемещении системной базы данных с последующим перестроением базы данных master необходимо заново переместить системную базу данных, поскольку операция перестроения устанавливает все системные базы данных в расположение по умолчанию. Дополнительные сведения о перестроении базы данных master см. в подразделе «Перестроение системной базы данных и реестра» раздела Как установить SQL Server 2005 из командной строки.

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

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

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

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
    
  2. Остановите работу экземпляра SQL Server или выключите систему для проведения работ по обслуживанию дисков. Дополнительные сведения см. в разделе Остановка служб.

  3. Переместите файл или файлы в новое расположение.

  4. Перезапустите экземпляр SQL Server или сервер. Дополнительные сведения см. в разделе Запуск и перезапуск служб.

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

    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    

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

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

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

    Дополнительные сведения о включении компонента Service Broker см. в разделе ALTER DATABASE (Transact-SQL).

  2. Отправкой тестового сообщения проверьте работоспособность компонента Database Mail. Дополнительные сведения см. в разделе Устранение неполадок в работе компонента Database Mail.

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

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

ms345408.note(ru-ru,SQL.90).gifВажно!
Если база данных не может быть запущена, то есть если она находится в подозрительном или в невосстановленном состоянии, перемещение файла могут осуществить только члены фиксированной роли sysadmin.
  1. Остановите работу экземпляра SQL Server, если он запущен.

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

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

      NET START MSSQLSERVER /f /T3608
      
    • В случае с именованным экземпляром запустите следующую команду:

      NET START MSSQL$instancename /f /T3608
      

    Дополнительные сведения см. в разделе Как запустить экземпляр SQL Server (команды net).

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

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

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

  4. Выйдите из программы sqlcmd или из среды SQL Server Management Studio.

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

  6. Переместите файл или файлы в новое расположение.

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

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

    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    

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

Расположение базы данных Resource зависит от расположения базы данных master. Файлы данных и файлы журналов базы данных Resource должны быть расположены вместе, в одном каталоге с файлом данных базы данных master (master.mdf). Поэтому при перемещении базы данных master необходимо переместить в то же место базу данных Resource. Базу данных Resource нельзя помещать в сжатые или зашифрованные папки файловой системы NTFS. Это может сказаться на производительности и помешать обновлению версии.

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

  1. В меню Пуск выберите Все программы, укажите Microsoft SQL Server 2005, затем Средства настройки и выберите пункт Диспетчер конфигурации SQL Server.

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

  3. В диалоговом окне Свойства SQL Server (instance_name) перейдите на вкладку Дополнительно.

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

    -dC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG;-lC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\mastlog.ldf
    

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

    -dE:\SQLData\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG;-lE:\SQLData\mastlog.ldf
    
  5. Остановите работу экземпляра SQL Server, щелкнув правой кнопкой мыши имя экземпляра и выбрав команду Остановить.

  6. Переместите файлы master.mdf и mastlog.ldf на новое место.

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

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

      NET START MSSQLSERVER /f /T3608
      
    • В случае с именованным экземпляром выполните следующую команду.

      NET START MSSQL$instancename /f /T3608
      

    Дополнительные сведения см. в разделе Как запустить экземпляр SQL Server (команды net).

  8. С помощью команды sqlcmd или среды SQL Server Management Studio выполните следующие инструкции. Измените путь FILENAME таким образом, чтобы он соответствовал новому расположению файла данных базы данных master. Нельзя изменять ни имя базы данных, ни имена файлов.

    ALTER DATABASE mssqlsystemresource 
        MODIFY FILE (NAME=data, FILENAME= 'new_path_of_master\mssqlsystemresource.mdf');
    GO
    ALTER DATABASE mssqlsystemresource 
        MODIFY FILE (NAME=log, FILENAME= 'new_path_of_master\mssqlsystemresource.ldf');
    GO
    
  9. Переместите файлы mssqlsystemresource.mdf и mssqlsystemresource.ldf на новое место.

  10. Установите для базы данных Resource свойство «только для чтения» с помощью следующей инструкции.

    ALTER DATABASE mssqlsystemresource SET READ_ONLY;
    
  11. Выйдите из программы sqlcmd или среды SQL Server Management Studio.

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

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

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

    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID('master');
    GO
    

Примеры

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

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

ms345408.note(ru-ru,SQL.90).gifПримечание.
Поскольку база данных tempdb создается повторно при каждом запуске экземпляра SQL Server, то нет необходимости физически переносить файлы данных и журнала. Файлы создаются в новом месте во время перезагрузки службы на этапе 3. До перезагрузки службы база данных tempdb продолжает использовать файлы данных и журнала, расположенные в существующем месте.
  1. Определение логических имен файлов базы данных tempdb и их текущего местоположения на диске.

    SELECT name, physical_name AS CurrentLocation
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    GO
    
  2. Измените местоположение каждого файла с помощью инструкции 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
    
  3. Остановите и перезапустите экземпляр SQL Server.

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

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

См. также

Основные понятия

База данных Resource
База данных tempdb
База данных master
База данных msdb
База данных model
Перенос пользовательских баз данных
Остановка служб

Другие ресурсы

Перемещение файлов баз данных
Запуск и перезапуск служб
ALTER DATABASE (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

17 ноября 2008 г.

Обновления
  • Добавлено требование к расположению файлов данных и файлов журнала базы данных Resource: они должны находиться там же, где файл данных базы данных master.

14 апреля 2006 г.

Добавления
  • Добавлено важное примечание о перемещении системных баз данных после перестроения базы данных master.
Изменения
  • Изменена процедура перемещения баз данных master и Resource.