Background
En gang, for at kunne genskabe en fejl, havde jeg brug for et backup af produktionsdatabasen.
Til min overraskelse stødte jeg på følgende begrænsninger:
- Backup af databasen blev lavet på versionen SQL Server 2016 og var ikke kompatibel med min SQL Server 2014.
- På min arbejdscomputer blev der anvendt Windows 7, så jeg kunne ikke opgradere SQL Server til version 2016
- Det understøttede produkt var en del af et større system med en stærkt sammenknyttet legacy-arkitektur og havde også forbindelse til andre produkter og databaser, så implementering på en anden station kunne tage meget lang tid.
Givet ovenstående konkluderede jeg, at det var tid til workaround-løsninger.
Gendannelse af data fra backup
Jeg besluttede at bruge en virtuel maskine med Windows 10 (man kan tage et testbillede til Edge-browseren ). På den virtuelle maskine blev SQL Server 2016 installeret, og databasen blev genskabt fra backupen ().
Indstilling af adgang til SQL Server på den virtuelle maskine
Dernæst var det nødvendigt at tage nogle skridt for at få adgang til SQL Server udefra:
- For firewall'en tilføje en regel for at tillade forespørgsler på porten 1433.
- Det ville være bedst, hvis adgangen til serveren ikke gik via Windows-godkendelse, men via SQL med brugernavn og adgangskode (nemmere at konfigurere adgangen). Husk dog i dette tilfælde at aktivere SQL-godkendelse i egenskaberne for SQL Server.
- I brugerkonfigurationen på SQL Server under fanen User Mapping angive rollen for den genskabte database som db_securityadmin.
Dataoverførsel
Selve dataoverførslen består af to trin:
- Overførsel af dataskema (tabeller, visninger, gemte procedurer osv.)
- Overførsel af selve dataene
Overførsel af dataskema
Udfør følgende operationer:
- Vi vælger Tasks -> Generate Scripts for den transfererede database.
- Vælg de ønskede objekter til overførsel eller lad standardværdierne stå (i så fald vil der blive oprettet scripts for alle database-objekter).
- Angiv indstillinger for gemning af scriptet. Det er nemmest at gemme scriptet i en enkelt fil i Unicode-kodning. Så ved fejl behøver man ikke gentage alle trin.
Efter gemning af scriptet kan det udføres på den oprindelige SQL Server (den gamle version) for at oprette den nødvendige database.
Opmærksomhed: Efter at have kørt scriptet skal du kontrollere, at indstillingerne for databasen stemmer overens med dem fra backupen og den database, der blev oprettet af scriptet. I mit tilfælde manglede scriptet indstillingen for COLLATE, hvilket førte til fejl under overførslen af data og besvær med at genskabe databasen ved hjælp af det opdaterede script.
Dataoverførsel
Før overførsel af data skal du deaktivere kontrol af alle begrænsninger i databasen:
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'Dataoverførsel udføres ved hjælp af importdata-masteren Tasks -> Import Data på SQL Server, hvor den database, der blev oprettet med scriptet, findes:
- Angiv indstillingerne for forbindelse til kilden (SQL Server 2016 på en virtuel maskine). Jeg brugte Data Source SQL Server Native Client og den nævnte SQL-godkendelse.
- Angiv indstillingerne for forbindelse til destinationsstedet (SQL Server 2014 på værtsmaskinen).
- Derefter konfigureres mappingen. Du skal vælge alle ikke read-only objekter (for eksempel er det ikke nødvendigt at vælge visninger). Som yderligere muligheder skal du vælge «Tillad indsættelse i identitetskolonner», hvis de bruges.
Opmærksomhed: hvis der opstår problemer med at vælge flere tabeller og give dem egenskaber, «Tillad indsættelse i identitetskolonner» hvis egenskaben tidligere er blevet indstillet for mindst én af de valgte tabeller, vil dialogboksen angive, at egenskaben allerede er indstillet for alle valgte tabeller. Denne kendsgerning kan forvirre og føre til fejl under overførslen. - Vi starter overførslen.
- Genopretter kontrol af begrænsninger:
EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
Hvis der opstår fejl, skal vi kontrollere indstillingerne, slette den oprettede database med fejl, genskabe den fra scriptet, lave rettelser og gentage dataoverførslen.
Konklusion
Denne opgave opstår sjældent og opstår kun på grund af de ovennævnte begrænsninger. Ofte er løsningen at opdatere SQL Server eller oprette forbindelse til en ekstern server, hvis applikationens arkitektur tillader det. Ingen kan dog være beskyttet mod legacy-kode og dårlig udvikling. Jeg håber, at du ikke får brug for denne vejledning, men hvis du gør, vil den hjælpe dig med at spare tid og nervepriser. Tak for opmærksomheden!
Liste over anvendte kilder
Kilde: habr.com
