===== Как перенести файлы базы данных 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~~