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

Область применения: SQL Server

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

Примечание.

В этой статье рассматривается перемещение файлов пользовательской базы данных. Сведения о перемещении файлов системной базы данных см. в разделе "Перемещение системных баз данных".

Рекомендации

При перемещении базы данных на другой экземпляр сервера для обеспечения согласованного взаимодействия с пользователями и приложениями может потребоваться повторно создать некоторые или все метаданные для базы данных. Дополнительные сведения см. в разделе "Управление метаданными при создании базы данных" на другом сервере.

Некоторые функции SQL Server ядро СУБД изменить способ хранения данных в файлах базы данных ядро СУБД. Эти функции ограничены определенными выпусками SQL Server. База данных, содержащая эти функции, не может быть перемещена в выпуск SQL Server, который не поддерживает их. Используйте динамическое административное представление sys.dm_db_persisted_sku_features для просмотра всех функций текущей базы данных, зависящих от выпуска.

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

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

Примечание.

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

Запланированные процедуры перемещений

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

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

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    
  2. Выполните следующую инструкцию, чтобы перевести базу данных в автономный режим.

    ALTER DATABASE database_name
        SET OFFLINE;
    

    Для выполнения этого действия требуется эксклюзивный доступ к базе данных. Если другое подключение открыто к базе данных, ALTER DATABASE инструкция блокируется до закрытия всех подключений. Чтобы переопределить это поведение, используйте предложение WITH <termination>. Например, чтобы автоматически откатить и отключить все остальные подключения к базе данных, используйте следующую команду:

    ALTER DATABASE database_name
         SET OFFLINE
         WITH ROLLBACK IMMEDIATE;
    
  3. Переместите файл или файлы в новое расположение.

  4. Выполните следующую инструкцию:

    ALTER DATABASE database_name
        SET ONLINE;
    
  5. Проверьте изменения в файле с помощью следующего запроса.

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

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

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

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

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

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

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

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

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

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

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

Внимание

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

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

  2. Запустите экземпляр SQL Server в masterрежиме восстановления только с помощью одной из следующих команд в командной строке.

  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.

  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>');
    

Примеры

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

  1. Убедитесь, что вы находитесь в контексте master базы данных.

    USE master;
    GO
    
  2. Возвращает имя логического файла.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'AdventureWorks2022')
          AND type_desc = N'LOG';
    GO
    
  3. Установите базу данных в автономном режиме.

    ALTER DATABASE AdventureWorks2022
        SET OFFLINE;
    GO
    
  4. Физически переместите файл в новое расположение. В следующей инструкции измените путь, указанный в FILENAME новом расположении файла на сервере.

    ALTER DATABASE AdventureWorks2022
        MODIFY FILE (NAME = AdventureWorks2022_Log, FILENAME = 'C:\NewLoc\AdventureWorks2022_Log.ldf');
    GO
    
    ALTER DATABASE AdventureWorks2022
        SET ONLINE;
    GO
    
  5. Проверьте новое расположение.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'AdventureWorks2022')
          AND type_desc = N'LOG';