Перемещение пользовательских баз данных
Область применения: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 и разрешений имеет разрешения на новое расположение файла в файловой системе. Дополнительные сведения см. в разделе "Настройка разрешений файловой системы для доступа к системе управления базами данных".
Запланированные процедуры перемещений
Для запланированного перемещения файлов журнала или данных выполните следующие действия.
Для каждого перемещаемого файла выполните следующую инструкцию.
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
Выполните следующую инструкцию, чтобы перевести базу данных в автономный режим.
ALTER DATABASE database_name SET OFFLINE;
Для выполнения этого действия требуется эксклюзивный доступ к базе данных. Если другое подключение открыто к базе данных,
ALTER DATABASE
инструкция блокируется до закрытия всех подключений. Чтобы переопределить это поведение, используйте конструкциюWITH <termination>
. Например, чтобы автоматически откатить и отключить все остальные подключения к базе данных, используйте следующую команду:ALTER DATABASE database_name SET OFFLINE WITH ROLLBACK IMMEDIATE;
Переместите файл или файлы в новое расположение.
Выполните следующую инструкцию:
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 или завершите работу системы. Дополнительные сведения см. в разделе "Пуск", "Остановка", "Приостановка", "Возобновление" и перезапуск служб SQL Server.
Переместите файл или файлы в новое расположение.
Перезапустите экземпляр SQL Server или сервера. Дополнительные сведения см. в разделе "Пуск", "Остановка", "Приостановка", "Возобновление" и "Перезапуск служб 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
Дополнительные сведения см. в разделе "Пуск", "Остановка", "Приостановка", "Возобновление" и перезапуск служб SQL Server. Сведения о Linux см. в статье "Запуск, остановка и перезапуск служб SQL Server в Linux".
Для перемещения каждого файла используйте команды 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>');
Примеры
В следующем примере файл журнала базы данных AdventureWorks2022
переносится в новое место во время запланированного перемещения.
Убедитесь, что вы находитесь в контексте базы данных
master
.USE master; GO
Возвращает имя логического файла.
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
Установите базу данных в автономном режиме.
ALTER DATABASE AdventureWorks2022 SET OFFLINE; GO
Физически переместите файл в новое расположение. В следующем заявлении измените путь, указанный в
FILENAME
, на новое расположение файла на вашем сервере.ALTER DATABASE AdventureWorks2022 MODIFY FILE (NAME = AdventureWorks2022_Log, FILENAME = 'C:\NewLoc\AdventureWorks2022_Log.ldf'); GO ALTER DATABASE AdventureWorks2022 SET ONLINE; GO
Проверьте новое расположение.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'AdventureWorks2022') AND type_desc = N'LOG';