MS SQL Server-ийн шинэ хувилбараас хуучин хувилбар руу нөөцлөлтийн өгөгдлийг шилжүүлж байна

Эрьт урьдын түүх

Нэг удаа алдааг хуулбарлахын тулд үйлдвэрлэлийн мэдээллийн санг нөөцлөх шаардлагатай болсон.

Би гайхсандаа дараах хязгаарлалттай тулгарсан.

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

Дээр дурдсан зүйлсээс харахад стандарт бус шийдлүүдийн таягтай байх цаг нь болсон гэсэн дүгнэлтэд хүрсэн.

Нөөцөөс өгөгдлийг сэргээж байна

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

Виртуал машин дээр SQL серверт хандах хандалтыг тохируулж байна

Дараа нь SQL серверт гаднаас хандахын тулд хэд хэдэн алхам хийх шаардлагатай байв.

  1. Галт ханын хувьд портын хүсэлтийг алгасах дүрэм нэмнэ үү 1433.
  2. Сервер рүү нэвтрэх нь Windows нэвтрэлт танилтаар дамждаггүй, харин нэвтрэх болон нууц үг ашиглан SQL-ээр дамжуулан нэвтрэхийг зөвлөж байна (хандалтыг тохируулах нь илүү хялбар байдаг). Гэхдээ энэ тохиолдолд та SQL Server шинж чанарт SQL Authentication-г идэвхжүүлэхээ санах хэрэгтэй.
  3. Таб дээрх SQL сервер дээрх хэрэглэгчийн тохиргоонд Хэрэглэгчийн зураглал сэргээгдсэн мэдээллийн сангийн хэрэглэгчийн үүргийг зааж өгнө db_securityadmin.

Өгөгдөл дамжуулах

Үнэндээ өгөгдөл дамжуулах нь өөрөө хоёр үе шатаас бүрдэнэ.

  1. Өгөгдлийн схем дамжуулах (хүснэгт, харагдац, хадгалагдсан процедур гэх мэт)
  2. Өгөгдлийг өөрөө дамжуулах

Өгөгдлийн схем дамжуулах

Бид дараах үйлдлүүдийг гүйцэтгэдэг.

  1. Бид сонгоно уу Даалгавар -> Скрипт үүсгэх зөөврийн суурийн хувьд.
  2. Шилжүүлэх шаардлагатай объектуудаа сонгох эсвэл анхдагч утгыг үлдээх (энэ тохиолдолд бүх мэдээллийн сангийн объектод скрипт үүсгэх болно).
  3. Скриптийг хадгалах тохиргоог зааж өгнө үү. Скриптийг нэг Юникод файлд хадгалах нь хамгийн тохиромжтой. Дараа нь бүтэлгүйтсэн тохиолдолд бүх алхмуудыг дахин давтах шаардлагагүй болно.

Скриптийг хадгалсны дараа түүнийг анхны SQL Server (хуучин хувилбар) дээр ажиллуулж шаардлагатай суурийг бий болгож болно.

Анхааруулга: Скриптийг ажиллуулсны дараа та нөөцөөс авсан мэдээллийн сангийн тохиргоо болон скриптээр үүсгэсэн мэдээллийн баазын хоорондын захидал харилцааг шалгах хэрэгтэй. Миний хувьд скриптэд COLLATE-ийн тохиргоо байхгүй байсан бөгөөд энэ нь өгөгдөл дамжуулах, нэмэлт скриптийг ашиглан мэдээллийн санг дахин үүсгэхийн тулд хэнгэрэгтэй бүжиглэх явцад алдаа гарсан.

Өгөгдөл дамжуулах

Өгөгдөл дамжуулахын өмнө та мэдээллийн сан дээрх бүх хязгаарлалтыг шалгахыг идэвхгүй болгох хэрэгтэй.

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Өгөгдөл дамжуулалтыг өгөгдөл импортлох шидтэн ашиглан гүйцэтгэдэг Даалгавар -> Мэдээлэл импортлох скриптээр үүсгэсэн мэдээллийн сан байрладаг SQL сервер дээр:

  1. Эх сурвалжийн холболтын тохиргоог зааж өгнө үү (виртуал машин дээрх SQL Server 2016). Би мэдээллийн эх сурвалжийг ашигласан SQL серверийн уугуул үйлчлүүлэгч болон дээр дурдсан SQL баталгаажуулалт.
  2. Очих газрын холболтын тохиргоог зааж өгнө үү (хост машин дээрх SQL Server 2014).
  3. Дараа нь зураглалыг тохируулна уу. Бүгдийг нь сонгох ёстой зөвхөн уншихад зориулагдсан биш объектууд (жишээлбэл, үзэл бодлыг сонгох шаардлагагүй). Нэмэлт сонголтуудын хувьд сонгоно уу "Таниулахын баганад оруулахыг зөвшөөрөх"хэрэв ийм хэрэглэгдэж байгаа бол.
    Анхааруулга: хэрэв, хэд хэдэн хүснэгтийг сонгож, тэдгээрийн өмчийг тохируулахыг оролдох үед "Таниулахын баганад оруулахыг зөвшөөрөх" Сонгосон хүснэгтүүдийн дор хаяж нэг нь өмчийг аль хэдийн тохируулсан бол харилцах цонх нь сонгосон бүх хүснэгтэд өмчийг аль хэдийн тохируулсан болохыг харуулах болно. Энэ баримт нь төөрөгдүүлж, шилжилт хөдөлгөөний алдаа гаргахад хүргэдэг.
  4. Бид шилжүүлгийг эхлүүлнэ.
  5. Хязгаарлалтын шалгалтыг сэргээж байна:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Хэрэв ямар нэгэн алдаа гарвал бид тохиргоог шалгаж, алдаатай үүсгэсэн мэдээллийн санг устгаж, скриптээс дахин үүсгэж, залруулга хийж, өгөгдөл дамжуулалтыг давтан хийнэ.

дүгнэлт

Энэ даалгавар нь нэлээд ховор бөгөөд зөвхөн дээрх хязгаарлалтын улмаас л тохиолддог. Хамгийн түгээмэл шийдэл бол SQL серверийг шинэчлэх эсвэл програмын архитектур зөвшөөрвөл алсын серверт холбогдох явдал юм. Гэсэн хэдий ч хуучин код, муу чанарын хөгжлийн муруй гараас хэн ч дархлаагүй. Энэ заавар танд хэрэггүй байх гэж найдаж байна, гэхдээ танд хэрэгтэй хэвээр байгаа бол энэ нь маш их цаг хугацаа, мэдрэлийг хэмнэхэд тусална. Анхаарал тавьсанд баярлалаа!

Ашигласан эх сурвалжуудын жагсаалт

Эх сурвалж: www.habr.com