У меня есть база данных и хочу переместить .mdf
и .ldf
файлы в другое место. Но я не хочу останавливать MSSQLSERVER
службу, и я не хочу экспортировать на другой сервер.
Как я могу это сделать?
источник
У меня есть база данных и хочу переместить .mdf
и .ldf
файлы в другое место. Но я не хочу останавливать MSSQLSERVER
службу, и я не хочу экспортировать на другой сервер.
Как я могу это сделать?
Вам не нужно останавливать службу SQL Server для перемещения файлов базы данных, но вы должны перевести определенную базу данных в автономный режим. Это связано с тем, что вы не можете перемещать файлы, когда к ним обращаются, а перевод базы данных в автономный режим останавливает использование файлов приложением SQL Server.
Процесс их перемещения довольно прост. Отделение / Присоединение уже было описано, но это не так уж сложно.
Измените расположение файлов с помощью ALTER DATABASE
команды:
USE master; --do this all from the master
ALTER DATABASE foo
MODIFY FILE (name='DB_Data1'
,filename='X:\NewDBFile\DB_Data1.mdf'); --Filename is new location
Обратите внимание, вам не нужно объявлять старое местоположение в этой команде. Изменение этого пути не вступает в силу немедленно, но будет использовано при следующем запуске базы данных.
Установить базу данных в автономном режиме
(Я использую, WITH ROLLBACK IMMEDIATE
чтобы выгнать всех и откатить все открытые в настоящее время транзакции)
ALTER DATABASE foo SET OFFLINE WITH ROLLBACK IMMEDIATE;
Переместить / скопировать файлы на новое место
Просто скопируйте файлы, используя ваш любимый метод (Click 'n Drag, XCopy, Copy-Item, Robocopy)
Подключите базу данных онлайн
ALTER DATABASE foo SET ONLINE;
Вы можете увидеть это описано более подробно здесь .
USE master; --do this all from the master ALTER DATABASE foo MODIFY FILE (name='DB_Data1_log' ,filename='X:\NewDBFile\DB_Data1_log.ldf'); --Filename is new location
MODIFY FILE
порядок меняется. Если вы сначала запустите MODIFY FILE, он сообщит вам, что команда выполняется успешно, и местоположение будет изменено после автономной онлайн-операции (формулировка другая, но вы понимаете). Порядок Offline-> Move files-> Online имеет значение, хотя и по понятной причине. Также отметьте примечание Demonslay335. Разрешение файла важно.Файлы MDF и LDF защищены и не могут быть перемещены, когда база данных находится в сети.
Если вы не против остановить работу базы данных, то можете
DETACH
, переместите файлы и затемATTACH
.Properties
Files
вкладкуPath
иFileName
МДФ и LDF файлов . Этот шаг важен в том случае, если вы не хотите в конечном итоге искать отсутствующие файлы ...Tasks -> Detach
Databases
узел вашего сервера.Attach
Add
кнопкуOK
Вы должны быть в порядке сейчас. Информацию о
DETACH
-ATTACH
процессе можно найти здесь .В ссылке о
DETACH
-ATTACH
есть рекомендация об использованииALTER DATABASE
оператора, если база данных хранится на одном и том же экземпляре SQL Server. Больше ссылок в разделе Перемещение пользовательских баз данных .Если вы хотите, чтобы он работал во время движения, то выполните
BACKUP
-RESTORE
. В процессе восстановления вы можете определить новое расположение файлов базы данных.источник
Для перемещения файлов системной базы данных выполните следующие действия:
Войти как пользователь sa в SSMS
Сделайте резервную копию созданной пользователем базы данных для безопасности.
Убить все сеансы, подключенные к Серверу из SSMS.
Выполните следующую команду, чтобы проверить текущее расположение файлов системных баз данных:
USE master;
SELECT * FROM sys.master_files;
Определите путь и запишите текущий путь к файлам.
Используйте TSQL, чтобы изменить путь к файлу для всей базы данных, кроме главной:
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
Например:
Теперь местоположение файла было изменено.
Убедитесь, что вы переместили как файлы ldf, так и mdf
В SSMS щелкните правой кнопкой мыши Сервер и выберите свойства. Внутри свойства перейдите в настройки базы данных. Измените расположение базы данных по умолчанию для данных и журнала на путь назначения. Выйдите из системы с сервера.
Например: изменить
C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\
наE:\projects\DataBaseFiles\MSSQL\DATA\
Остановите экземпляр SQL Server.
Скопируйте файл или файлы в новое место. Используйте Robocopy для перемещения файлов, чтобы скопировать права доступа в папку назначения. Откройте cmd и запустите от имени администратора и используйте следующую команду:
robocopy / sec sourceFolder destinationFolder
Лучше перейти в исходное местоположение, чтобы запустить команду. Удалите другие файлы, кроме файлов системной базы данных, которые копируются. Например:
(Здесь мы перемещаем все файлы базы данных системы в новое место.)
Выполните следующие шаги в диспетчере конфигурации SQL Server:
В узле Службы SQL Server щелкните правой кнопкой мыши экземпляр SQL Server (например, SQL Server (MSSQLSERVER)) и выберите Свойства. В диалоговом окне Свойства SQL Server (имя_экземпляра) перейдите на вкладку Параметры запуска. В поле «Существующие параметры» выберите параметр –d, чтобы переместить файл основных данных. Нажмите «Обновить», чтобы сохранить изменения. В поле Указать параметр запуска измените параметр на новый путь к базе данных master. В поле «Существующие параметры» выберите параметр –l, чтобы переместить главный файл журнала. Нажмите «Обновить», чтобы сохранить изменения. В поле Указать параметр запуска измените параметр на новый путь к базе данных master.
Значение параметра для файла данных должно соответствовать параметру -d, а значение для файла журнала должно соответствовать параметру -l. В следующем примере показаны значения параметров для расположения по умолчанию файла основных данных.
Если запланированное перемещение для файла основных данных E: \ SQLData, значения параметров будут изменены следующим образом:
Остановите экземпляр SQL Server, щелкнув правой кнопкой мыши имя экземпляра и выбрав Стоп. Перезапустите экземпляр SQL Server.
Войдите в систему как
sa
пользователь в SSMS и проверьте расположение файлов базы данных, выполнив следующий запрос:USE master;
SELECT * FROM sys.master_files;
Все сделано.
источник
Вы делаете шаг за шагом:
закрыть все соединение
ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
установить базу данных со статусом офлайн
ALTER DATABASE MyDB SET OFFLINE
По новому пути
ALTER DATABASE MyDB MODIFY FILE (Имя = MyDB, Имя файла = 'N: \ DATA \ MyDB.MDF')
установить базу данных со статусом онлайн
ALTER DATABASE MyDB SET ONLINE
установить многопользовательскую
ALTER DATABASE MyDB SET MULTI_USER
источник
Есть способ переместить файлы данных базы данных (пока не уверен, есть ли способ сделать это для файлов журналов), не переводя базу данных в автономный режим.
Деян Накарада-Кордик имеет объяснение + сценарии для этого метода здесь: https://www.itprotoday.com/sql-server/move-database-files-without-taking-database-offline
Короткая версия состоит в том, что вы добавляете другой файл базы данных в новом месте, а затем используете DBCC Shrinkfile с опцией EMPTYFILE, чтобы переместить данные из старого файла в новый файл. Когда это будет сделано, вы можете удалить старый файл данных.
Не мое решение, я сам искал это решение и нашел его очень полезным для нашей производственной среды.
Thorfinn
источник
Выполните следующие простые 4 шага:
CurrentLocation
столбце.Теперь остановите сервер правой кнопкой мыши,
Server_Name
который вы видите в обозревателе объектов (левая сторона).Затем переместите оба файла из старого пути в новый путь и снова запустите сервер, щелкнув правой кнопкой мыши имя_сервера. Подтвердите новый путь к базе данных, снова выполнив запрос первого шага.
источник
Я не уверен, что это лучший способ (я хотел бы получить любые комментарии, чтобы сказать мне, как это не так), но это очень просто (и быстро, если у вас небольшая база данных):
Сначала сделайте резервную копию базы данных в файл .bak. Затем восстановите базу данных из того же файла .bak, выбрав новые расположения файлов .mdf и .ldf в разделе параметров файла для задачи восстановления.
Я бы не стал делать это в производственной среде, кроме окна обслуживания, поскольку вы не можете получить доступ к базе данных во время восстановления. Другие методы, которые я видел выше, имели бы подобные недостатки. После того, как задача восстановления выполнена, вам не нужно удалять старый файл. Это автоматически делается.
источник
В дополнение к существующим ответам: Вот скрипт для создания
ALTER DATABASE ... MOVE ...
операторов для всех баз данных:Примечание:
Замените
REPLACE(f.physical_name, 'C:\', 'D:\')
любым преобразованием, которое вы хотите внести в пути к файлам.master
освобождается, поскольку его путь определяется параметрами запуска SQL Server (подробности см., например, в этом ответе ).источник