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

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

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

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

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

В этом разделе

Перед началом

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

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

Процедура перемещения базы данных master

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

Пример перемещения базы данных tempdb

Перед началом

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

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

Базу данных resource переместить нельзя.

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

Важное примечаниеВажно!

При перемещении системной базы данных с последующим перестроением базы данных master необходимо заново переместить системную базу данных, поскольку операция перестроения устанавливает все системные базы данных в место расположения по умолчанию. Дополнительные сведения о перестроении базы данных master см. в подразделе «Перестроение системной базы данных и реестра» в разделе Как установить SQL Server 2008 R2 из командной строки.

Значок стрелки, используемый со ссылкой «В начало»[В начало]

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

Чтобы переместить данные системной базы данных или файл журнала в рамках запланированного перемещения (операции запланированного обслуживания), следуйте следующим указаниям: Данная процедура применима ко всем системным базам данных, кроме 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. Проверьте, что компонент Service Broker включен для базы данных msdb, выполнив следующий запрос.

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

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

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

Значок стрелки, используемый со ссылкой «В начало»[В начало]

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

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

Важное примечаниеВажно!

Если базу данных запустить нельзя, так как она находится в подозрительном режиме или в невосстановленном состоянии, то в файл можно переместить только член предопределенной роли 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

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

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

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

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

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

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

    -dC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\master.mdf
    -lC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\
    DATA\mastlog.ldf
    

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

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

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

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

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

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

Значок стрелки, используемый со ссылкой «В начало»[В начало]

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

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

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

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

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

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

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

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

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

  1. В среде SQL Server Management Studio в обозревателе объектов щелкните правой кнопкой мыши сервер SQL Server и выберите пункт Свойства.

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

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

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

Значок стрелки, используемый со ссылкой «В начало»[В начало]

Примеры

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

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

ПримечаниеПримечание

Так как база данных tempdb заново создается при каждом запуске службы SQL Server, физически перемещать файлы данных и журналов не нужно. Файлы создаются в новом месте во время перезагрузки службы на шаге 3. До перезагрузки службы база данных tempdb продолжает использовать файлы данных и журналов в прежнем расположении. После перезапуска службы SQL Server может потребоваться удалить старые файлы данных и журналов 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 из начального местоположения.

Значок стрелки, используемый со ссылкой «В начало»[В начало]