- Операционные системы
- Виртуализация
- IT-инфраструктура
- Защита ИС и периметра
- Сетевые службы
- Хранение данных
- СУБД
- Объединенные коммуникации
- Веб-серверы и веб-движки
- Скриптинг
microsoft-sql-server:t-sql-script-samples:how-to-move-sql-server-database-files-to-another-directory-or-to-a-different-driveКак перенести файлы базы данных SQL Server в другой каталог или на другой диск
Рассмотрим пример перемещения файлов пользовательской базы данных SQL Server в новое месторасположение. В рассматриваемом примере все файлы одной отдельно взятой БД с именем
EffectOffice
будут перенесены с одного логического диска на другой (с дискаT:\
на дискU:\
).Перед началом процедуры переноса файлов базы данных остановим cервисы и приложения, работающие с этой базой данных.
Подключимся к экземпляру SQL Server, на котором расположена интересующая нас база данных и выясним текущее размещение файлов БД с помощью запроса:
USE master; SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID('EffectOffice');
Выполним запрос на закрытие всех соединений к БД и перевод БД в одно-пользовательский режим:
ALTER DATABASE [EffectOffice] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
Переведём базу данных в Offline-режим:
ALTER DATABASE [EffectOffice] SET OFFLINE;
Выполним копирование файлов БД в новое место-расположение с помощью утилиты командной строки robocopy, которая позволит нам сохранить все разрешения на каталоги и файлы на уровне NTFS.
В нашем примере файлы БД копируются из каталога
T:\DBCL02-EffectOffice
в каталогU:\DBCL02-EffectOffice
. Каталог назначения при этом будет создан в процессе копирования и на него будут скопированы все атрибуты исходного каталога.ROBOCOPY "T:\DBCL02-EffectOffice" "U:\DBCL02-EffectOffice" ^ /E /B /COPYALL /DCOPY:DAT /V /R:2 /W:10 ^ /UNILOG+:U:\Robocopy.log /BYTES /TEE /NP /UNICODE
Выполним замену путей к файлам на уровне SQL Server запросом вида (отдельный запрос по каждому файлу):
ALTER DATABASE [EffectOffice] MODIFY FILE ( Name = 'EffectOffice_dat', Filename = 'U:\DBCL02-EffectOffice\EffectOffice.mdf' ); ALTER DATABASE [EffectOffice] MODIFY FILE ( Name = 'EffectOffice_log', Filename = 'U:\DBCL02-EffectOffice\EffectOffice_log.LDF' ); ALTER DATABASE [EffectOffice] MODIFY FILE ( Name = 'EffectOffice_Version_dat', Filename = 'U:\DBCL02-EffectOffice\EffectOffice_Version_dat.ndf' ); ALTER DATABASE [EffectOffice] MODIFY FILE ( Name = 'EffectOffice_Message_dat', Filename = 'U:\DBCL02-EffectOffice\EffectOffice_Message_dat.ndf' ); ALTER DATABASE [EffectOffice] MODIFY FILE ( Name = 'EffectOffice_Blob_dat', Filename = 'U:\DBCL02-EffectOffice\EffectOffice_Blob_dat.ndf' );
Переведём базу данных в Online-режим и обратно включим многопользовательский режим работы с БД
ALTER DATABASE [EffectOffice] SET ONLINE ALTER DATABASE [EffectOffice] SET MULTI_USER
Запустим сторонние службы и приложения, использующие базу данных и убедимся в штатной работе с данными.
После успешного запуска БД и проверок, можем удалить файлы с их исходного местоположения (
T:\DBCL02-EffectOffice
)
Дополнительные источники информации:
Проверено на следующих конфигурациях:
Версия SQL Server Microsoft SQL Server 2016 Standard Edition SP2 CU14 (13.0.5830.85)
Автор первичной редакции:
Алексей Максимов
Время публикации: 24.09.2020 09:15microsoft-sql-server/t-sql-script-samples/how-to-move-sql-server-database-files-to-another-directory-or-to-a-different-drive.txt · Последнее изменение: 24.09.2020 09:15 — Алексей Максимов
Инструменты страницы
Обсуждение