ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ Π΄Π°Π½Π½Ρ‹Ρ… бэкапа Π½ΠΎΠ²ΠΎΠΉ вСрсии MS SQL Server Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ

ΠŸΡ€Π΅Π΄Ρ‹ΡΡ‚ΠΎΡ€ΠΈΡ

Как-Ρ‚ΠΎ Ρ€Π°Π· для воспроизвСдСния Π±Π°Π³Π° ΠΌΠ½Π΅ потрСбовался бэкап production-Π±Π°Π·Ρ‹.

К ΠΌΠΎΠ΅ΠΌΡƒ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΡŽ я столкнулся со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ограничСниями:

  1. Бэкап Π±Π°Π·Ρ‹ Π±Ρ‹Π» сдСлан Π½Π° вСрсии SQL Server 2016 ΠΈ Π½Π΅ Π±Ρ‹Π» совмСстим с ΠΌΠΎΠ΅ΠΉ SQL Server 2014.
  2. На ΠΌΠΎΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π² качСствС ОБ использовалась Windows 7, поэтому я Π½Π΅ ΠΌΠΎΠ³ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ SQL Server Π΄ΠΎ вСрсии 2016
  3. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π±Ρ‹Π» Ρ‡Π°ΡΡ‚ΡŒΡŽ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΉ систСмы с сильно связанной лСгаси-Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ обращался ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌ ΠΈ Π±Π°Π·Π°ΠΌ, поэтому Π΅Π³ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ станции ΠΌΠΎΠ³Π»ΠΎ Π·Π°Π½ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Учитывая Π²Ρ‹ΡˆΠ΅ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅, я ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ настало врСмя костылСй нСстандартных Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ.

ВосстановлСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· бэкапа

Π― Ρ€Π΅ΡˆΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Oracle VM VirtualBox с Windows 10 (ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ тСстовый ΠΎΠ±Ρ€Π°Π· для Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Edge ΠΎΡ‚ΡΡŽΠ΄Π°). На Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Π±Ρ‹Π» установлСн SQL Server 2016 ΠΈ Π½Π° Π½Π΅ΠΌ ΠΈΠ· бэкапа Π±Ρ‹Π»Π° восстановлСна Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… прилоТСния (инструкция).

Настройка доступа ΠΊ SQL Server Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС

Π”Π°Π»Π΅Π΅ Π±Ρ‹Π»ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ шаги, Ρ‡Ρ‚ΠΎΠ±Ρ‹ появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ доступа ΠΊ SQL Server ΠΈΠ·Π²Π½Π΅:

  1. Для Ρ„Π°Π΅Ρ€Π²ΠΎΠ»Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ запросы Π½Π° ΠΏΠΎΡ€Ρ‚ 1433.
  2. Π–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ доступ ΠΊ сСрвСру шСл Π½Π΅ Ρ‡Π΅Ρ€Π΅Π· windows-аутСнтификация, Π° Ρ‡Π΅Ρ€Π΅Π· SQL ΠΏΠΎ Π»ΠΎΠ³ΠΈΠ½Ρƒ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ (ΠΏΡ€ΠΎΡ‰Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ доступ). Однако Π² этом случаС Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² свойствах SQL Server Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ SQL-Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.
  3. Π’ настройках ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° SQL Server Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ User Mapping ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ для восстановлСнной Π±Π°Π·Ρ‹ Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ db_securityadmin.

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ Π΄Π°Π½Π½Ρ‹Ρ…

БобствСнно сам пСрСнос Π΄Π°Π½Π½Ρ‹Ρ… состоит ΠΈΠ· Π΄Π²ΡƒΡ… этапов:

  1. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ схСмы Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, прСдставлСния, Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ‚.Π΄.)
  2. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ самих Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ схСмы Π΄Π°Π½Π½Ρ‹Ρ…

ВыполняСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

  1. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Tasks -> Generate Scripts для пСрСносимой Π±Π°Π·Ρ‹.
  2. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹Π΅ для пСрСноса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ оставляСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π² этом случаС Π±ΡƒΠ΄ΡƒΡ‚ созданы скрипты для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Π°Π·Ρ‹).
  3. Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ настройки для сохранСния скрипта. Π£Π΄ΠΎΠ±Π½Π΅Π΅ всСго ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ скрипт Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Unicode. Π’ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ сбоС Π½Π΅ понадобится Π·Π°Π½ΠΎΠ²ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ всС шаги.

ПослС сохранСния скрипта Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π° исходном SQL Server (старой вСрсии), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ Π±Π°Π·Ρƒ.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: послС выполнСния скрипта Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ соотвСтствиС настроСк Π±Π°Π·Ρ‹ ΠΈΠ· бэкапа ΠΈ Π±Π°Π·Ρ‹, созданной скриптом. Π’ ΠΌΠΎΠ΅ΠΌ случаС Π² скриптС отсутствовала настройка для COLLATE, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ сбою ΠΏΡ€ΠΈ пСрСносС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚Π°Π½Ρ†Π°ΠΌ с Π±ΡƒΠ±Π½ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Π½ΠΈΡŽ Π±Π°Π·Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ скрипта.

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΠ΅Ρ€Π΅Π΄ пСрСносом Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ всСх ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Π±Π°Π·Π΅:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ Π΄Π°Π½Π½Ρ‹Ρ… осущСствляСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ мастСра ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… Tasks -> Import Data Π½Π° SQL Server, Π³Π΄Π΅ находится созданная скриптом Π±Π°Π·Π°:

  1. Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ настройки ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ источнику (SQL Server 2016 Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС). Π― использовал Data Source SQL Server Native Client ΠΈ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡƒΡŽ SQL-Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ.
  2. Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ настройки ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ мСсту назначСния (SQL Server 2014 Π½Π° хост-машинС).
  3. Π”Π°Π»Π΅Π΅ настраиваСм ΠΌΠ°ΠΏΠΏΠΈΠ½Π³. НСобходимо Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ всС Π½Π΅ read-only ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, прСдставлСния Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ). Π’ качСствС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ слСдуСт Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Β«Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ вставку Π² identity-столбцы», Ссли Ρ‚Π°ΠΊΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ.
    Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ссли ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ ΠΏΡ€ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠΌ свойство Β«Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ вставку Π² identity-столбцы» свойство ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ Ρ€Π°Π½Π΅Π΅ установлСно хотя Π±Ρ‹ для ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†, Π² Π΄ΠΈΠ°Π»ΠΎΠ³Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ свойство ΡƒΠΆΠ΅ установлСно для всСх Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†. Π”Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ±ΠΈΡ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ ΠΈ привСсти ΠΊ ошибкам пСрСноса.
  4. ЗапускаСм пСрСнос.
  5. ВосстанавливаСм ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Если Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ошибки, провСряСм настройки, удаляСм ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ с ошибками Π±Π°Π·Ρƒ, Π·Π°Π½ΠΎΠ²ΠΎ создаСм Π΅Π΅ ΠΈΠ· скрипта, вносим исправлСния ΠΈ повторяСм пСрСнос Π΄Π°Π½Π½Ρ‹Ρ….

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Данная Π·Π°Π΄Π°Ρ‡Π° встрСчаСтся довольно Ρ€Π΅Π΄ΠΊΠΎ ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·-Π·Π° Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Π§Π°Ρ‰Π΅ всСго Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ SQL Server ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ сСрвСру, Ссли это позволяСт Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° прилоТСния. Однако ΠΎΡ‚ лСгаси-ΠΊΠΎΠ΄Π° ΠΈ ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Ρ€ΡƒΠΊ нСкачСствСнной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ застрахован. НадСюсь, Ρ‡Ρ‚ΠΎ Π’Π°ΠΌ эта инструкция Π½Π΅ понадобится, Π° Ссли всС ΠΆΠ΅ Π² Π½Π΅ΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ ΠΊΡƒΡ‡Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π½Π΅Ρ€Π²ΠΎΠ². Бпасибо Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!

Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com