Я використовував для переміщення баз даних майже постійно через конфігурацію SAN та міграцію.
Припускаючи, що ви пересуваєте весь сервер за один раз, я б пішов з чимось на зразок вашого шляху №2. (Якщо ви переміщуєте по одній базі даних за один раз і в кінцевому підсумку робите кожну базу даних на сервері, це буде більш проблематично, оскільки вам доведеться змінювати шляхи до файлів.)
Зауважте, що "single_user" не обов'язково означає ВАС. Ви можете зайти до бази даних DBCC CHECKDB і не зможете зайти, тому що хтось уже там. Підготуйте сценарій, який ви можете запустити для завантаження "всіх, але ви" із бази даних, і тримати його у зручному місці. Зауважте, що SQL 2000 не має таких самих функцій "утримуйте всіх", як і більш сучасні версії.
Один старий трюк - призупинити послугу SQL Server. Це запобіжить появі нових входів, але кожен, хто вже підключений, може продовжувати, як завжди. Отже: підключіться через вікно SSMS, щоб ви могли працювати, потім призупиніть послугу, потім вимкніть небажані з'єднання, зробіть свою справу через вікно команд SSMS (не GUI, це робить і розриває безліч з'єднань), а потім скасуйте паузу. сервіс. Попередження: Я не впевнений, як це відбуватиметься на кластері. Це може захотіти відмову.
Зручно мати спосіб утримувати всіх користувачів програми поза сервером, поки ви не закінчите свою роботу. Інакше підключення можуть почати спливати, коли ви намагаєтесь робити щось, що може призвести до суперечок ресурсів та / або повільності. У минулому я використовував такі способи, залежно від точної ситуації: Вимкнення сервера додатків Використання ALTER DATABASE .. SET RESTRICTED_USER (Якщо облікові записи додатків є членами ролей db_owner, sysadmin або dbcreator, це проблема. ) Повідомлення користувачам, що система буде в автономному режимі в певний час, наприклад, в неділю вранці. (Це не буде працювати в "реальному" середовищі 24x7.) Відключення NIC, що стикається з серверами або користувачами додатків. (У цьому випадку я можу ввійти через інший NIC, підключений до мережі, призначеної лише адміністратором, або через ILO.)
Вилучення великої кількості баз даних та повторне приєднання їх може бути багато роботи. Якщо ви це зробите, переконайтеся, що ваш сценарій "прикріпити" написаний достроково.
У мене було багато успіхів, зупиняючи SQL Server, копіюючи все, змінюючи літери накопичувача та запускаючи SQL Server. Немає від'єднання / кріплення. Поки SQL Server вимкнено, і ви копіюєте (а не MOVING) файли, ви не можете потрапити в занадто багато проблем, навіть якщо ви переміщуєте системні бази даних. Оскільки шляхи однакові, SQL Server не зрозуміє, що нічого не змінилося під час вимкнення послуги. Просто переконайтеся, що літери диска вказуються на правильні обсяги, інакше для вас все буде погано.
Моєю найчастішою проблемою було неправильне отримання ACL-файлів у файлових каталогах. Більш сучасні версії SQL Server краще налаштовувати лише дозволи, необхідні обліковому запису служби, тоді як старіші версії здаються менш суєтними. Якщо ви забудете встановити ACL, і обліковий запис служби не є локальним адміністратором (не те, що я б рекомендував), одна або кілька баз даних можуть не відкриватися при запуску примірника. Не панікуйте, просто змініть ACL-файли та приєднайте базу даних.
Я, як правило, використовую РОБОКОПІЮ для такої роботи. Існує комутатор командного рядка для збереження ACL.
Використання обчислення / перевірки CRC не є поганою ідеєю, але я ніколи цього не робив. Коли бази даних відновляться, я запускаю CHECKDB () на всіх них. Зазвичай я готую сценарій для цього достроково, а не покладаюся на ручне відведення роботи з обслуговування. Таким чином, я можу перевірити пару менших баз даних, перш ніж перевірити велику базу даних, яка може зайняти багато хвилин або годин. Я сумніваюся, що перевірка CRC (або інструмент порівняння даних Redgate) знайде щось, чого CHECKDB () пропустить, і якщо це зробить SQL Server, він не зміг би це виправити.
Після того як я скопіюю файли, але перед тим, як перезапустити екземпляр, я перейду і трохи зміню файловий шлях СТАРИХ папок, перейменувавши одну з папок. Це додаткова перевірка проти "oops, сервер все ще вказує на проблему старих файлів".
Не поспішайте кидати старі файли та відновлювати місця на старому сховищі та переконайтесь, що переконаєтесь, що ваші повні резервні копії пройшли успішно. Тест відновить пару таких резервних копій десь в іншому місці. Після того, як у вас є хороші запуски checkdb () та хороші повні резервні копії, ви можете подумати про те, щоб скинути це старе сховище та вимкнути ліву руку.
Найгірші проблеми у мене з цими міграціями сталися після того, як я подумав, що закінчу. Це був би адміністратор SAN, який сказав мені, що щось сталося, і мої файлові системи були зашифровані. (Переділили, переформатували, скопіювали знову.)
Іншою цікавою проблемою є те, що SAN є повільним без видимих причин. Якщо ви думаєте, що копіювання даних пройде 10 годин, і ви копіюєте 30% у годину № 9, у вас є проблема. Слідкуйте за часом передачі (роботокопія показує% скопійованого та дає часові оцінки, або ви можете використовувати Perfmon) та складіть план резервного копіювання, якщо щось піде на погіршення.
Крім того, я не впевнений, чи будуть розподілені ваші обсяги для вас, але ви можете бути впевнені, що вони використовують зсув 1 Мб. У Windows Server 2008 і вище, це не повинно бути проблемою. У старих ОС це так. Тут є багато тонн googlable, і ваші хлопці із сховища повинні знати про це, але я б запитав.