Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


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:15

Обсуждение

Ваш комментарий:
 

microsoft-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 — Алексей Максимов