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


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

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

Соображения

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

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

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

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

Процедура запланированного перемещения

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

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

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

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

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );  
    
  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 или службы "Обозреватель SQL Server".

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

  4. Перезапустите экземпляр SQL Server или сервера. Дополнительные сведения см. в статье "Пуск", "Остановка", "Приостановка", "Возобновление", "Перезапуск ядра СУБД", агента 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 в режиме восстановления только для главного сервера, введя одну из следующих команд в командной строке.

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

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

      NET START MSSQL$instancename /f /T3608  
      

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

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

Примеры

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

USE master;  
GO  
-- Return the logical file name.  
SELECT name, physical_name AS CurrentLocation, state_desc  
FROM sys.master_files  
WHERE database_id = DB_ID(N'AdventureWorks2012')  
    AND type_desc = N'LOG';  
GO  
ALTER DATABASE AdventureWorks2012 SET OFFLINE;  
GO  
-- Physically move the file to a new location.  
-- In the following statement, modify the path specified in FILENAME to  
-- the new location of the file on your server.  
ALTER DATABASE AdventureWorks2012   
    MODIFY FILE ( NAME = AdventureWorks2012_Log,   
                  FILENAME = 'C:\NewLoc\AdventureWorks2012_Log.ldf');  
GO  
ALTER DATABASE AdventureWorks2012 SET ONLINE;  
GO  
--Verify the new location.  
SELECT name, physical_name AS CurrentLocation, state_desc  
FROM sys.master_files  
WHERE database_id = DB_ID(N'AdventureWorks2012')  
    AND type_desc = N'LOG';  

См. также

Изменить базу данных (Transact-SQL)
CREATE DATABASE (SQL Server Transact-SQL)
Подключение и отсоединение базы данных (SQL Server)
Перемещение системных баз данных
Перемещение файлов базы данных
BACKUP (Transact-SQL)
RESTORE (Transact-SQL)
Запуск, остановка, приостановка, возобновление и перезапуск компонента Database Engine, агента SQL и службы браузера SQL Server