===== Как перенести файлы базы данных SQL Server в другой каталог или на другой диск ===== {{:microsoft-sql-server:t-sql-script-samples:pasted:20200924-091428.png }} Рассмотрим пример перемещения файлов пользовательской базы данных **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'); {{ :microsoft-sql-server:t-sql-script-samples:pasted:20200924-090340.png }} Выполним запрос на закрытие всех соединений к БД и перевод БД в одно-пользовательский режим: 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' ); {{ :microsoft-sql-server:t-sql-script-samples:pasted:20200924-090744.png }} Переведём базу данных в **Online**-режим и обратно включим многопользовательский режим работы с БД ALTER DATABASE [EffectOffice] SET ONLINE ALTER DATABASE [EffectOffice] SET MULTI_USER Запустим сторонние службы и приложения, использующие базу данных и убедимся в штатной работе с данными. После успешного запуска БД и проверок, можем удалить файлы с их исходного местоположения (''T:\DBCL02-EffectOffice'') ---- Дополнительные источники информации: * [[https://blog.it-kb.ru/2010/11/27/sql-server-2008-move-db-files-to-another-disk/|Перенос файлов БД tempdb на отдельный диск]] ---- Проверено на следующих конфигурациях: ^ Версия SQL Server ^ | Microsoft SQL Server 2016 Standard Edition SP2 CU14 (13.0.5830.85) | ---- {{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 24.09.2020 09:15 {{tag>SQL "Microsoft SQL Server" Database T-SQL Transact-SQL "SQL Server 2016"}} ~~DISCUSSION~~