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


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

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

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

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

Некоторые функции компонента Компонент SQL Server Database Engine изменяют способ, с помощью которого Компонент Database Engine хранит информацию в файлах базы данных. Эти функции зависят от конкретных выпусков 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 или выключите систему для проведения работ по обслуживанию дисков. Дополнительные сведения см. в статье Iniciar, parar, pausar, retomar e reiniciar os serviços 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 в режиме восстановления «только master», запустив из командной строки одну из следующих команд.

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

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

      NET START MSSQL$instancename /f /T3608  
      

    Дополнительные сведения см. в статье Iniciar, parar, pausar, retomar e reiniciar os serviços 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';  

См. также:

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