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

Изменения: 5 декабря 2005 г.

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

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

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

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

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

  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 или выключите систему для проведения работ по обслуживанию дисков. Дополнительные сведения см. в разделе Остановка служб.

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

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

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

ms345483.note(ru-ru,SQL.90).gifВажно!
Если базу данных запустить нельзя, она находится в подозрительном режиме или в невосстановленном состоянии, то файл может быть перемещен только членом фиксированной роли 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.

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

  7. Запустите экземпляр SQL Server. Например, выполните команду NET START MSSQLSERVER. NET START MSSQLSERVER.

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

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

Перенос полнотекстовых каталогов

Для перемещения полнотекстового каталога выполните следующие действия. Обратите внимание, что при задании нового расположения каталога вместо new_path/os_file_name указывается new_path.

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

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

  3. Выполните следующую инструкцию, где logical_name — значение столбца name представления каталога sys.database_files, а new_path — новое расположение каталога.

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path')
    
  4. Выполните следующую инструкцию:

    ALTER DATABASE database_name SET ONLINE
    

Кроме того, для перемещения полнотекстового каталога можно использовать предложение FOR ATTACH инструкции CREATE DATABASE. В следующем примере полнотекстовый каталог создается в базе данных AdventureWorks. Для переноса полнотекстового каталога в новое местоположение база данных AdventureWorks отсоединяется, и полнотекстовый каталог физически переносится в новое местоположение. После этого база данных присоединяется с указанием нового местонахождения полнотекстового каталога.

USE AdventureWorks;
CREATE FULLTEXT CATALOG AdvWksFtCat AS DEFAULT;
GO
USE master;
GO
--Detach the AdventureWorks database.
sp_detach_db AdventureWorks;
GO
--Physically move the full-text catalog to the new location.
--Attach the AdventureWorks database and specify the new location of the full-text catalog.
CREATE DATABASE AdventureWorks ON 
    (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf'), 
    (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_log.ldf'),
    (FILENAME = 'c:\myFTCatalogs\AdvWksFtCat')
FOR ATTACH;
GO

Пример

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

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'AdventureWorks')
    AND type_desc = N'LOG';
GO
ALTER DATABASE AdventureWorks 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 AdventureWorks 
    MODIFY FILE ( NAME = AdventureWorks_Log, 
                  FILENAME = 'C:\NewLoc\AdventureWorks_Log.ldf');
GO
ALTER DATABASE AdventureWorks 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'AdventureWorks')
    AND type_desc = N'LOG';

См. также

Основные понятия

Присоединение и отсоединение баз данных
Перемещение системных баз данных
Остановка служб

Другие ресурсы

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

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

5 декабря 2005 г.

Измененное содержимое
  • Исправлены шаги во всех процедурах.