Відповіді:
Вам не потрібно зупиняти службу 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;
Перемістити / скопіювати файли на нове місце
Просто скопіюйте файли за допомогою улюбленого методу (Клацніть 'Перетягніть, XCopy, Копіюйте-елемент, Робокопія)
Донесіть до бази даних в Інтернеті
ALTER DATABASE foo SET ONLINE;
Ви можете ознайомитись з цим детальніше описаним тут .
MODIFY FILE
порядок є змінним. Якщо спершу запустити MODIFY FILE, він повідомить вам, що команда успішно виконується, а місце розташування буде змінено після роботи в режимі офлайн-онлайн (формулювання відрізняється, але ви зрозумієте, що це ідея). Офлайн-> Перемістити файли-> Замовлення в Інтернеті має значення, хоча з очевидних причин. Позначте також примітку 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
. У процесі відновлення ви можете визначити нове розташування файлів бази даних.
Для переміщення файлів системної бази даних виконайте наступні дії:
Увійдіть як користувач у 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' )
Наприклад:
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
У SSMS клацніть правою кнопкою миші Сервер та виберіть властивості. Внутрішні властивості перейдіть у Налаштування бази даних. Змініть розташування за замовчуванням у базі даних для Data and Log на шлях призначення. Вийдіть із сервера.
Наприклад: змінити C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\
наE:\projects\DataBaseFiles\MSSQL\DATA\
Зупиніть екземпляр SQL Server.
Скопіюйте файл або файли на нове місце. Використовуйте Robocopy для переміщення файлів, щоб скопіювати дозволи на доступ до папки призначення. Відкрийте cmd та запустіть як адміністратор та скористайтеся такою командою:
робокопія / сек джерелоFolder призначенняFolder
Краще перейти до місця розташування джерела, щоб виконати команду. Видаліть інші файли, крім файлів системної бази даних, які скопійовані. Наприклад:
robocopy /sec .\DATA E:\projects\DataBaseFiles\MSSQL\DATA\
(Тут ми переміщуємо всі файли системних баз даних на нове місце.)
Виконайте наступні дії в Менеджері конфігурацій SQL Server:
У вузлі Служб SQL Server клацніть правою кнопкою миші екземпляр 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.
Увійдіть як sa
користувач у SSMS та перевірте розташування файлів бази даних, виконавши наступний запит:
USE master;
SELECT * FROM sys.master_files;
Все зроблено.
Ви робите покроково:
закрити все підключення
АЛЬТЕР ДАТАБАЗА MyDB SET SINGLE_USER З НЕМОВНИМИ ПОВЕРХНЯМИ
встановити базу даних зі статусом в режимі офлайн
ALTER DATABASE MyDB SET OFFLINE
До нового шляху
ПОДІЛЕННЯ ДАТАБАЗИ ФОТО ЗМІНИ МОДБ (Ім'я = MyDB, Ім'я файлу = 'N: \ DATA \ MyDB.MDF')
встановити базу даних зі статусом в Інтернеті
ПІДКЛЮЧЕННЯ ДАТАБАЗИ 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 для переміщення даних зі старого файлу в новий файл. Після цього ви можете видалити старий файл даних.
Не моє рішення, я сам шукав це рішення і вважав його дуже корисним для нашого виробничого середовища.
Торфін
Виконайте ці прості 4 кроки:
CurrentLocation
стовпці.
SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID('DATABASE_NAME');
ALTER DATABASE DATABASE_NAME MODIFY FILE ( NAME = DATABASE_FILE_NAME , FILENAME = 'NEW_PATH\DATABASE_NAME.mdf');
ALTER DATABASE DATABASE_NAME MODIFY FILE ( NAME = DATABASE_FILE_NAME_log , FILENAME = 'NEW_PATH\DATABASE_FILE_NAME_log.ldf');
Тепер зупиніть сервер правою кнопкою миші, Server_Name
яку ви можете побачити в Провіднику об’єктів (зліва).
Потім перемістіть обидва файли зі Старого Шляху на Новий Шлях та знову запустіть сервер, клацнувши правою кнопкою миші на Сервер_Ім'я. Підтвердьте новий шлях бази даних, знову виконавши запит 1-го кроку.
Я не впевнений, що це найкращий спосіб (я б вітав будь-які коментарі, щоб сказати, як це не так), але це дуже просто (і швидко, якщо у вас є невелика база даних):
Спочатку створіть резервну копію бази даних у .bak-файлі. Потім відновіть базу даних із того самого файлу .bak, вибравши нове розташування файлів .mdf та .ldf у параметрах файлів для завдання відновлення.
Я б не робив цього у виробничому середовищі поза вікном технічного обслуговування, оскільки ви не можете отримати доступ до бази даних під час відновлення. Інші методи, які я бачив вище, мали б подібні недоліки. Після завершення завдання відновлення вам не доведеться видаляти старий файл. Це робиться автоматично.
Для доповнення існуючих відповідей: Ось сценарій для створення ALTER DATABASE ... MOVE ...
висловлювань для всіх баз даних:
SELECT 'ALTER DATABASE ' + QUOTENAME(d.name) +
' MODIFY FILE (name=' + QUOTENAME(f.name, '''') +
', filename=' + QUOTENAME(REPLACE(f.physical_name, 'C:\', 'D:\'), '''') +
');'
FROM sys.master_files AS f
INNER JOIN sys.databases AS d ON f.database_id = d.database_id
WHERE d.name <> 'master';
Примітка:
Замініть REPLACE(f.physical_name, 'C:\', 'D:\')
будь-яке перетворення, яке ви хочете зробити до файлових шляхів.
master
не застосовується, оскільки його шлях визначається параметрами запуску SQL Server (детальніше див., наприклад, цю відповідь ).
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