Պահուստային տվյալների փոխանցում MS SQL Server-ի նոր տարբերակից ավելի հին տարբերակ

նախապատմությանը

Մի անգամ, սխալը վերարտադրելու համար, ինձ անհրաժեշտ էր արտադրության տվյալների բազայի կրկնօրինակում:

Ի զարմանս ինձ, ես հանդիպեցի հետևյալ սահմանափակումներին.

  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. Firewall-ի համար ավելացրեք կանոն, որը թույլ կտա փոխանցել նավահանգիստների հարցումները 1433.
  2. Ցանկալի է, որ սերվերի մուտքն անցնի ոչ թե Windows-ի վավերացման միջոցով, այլ SQL-ի միջոցով՝ մուտքի և գաղտնաբառի միջոցով (հեշտ է մուտքի կարգավորումը): Այնուամենայնիվ, այս դեպքում դուք պետք է հիշեք միացնել SQL վավերացումը SQL Server-ի հատկություններում:
  3. Օգտվողի կարգավորումներում SQL Server-ի ներդիրում Օգտագործողի քարտեզագրում նշեք օգտագործողի դերը վերականգնված տվյալների բազայի համար db_securityadmin.

Տվյալների փոխանցում

Փաստորեն, տվյալների փոխանցումն ինքնին բաղկացած է երկու փուլից.

  1. Տվյալների սխեմայի փոխանցում (աղյուսակներ, դիտումներ, պահված ընթացակարգեր և այլն)
  2. Տվյալների ինքնին փոխանցում

Տվյալների սխեմայի փոխանցում

Մենք կատարում ենք հետևյալ գործողությունները.

  1. ընտրել Առաջադրանքներ -> Ստեղծել սցենարներ շարժական բազայի համար.
  2. Ընտրեք այն օբյեկտները, որոնք դուք պետք է փոխանցեք կամ թողեք լռելյայն արժեքը (այս դեպքում տվյալների բազայի բոլոր օբյեկտների համար կստեղծվեն սցենարներ):
  3. Նշեք սկրիպտը պահելու կարգավորումները: Առավել հարմար է սկրիպտը մեկ Unicode ֆայլում պահելը: Հետո ձախողման դեպքում բոլոր քայլերը նորից կրկնելու կարիք չկա։

Հենց որ սկրիպտը պահպանվի, այն կարող է գործարկվել սկզբնական SQL Server-ի վրա (հին տարբերակ)՝ անհրաժեշտ բազան ստեղծելու համար:

Նշում: Սցենարը կատարելուց հետո անհրաժեշտ է ստուգել տվյալների բազայի կարգավորումների համապատասխանությունը կրկնօրինակից և սկրիպտի կողմից ստեղծված տվյալների բազայի միջև: Իմ դեպքում, սցենարում COLLATE-ի կարգավորում չկար, ինչը հանգեցրեց ձախողման տվյալների փոխանցման և դափի հետ պարելու ժամանակ՝ տվյալների բազան վերստեղծելու համար՝ օգտագործելով լրացված սցենարը:

Տվյալների փոխանցում

Տվյալներ փոխանցելուց առաջ դուք պետք է անջատեք տվյալների բազայի բոլոր սահմանափակումների ստուգումը.

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Տվյալների փոխանցումն իրականացվում է տվյալների ներմուծման մոգերի միջոցով Առաջադրանքներ -> Տվյալների ներմուծում SQL Server-ում, որտեղ գտնվում է սցենարի կողմից ստեղծված տվյալների բազան.

  1. Նշեք կապի կարգավորումները աղբյուրին (SQL Server 2016 վիրտուալ մեքենայի վրա): Ես օգտագործել եմ տվյալների աղբյուրը 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