MS SQL серверинин жаңы версиясынан эски версияга камдык көчүрмөлөрдү өткөрүү

prehistory

Бир жолу, катаны кайра чыгаруу үчүн, мага өндүрүш базасынын камдык көчүрмөсү керек болду.

Таң калыштуусу, мен төмөнкү чектөөлөргө туш болдум:

  1. Берилиштер базасынын камдык көчүрмөсү версияда жасалган SQL Server 2016 жана меники менен дал келген жок SQL Server 2014.
  2. Менин иштеген компьютеримде ОС болчу Windows 7ошондуктан мен жаңылай алган жокмун SQL Server версия 2016 чейин
  3. Колдоого алынган продукт тыгыз бириктирилген эски архитектурасы менен чоңураак системанын бир бөлүгү болгон жана башка өнүмдөр менен базаларга да жеткиликтүү болгон, андыктан башка станцияга жайгаштыруу үчүн өтө көп убакыт талап кылынышы мүмкүн.

Жогоруда айтылгандарды эске алып, мен стандарттуу эмес чечимдердин балдактай турган кези келди деген тыянакка келдим.

Камдык көчүрмөдөн маалыматтарды калыбына келтирүү

Мен виртуалдык машинаны колдонууну чечтим Oracle VM VirtualBox Windows 10 менен (сиз Edge браузери үчүн сыноо сүрөтүн тарта аласыз бул жерде). SQL Server 2016 виртуалдык машинага орнотулуп, тиркемелердин маалымат базасы камдык көчүрмөдөн калыбына келтирилди (нускама).

Виртуалдык машинада SQL серверине кирүү мүмкүнчүлүгүн орнотуу

Андан кийин, SQL серверине сырттан кирүүгө мүмкүндүк берүү үчүн бир нече кадамдарды жасоо керек болчу:

  1. Брандмауэр үчүн порт сурамдарын өткөрүүгө уруксат берүү үчүн эреже кошуңуз 1433.
  2. Серверге кирүү Windows аутентификациясы аркылуу эмес, логин жана сырсөз аркылуу SQL аркылуу ишке ашуусу сунушталат (кирүү мүмкүнчүлүгүн конфигурациялоо оңой). Бирок, бул учурда, SQL Server касиеттеринде SQL аутентификациясын иштетүүнү унутпашыңыз керек.
  3. Өтмөктөгү SQL сервериндеги колдонуучунун жөндөөлөрүндө Колдонуучунун картасы калыбына келтирилген маалымат базасы үчүн колдонуучунун ролун көрсөтүү db_securityadmin.

Маалыматтарды өткөрүү

Чынында, маалыматтарды берүү өзү эки этаптан турат:

  1. Маалымат схемасын өткөрүү (таблицалар, көрүнүштөр, сакталган процедуралар ж.б.)
  2. Маалыматты өзү өткөрүп берүү

Маалымат схемасын өткөрүү

Биз төмөнкү операцияларды аткарабыз:

  1. тандоо Тапшырмалар -> Скрипттерди жаратыңыз көчмө база үчүн.
  2. Өткөрүшүңүз керек болгон объекттерди тандаңыз же демейки маанини калтырыңыз (бул учурда бардык маалымат базасы объектилери үчүн сценарийлер түзүлөт).
  3. Скриптти сактоо үчүн орнотууларды белгилеңиз. Эң ыңгайлуу жолу - скриптти Юникод коддоосунда бир файлда сактоо. Андан кийин, эгер ката болсо, бардык кадамдарды кайра кайталоонун кереги жок.

Скрипт сакталгандан кийин, талап кылынган маалымат базасын түзүү үчүн булак SQL серверинде (эски версия) аткарылышы мүмкүн.

Эскертүү: Скриптти аткаргандан кийин, сиз резервдик көчүрмөдөн жана скрипт тарабынан түзүлгөн маалымат базасынан маалымат базасынын орнотууларынын ырааттуулугун текшеришиңиз керек. Менин учурда, скриптте COLLATE параметри болгон эмес, бул маалыматтарды өткөрүп берүү жана кеңейтилген скрипттин жардамы менен маалымат базасын кайра түзүү үчүн дап менен бийлөө ийгиликсиздикке алып келди.

Маалыматтарды өткөрүү

Берилиштерди өткөрүп берүүдөн мурун, маалымат базасындагы бардык чектөөлөрдү текшерүүнү өчүрүү керек:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Маалыматтарды өткөрүп берүү Маалыматтарды импорттоо чебери аркылуу ишке ашырылат Тапшырмалар -> Импорттук маалыматтар скрипт тарабынан түзүлгөн маалымат базасы жайгашкан SQL серверинде:

  1. Булакка туташуу орнотууларын көрсөтүңүз (виртуалдык машинадагы SQL Server 2016). Мен Data Source колдондум SQL Server Native Client жана жогоруда айтылган SQL аутентификациясы.
  2. Биз көздөгөн жерге туташуу орнотууларын аныктайбыз (хост машинада SQL Server 2014).
  3. Андан кийин биз картаны орнотобуз. Баарын тандоо керек окуу үчүн гана эмес объекттерди (мисалы, көрүнүштөрдү тандоонун кереги жок). Кошумча опцияларды тандоо керек "Идентификация мамычаларына киргизүүгө уруксат берүү", эгерде андайлар колдонулса.
    Эскертүү: бир нече таблицаларды тандап, аларга мүлктү дайындоого аракет кылсаңыз "Идентификация мамычаларына киргизүүгө уруксат берүү" мулк тандалган таблицалардын жок дегенде бирине мурунтан эле коюлган болсо, диалог терезеде мулк бардык тандалган таблицалар үчүн коюлганын көрсөтөт. Бул факт чаташып, өткөрүп берүү каталарына алып келиши мүмкүн.
  4. Келгиле, которууну баштайлы.
  5. Чектөө текшерүүсүн калыбына келтирүү:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Эгерде кандайдыр бир каталар болсо, биз орнотууларды текшеребиз, каталар менен түзүлгөн маалымат базасын жок кылабыз, аны скрипттен кайра түзөбүз, оңдоолорду киргизебиз жана маалыматтарды өткөрүп берүүнү кайталайбыз.

жыйынтыктоо

Бул милдет өтө сейрек кездешет жана жогорудагы чектөөлөрдөн улам гана пайда болот. Эң кеңири таралган чечим - SQL Server жаңыртуу же колдонмонун архитектурасы уруксат берсе, алыскы серверге туташуу. Бирок, эски коддон жана сапатсыз өнүгүүнүн кыйшык колдорунан эч ким коопсуз эмес. Бул көрсөтмөлөр сизге кереги жок деп үмүттөнөм, эгер сизге керек болсо, алар сизге көп убакытты жана нервдерди үнөмдөөгө жардам берет. Конул бурганын учун рахмат!

Колдонулган булактардын тизмеси

Source: www.habr.com