Поделиться через


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

Область применения: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';