Overførsel af backupdata fra en ny version af MS SQL Server til en ældre version

forhistorie

En gang, for at genskabe en fejl, havde jeg brug for en sikkerhedskopi af produktionsdatabasen.

Til min overraskelse stødte jeg på følgende begrænsninger:

  1. Databasesikkerhedskopieringen blev lavet på versionen SQL Server 2016 og var ikke kompatibel med min SQL Server 2014.
  2. På min arbejdscomputer var OS Windows 7så jeg kunne ikke opdatere SQL Server op til version 2016
  3. Det understøttede produkt var en del af et større system med en tæt koblet ældre arkitektur og fik også adgang til andre produkter og baser, så det kunne tage meget lang tid at implementere til en anden station.

I betragtning af ovenstående kom jeg til den konklusion, at tiden er inde til krykken på ikke-standardløsninger.

Gendannelse af data fra backup

Jeg besluttede at bruge en virtuel maskine Oracle VM VirtualBox med Windows 10 (du kan tage et testbillede til Edge-browseren dermed). SQL Server 2016 blev installeret på den virtuelle maskine, og applikationsdatabasen blev gendannet fra en sikkerhedskopi (instruktion).

Opsætning af adgang til SQL Server på en virtuel maskine

Dernæst var det nødvendigt at tage nogle skridt for at gøre det muligt at få adgang til SQL Server udefra:

  1. Til firewallen skal du tilføje en regel for at tillade portanmodninger at passere 1433.
  2. Det er tilrådeligt, at adgangen til serveren ikke sker gennem Windows-godkendelse, men gennem SQL ved hjælp af et login og en adgangskode (det er nemmere at konfigurere adgang). I dette tilfælde skal du dog huske at aktivere SQL-godkendelse i SQL Server-egenskaberne.
  3. I brugerindstillingerne på SQL Server på fanen Brugerkortlægning angiv brugerrollen for den gendannede database db_securityadmin.

Dataoverførsel

Faktisk består selve dataoverførslen af ​​to faser:

  1. Overførsel af dataskema (tabeller, visninger, lagrede procedurer osv.)
  2. Overførsel af selve data

Overførsel af dataskema

Vi udfører følgende operationer:

  1. Vælg Opgaver -> Generer scripts til en bærbar base.
  2. Vælg de objekter, du skal overføre, eller forlad standardværdien (i dette tilfælde oprettes scripts for alle databaseobjekter).
  3. Angiv indstillinger for lagring af scriptet. Den mest bekvemme måde er at gemme scriptet i en enkelt fil i Unicode-kodning. Så, hvis der er en fejl, behøver du ikke at gentage alle trinene igen.

Når scriptet er gemt, kan det udføres på SQL-kildeserveren (gamle version) for at oprette den nødvendige database.

Advarsel: Efter at have udført scriptet, skal du kontrollere sammenhængen af ​​databaseindstillingerne fra sikkerhedskopien og databasen oprettet af scriptet. I mit tilfælde havde scriptet ikke en indstilling for COLLATE, hvilket førte til en fejl ved overførsel af data og dans med en tamburin for at genskabe databasen ved hjælp af det udvidede script.

Dataoverførsel

Før du overfører data, skal du deaktivere kontrol af alle begrænsninger på databasen:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Dataoverførsel udføres ved hjælp af Data Import Wizard Opgaver -> Importer data på SQL Server, hvor databasen oprettet af scriptet er placeret:

  1. Angiv forbindelsesindstillingerne til kilden (SQL Server 2016 på en virtuel maskine). Jeg brugte Data Source SQL Server Native Client og den førnævnte SQL-godkendelse.
  2. Vi angiver forbindelsesindstillingerne til destinationen (SQL Server 2014 på værtsmaskinen).
  3. Dernæst sætter vi kortlægningen op. Du skal vælge alle ikke skrivebeskyttet objekter (f.eks. skal visninger ikke vælges). Yderligere muligheder skal vælges "Tillad indsættelse i identitetskolonner", hvis sådanne bruges.
    Advarsel: hvis du prøver at vælge flere tabeller og tildele egenskaben til dem "Tillad indsættelse i identitetskolonner" egenskaben er allerede tidligere indstillet for mindst én af de valgte tabeller, vil dialogen indikere, at egenskaben allerede er sat for alle valgte tabeller. Dette faktum kan være forvirrende og føre til overførselsfejl.
  4. Lad os starte overførslen.
  5. Gendannelse af begrænsningskontrollen:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Hvis der opstår fejl, kontrollerer vi indstillingerne, sletter databasen, der er oprettet med fejl, genskaber den fra scriptet, foretager rettelser og gentager dataoverførslen.

Konklusion

Denne opgave er ret sjælden og opstår kun på grund af ovenstående begrænsninger. Den mest almindelige løsning er at opgradere SQL Server eller oprette forbindelse til en ekstern server, hvis applikationsarkitekturen tillader det. Der er dog ingen, der er sikret for den gamle kode og de skæve hænder på udvikling af dårlig kvalitet. Jeg håber, at du ikke får brug for disse instruktioner, og hvis du har brug for dem, vil de hjælpe dig med at spare en masse tid og nerver. Tak for din opmærksomhed!

Liste over anvendte kilder

Kilde: www.habr.com