Перемещение пользовательских баз данных
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, полнотекстовые каталоги интегрированы в базу данных, а не хранятся в файловой системе. Полнотекстовые каталоги теперь перемещаются автоматически при перемещении базы данных.
Процедура запланированного перемещения
Для запланированного перемещения файлов журнала или данных выполните следующие действия.
Выполните следующую инструкцию:
ALTER DATABASE database_name SET OFFLINE;
Переместите файл или файлы в новое расположение.
Для каждого перемещенного файла выполните следующую инструкцию:
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );
Выполните следующую инструкцию:
ALTER DATABASE database_name SET ONLINE;
Проверьте изменения в файле с помощью следующего запроса.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
Перемещение для запланированного обслуживания дисков
Чтобы переместить файл во время процесса запланированного обслуживания дисков, необходимо выполнить нижеприведенные шаги.
Для каждого перемещаемого файла выполните следующую инструкцию.
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' );
Остановите работу экземпляра SQL Server или выключите систему для проведения работ по обслуживанию дисков. Дополнительные сведения см. в разделе Запуск, остановка, приостановка, возобновление и перезапуск компонента Database Engine, агента SQL и службы браузера SQL Server.
Переместите файл или файлы в новое расположение.
Перезапустите экземпляр SQL Server или сервер. Дополнительные сведения см. в разделе Запуск, остановка, приостановка, возобновление и перезапуск компонента Database Engine, агента SQL и службы браузера SQL Server.
Проверьте изменения в файле с помощью следующего запроса.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
Процедура восстановления после сбоя
Если файл необходимо переместить в новое место из-за аппаратного сбоя, выполните следующие действия.
Важно! |
---|
Если базу данных запустить нельзя, она находится в подозрительном режиме или в невосстановленном состоянии, то файл может быть перемещен только членом предопределенной роли sysadmin. |
Остановите работу экземпляра SQL Server, если он запущен.
Запустите экземпляр SQL Server в режиме восстановления «только master», запустив из командной строки одну из следующих команд.
В случае с экземпляром по умолчанию (MSSQLSERVER) выполните следующую команду.
NET START MSSQLSERVER /f /T3608
В случае с именованным экземпляром выполните следующую команду.
NET START MSSQL$instancename /f /T3608
Дополнительные сведения см. в разделе Запуск, остановка, приостановка, возобновление и перезапуск компонента Database Engine, агента SQL и службы браузера SQL Server.
Для каждого перемещаемого файла используйте команды sqlcmd или Среда SQL Server Management Studio для выполнения следующей инструкции.
ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' );
Дополнительные сведения об использовании программы sqlcmd см. в разделе Использование программы sqlcmd.
Выйдите из программы sqlcmd или Среда SQL Server Management Studio.
Остановите экземпляр SQL Server.
Переместите файл или файлы в новое расположение.
Запустите экземпляр SQL Server. Например, выполните команду NET START MSSQLSERVER.
Проверьте изменения в файле с помощью следующего запроса.
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';
См. также
Справочник
CREATE DATABASE (Transact-SQL)
Основные понятия
Присоединение и отсоединение базы данных (SQL Server)
Перемещение системных баз данных