Как перенести файлы базы данных SQL Server?

У меня есть база данных и вы хотите переместить файлы .mdf и .ldf в другое место. Но я не хочу останавливать службу MSSQLSERVER, и я не хочу экспортировать ее на другой сервер.

Как я могу это сделать?

73 голоса | спросил user2645263 22 +04002013-10-22T16:26:26+04:00312013bEurope/MoscowTue, 22 Oct 2013 16:26:26 +0400 2013, 16:26:26

6 ответов


113

Вам не нужно останавливать службу SQL Server для перемещения файлов базы данных, но вам нужно отключить конкретную базу данных. Это связано с тем, что вы не можете перемещать файлы во время их доступа, а использование базы данных в автономном режиме останавливает использование файлов приложением SQL Server.

Процесс их перемещения довольно прост. Detach /Attach уже был описан, но это не так сложно.

Изменить расположение файлов с помощью команды 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;

Переместить /Скопировать файлы в новое место

Просто скопируйте файлы с помощью своего любимого метода (нажмите «n Drag, XCopy, Copy-Item, Robocopy)

Принесите базу данных онлайн

ALTER DATABASE foo SET ONLINE;

Вы можете увидеть это более подробно здесь .

ответил Mike Fal 23 +04002013-10-23T02:39:13+04:00312013bEurope/MoscowWed, 23 Oct 2013 02:39:13 +0400 2013, 02:39:13
34

Файлы MDF и LDF защищены и не могут быть перемещены во время работы базы данных.

Если вы не возражаете, чтобы база данных не работала, вы можете DETACH ее переместить, а затем ATTACH.

  • Щелкните правой кнопкой мыши имя базы данных
  • Выберите Properties
  • Перейдите на вкладку Files
  • Обратите внимание на Path и FileName файлов MDF и LDF . Этот шаг важен, если вы не хотите искать недостающие файлы ...
  • Щелкните правой кнопкой мыши имя базы данных
  • Выберите Tasks -> Detach
  • Переместите файлы, в которых вы хотите.
  • Щелкните правой кнопкой мыши узел Databases вашего сервера
  • Выберите Attach
  • Нажмите кнопку Add
  • Укажите на новое местоположение
  • Нажмите OK

Теперь вы должны быть в порядке. Информацию о DETACH - ATTACH можно найти .

В ссылке о DETACH - ATTACH есть рекомендация использовать инструкцию ALTER DATABASE, если поддерживать базу данных на том же экземпляр SQL Server. Дополнительная ссылка в Перенос пользовательских баз данных .

Если вы хотите, чтобы он работал во время перемещения, выполните BACKUP - RESTORE. В процессе восстановления вы можете определить новое местоположение файлов базы данных.

ответил Giannis Paraskevopoulos 22 +04002013-10-22T16:29:16+04:00312013bEurope/MoscowTue, 22 Oct 2013 16:29:16 +0400 2013, 16:29:16
4

Чтобы переместить файлы системной базы данных, выполните следующие действия:

  1. Войдите как пользователь в SSMS

  2. Сделайте резервную копию созданной пользователем базы данных для обеспечения безопасности.

  3. Убейте все сеансы, подключенные к серверу из SSMS.

  4. Выполните следующую команду, чтобы проверить текущее расположение файлов в системных базах данных:

    USE master;
    SELECT * FROM sys.master_files;

Определите путь и обратите внимание на текущий путь к файлам.

  1. Используйте TSQL для изменения пути к файлу для всей базы данных, кроме master:

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )

Например:

ALTER DATABASE tempdb
MODIFY FILE ( NAME = tempdev
, FILENAME = "DestinationPath\tempdb.mdf");

ALTER DATABASE tempdb
MODIFY FILE ( NAME = templog
, FILENAME = "DestinationPath\templog.ldf");

ALTER DATABASE model
MODIFY FILE ( NAME = modeldev
, FILENAME = "DestinationPath\model.mdf");

ALTER DATABASE model
MODIFY FILE ( NAME = modellog
, FILENAME = "DestinationPath\modellog.ldf");

ALTER DATABASE msdb
    MODIFY FILE ( NAME = MSDBData
, FILENAME = "DestinationPath\msdbdata.mdf");

ALTER DATABASE msdb
    MODIFY FILE ( NAME = MSDBLog
, FILENAME = "DestinationPath\msdblog.ldf");

Теперь местоположение файла было изменено.

