Чи слід мігрувати дані за допомогою окремо відключити / скопіювати / вкласти або через резервну копію-відновлення-повтор?


17

Я збираюся розпочати міграцію файлів баз даних до нового SAN (зі старого SAN) abd. У мене є кілька варіантів для цього. (1) Було запропоновано розглянути рівень зусиль щодо відновлення повної резервної копії до нової бази даних на сервері. Однак (2) мій початковий план полягав у тому, щоб скопіювати файли зі старого SAN у новий SAN, від'єднавши та повторно встановивши базу даних.

Моя кишка говорить мені, що я краще від'єднати, скопіювати та приєднати, оскільки це здається більш безпечним, але це може бути просто моя наївність. Я не хочу пропускати транзакцію чи якимось чином «ламати щось» у процесі перейменування баз даних.

Я думаю, моє питання полягає в тому, чи я виправданий скептицизмом до варіанту BACKUP-RESTORE-Replay і які інші переваги чи ризики цього варіанту?

Відповіді:


16

Особисто я би уникав механізмів від'єднання / кріплення. Особливо в SQL Server 2000, я просто не вірю, що ви завжди будете повертати сервер і мати змогу вкладати ці файли. Я чув багато історій, де це не сталося чисто - лише тому, що у вас план B автоматично не робить план A розумним.

Під час резервного копіювання / відновлення ви не ризикуєте перейти до плану B. Якщо резервне копіювання не вдалося, ваша база даних все ще працює. Якщо відновлення не вдається, ваша стара база даних все ще працює. В обох випадках ви можете відновити роботу початкової бази даних і переглянути план згодом. На додаток до додаткової безпеки тут від зупинки SQL Server та / або від'єднання, це також означає, що ви можете перевірити випробування з методології резервного копіювання / відновлення (якщо припустити, що у вас є місце для виконання резервних копій та інший екземпляр для тестування відновлювати). Ви не можете реально перевірити підключення підключення, не вилучаючи бази даних або зупиняючи SQL Server, а це важко зробити поза вікном належного обслуговування. І нарешті, з іншими підходами ви навіть не можете почати копіювати файли, поки ви не від'єднали або не привели вниз SQL Server.

Ще одна перевага над методом "витягнути диск" з-під-SQL-сервера: за допомогою резервного копіювання / відновлення ви можете переміщувати різні файли на різні літери диска, ніж вони були раніше. Наприклад, коли ми перейшли до нового SAN, ми змогли отримати більше томів, тому ми могли перемістити tempdb до T: \ (що раніше не існувало), деякі дані та файли журналів до нових літер диска тощо. щоб краще використовувати всю нову ємність вводу / виводу, яку ми мали. Якщо просто вимкнути SQL Server, а потім замінити диски, вам потрібно мати однакові літери диска та однакову кількість томів.


7

Я використовував для переміщення баз даних майже постійно через конфігурацію 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, і ваші хлопці із сховища повинні знати про це, але я б запитав.


2

По-перше, я хотів би розглянути можливість просто використовувати функцію масиву зберігання для обробки даних, що рухаються. Якщо вони недоступні, оскільки постачальник не підтримує її, ви її не купували або адміністратор SAN не знає, як це зробити ...

Тоді я просто скористаюся наступними кроками.

  1. Представіть нове сховище на SQL Server.
  2. Зупинення служб SQL
  3. КОПУЙТЕ всі дані зі старого диска на новий диск (не забудьте включити дозволи, якщо використовується роботокопія)
  4. Видаліть літери диска зі старих дисків.
  5. Змініть літери диска на нових дисках, щоб відповідати старим літерам диска
  6. Запустіть служби SQL

Це воно.

Немає необхідності від'єднання / прикріплення, наскільки SQL Server знає, що нічого не змінилося. І якщо щось піде жахливо не так, у вас є стара копія баз даних, що сидить на старому LUN на старому масиві зберігання даних. Відмова назад - це лише питання зміни літер накопичувача.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.