Обязательно перемещайте файлы ldf и mdf

  1. В SSMS щелкните правой кнопкой мыши Сервер и выберите свойства. Внутри свойств перейдите в Настройки базы данных. Измените базы данных по умолчанию для данных и журнала на путь назначения. Выйдите из сервера.

    Например: change C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\ в E:\projects\DataBaseFiles\MSSQL\DATA\

  2. Остановить экземпляр SQL Server.

  3. Скопируйте файл или файлы в новое место. Используйте Robocopy для перемещения файлов, чтобы скопировать разрешения доступа в папку назначения. Откройте cmd и запустите его как администратор и используйте следующую команду:

    robocopy /sec sourceFolder destinationFolder

Лучше перейти в исходное местоположение, чтобы запустить команду. Удалите другие файлы, кроме файлов системной базы данных, которые копируются. Например:

 robocopy /sec .\DATA E:\projects\DataBaseFiles\MSSQL\DATA\

(Здесь мы перемещаем все файлы системных баз данных в новое место.)

  1. В меню «Пуск» выберите «Все программы», «Microsoft SQL Server», «Средства настройки» и «Диспетчер конфигурации SQL Server».

Выполните следующие шаги в диспетчере конфигурации SQL Server:

В узле SQL Server Services щелкните правой кнопкой мыши экземпляр SQL Server (например, SQL Server (MSSQLSERVER)) и выберите «Свойства». В диалоговом окне Свойства SQL Server (имя экземпляра) нажмите вкладку «Параметры запуска». В поле «Существующие параметры» выберите параметр «d», чтобы переместить файл основных данных. Нажмите «Обновить», чтобы сохранить изменения. В поле «Укажите параметр запуска» измените параметр на новый путь к основной базе данных. В поле «Существующие параметры» выберите параметр «l», чтобы переместить файл главного журнала. Нажмите «Обновить», чтобы сохранить изменения. В поле «Укажите параметр запуска» измените параметр на новый путь к основной базе данных.

Значение параметра для файла данных должно соответствовать параметру -d, а значение для файла журнала должно соответствовать параметру -l. В следующем примере показаны значения параметров для местоположения файла основных данных по умолчанию.

-dC:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\master.mdf
-lC:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\mastlog.ldf

Если запланированное перемещение для файла основных данных E: \ SQLData, значения параметров будут изменены следующим образом:

-dE:\projects\DataBaseFiles\MSSQL\DATA\master.mdf
-lE:\projects\DataBaseFiles\MSSQL\DATA\mastlog.ldf

Остановите экземпляр SQL Server, щелкнув правой кнопкой мыши имя экземпляра и выбрав «Стоп». Перезапустите экземпляр SQL Server.

  1. Войдите в систему как пользователь sa в SSMS и проверьте расположение файлов базы данных, выполнив следующий запрос:

    USE master;
    SELECT * FROM sys.master_files;

Все сделано.

ответил abhay sreekumar 22 Jam1000000amSun, 22 Jan 2017 08:47:04 +030017 2017, 08:47:04
1

Я не уверен, что это лучший способ (я бы приветствовал любые комментарии, чтобы рассказать мне, как это не так), но это очень просто (и быстро, если у вас небольшая база данных):

Сначала создайте резервную копию базы данных в файле .bak. Затем восстановите базу данных из того же .bak-файла, выбрав новые .mdf и .ldf-файлы в параметрах файла для задачи восстановления.

Я бы не делал этого в производственной среде ouside окна обслуживания, так как вы не можете получить доступ к базе данных во время восстановления. Однако другие методы, которые я видел выше, будут иметь сходные недостатки. После выполнения задачи восстановления вам не нужно удалять старый файл. Это делается автоматически.

ответил Ali 1 J000000Friday16 2016, 13:51:37
1

Есть способ переместить файлы данных базы данных (еще не уверен, есть ли способ сделать это для файлов журналов), не отключая базу данных в автономном режиме.

Dejan Nakarada-Kordic имеет объяснение + скрипты для этого метода здесь: http://sqlmag.com/t-sql/move-database-files-without-taking-database-offline

Краткая версия заключается в том, что вы добавляете другой файл базы данных в новое место, а затем используете DBCC Shrinkfile с опцией EMPTYFILE для перемещения данных из старого файла в новый файл. Когда это будет сделано, вы можете удалить старый файл данных.

Не мое решение, я сам искал это решение и нашел его очень полезным для нашей производственной среды.

Thorfinn

ответил Thorfinn Thomassen 1 PM00000030000004131 2017, 15:57:41
-2

Мастер копирования базы данных можно использовать в режиме резервного копирования и восстановления. Щелкните правой кнопкой мыши на db задача Копировать базу данных

ответил Amir Keshavarz 22 +04002013-10-22T16:36:41+04:00312013bEurope/MoscowTue, 22 Oct 2013 16:36:41 +0400 2013, 16:36:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132