Biztonsági mentési adatok átvitele az MS SQL Server új verziójáról egy régebbi verzióra

őstörténet

Egyszer egy hiba reprodukálásához biztonsági másolatot kellett készítenem az éles adatbázisról.

Meglepetésemre a következő korlátokba ütköztem:

  1. Az adatbázis biztonsági mentése a verzión készült SQL Server 2016 és nem volt kompatibilis az enyémmel SQL Server 2014.
  2. A munkahelyi számítógépemen a használt operációs rendszer volt A windows 7így nem tudtam frissíteni SQL Server 2016-os verzióig
  3. A támogatott termék egy nagyobb rendszer része volt, szorosan összekapcsolt örökölt architektúrával, és más termékekhez és bázisokhoz is szólt, így nagyon sokáig tarthat egy másik állomáson történő telepítése.

A fentiek alapján arra a következtetésre jutottam, hogy eljött az ideje a nem szabványos megoldások mankóinak.

Adatok visszaállítása biztonsági másolatból

A virtuális gépet választottam Oracle VM VirtualBox Windows 10 rendszerrel (tesztképet készíthet az Edge böngészőhöz ezért). Az SQL Server 2016 telepítve lett a virtuális gépre, és az alkalmazásadatbázis visszaállításra került a biztonsági másolatból (oktatás).

Az SQL Server hozzáférésének konfigurálása egy virtuális gépen

Ezután meg kellett tenni néhány lépést az SQL Server kívülről való eléréséhez:

  1. A tűzfalhoz adjon hozzá egy szabályt a portkérések kihagyására 1433.
  2. Kívánatos, hogy a szerverhez való hozzáférés ne windowsos hitelesítésen keresztül történjen, hanem SQL-en keresztül, bejelentkezési név és jelszó segítségével (egyszerűbb a hozzáférés beállítása). Ebben az esetben azonban ne felejtse el engedélyezni az SQL-hitelesítést az SQL Server tulajdonságaiban.
  3. Az SQL Server felhasználói beállításaiban a lapon Felhasználói leképezés adja meg a visszaállított adatbázis felhasználói szerepkörét db_securityadmin.

Adatátvitel

Valójában maga az adatátvitel két szakaszból áll:

  1. Adatséma átvitel (táblák, nézetek, tárolt eljárások stb.)
  2. Maga az adatok átvitele

Adatséma átvitel

A következő műveleteket végezzük:

  1. választ Feladatok -> Szkriptek generálása hordozható alaphoz.
  2. Válassza ki az átvinni kívánt objektumokat, vagy hagyja meg az alapértelmezett értéket (ebben az esetben minden adatbázis-objektumhoz szkriptek jönnek létre).
  3. Adja meg a szkript mentéséhez szükséges beállításokat. A legkényelmesebb a szkriptet egyetlen Unicode fájlba menteni. Ezután meghibásodás esetén nem kell megismételnie az összes lépést.

A szkript mentése után az eredeti SQL Serveren (régi verzió) futtatható a szükséges alap létrehozásához.

Megjegyzés: A szkript végrehajtása után ellenőrizni kell a biztonsági mentésből származó adatbázis és a szkript által létrehozott adatbázis beállításai közötti megfelelést. Az én esetemben a szkriptben nem volt beállítva a COLLATE, ami hibához vezetett az adatok átvitelekor és egy tamburával táncolva az adatbázist a kiegészített szkript segítségével.

Adatátvitel

Az adatok átvitele előtt le kell tiltania az adatbázis összes korlátozásának ellenőrzését:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Az adatátvitel az adatimportáló varázsló segítségével történik Feladatok -> Adatok importálása SQL Serveren, ahol a szkript által létrehozott adatbázis található:

  1. Adja meg a kapcsolat beállításait a forráshoz (SQL Server 2016 virtuális gépen). Adatforrást használtam SQL Server natív kliens és a fent említett SQL hitelesítés.
  2. Adja meg a csatlakozási beállításokat a célhoz (SQL Server 2014 a gazdagépen).
  3. Ezután állítsa be a leképezést. Mindegyiket ki kell választani nem csak olvasható objektumok (például a nézeteket nem kell kiválasztani). További lehetőségekként válassza a lehetőséget "Az identitásoszlopokba való beillesztés engedélyezése"ha ilyeneket használnak.
    Megjegyzés: ha, amikor több táblát próbál kijelölni és beállítani a tulajdonságukat "Az identitásoszlopokba való beillesztés engedélyezése" a tulajdonság már be van állítva legalább az egyik kiválasztott táblához, a párbeszédpanel jelzi, hogy a tulajdonság már be van állítva az összes kiválasztott táblához. Ez a tény zavaró lehet, és migrációs hibákhoz vezethet.
  4. Elkezdjük az átvitelt.
  5. A kényszerellenőrzés visszaállítása:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Hiba esetén ellenőrizzük a beállításokat, töröljük a hibásan létrehozott adatbázist, újra létrehozzuk a szkriptből, javítjuk és megismételjük az adatátvitelt.

Következtetés

Ez a feladat meglehetősen ritka, és csak a fenti korlátozások miatt fordul elő. A leggyakoribb megoldás az SQL Server frissítése vagy távoli kiszolgálóhoz való csatlakozás, ha az alkalmazás architektúrája ezt lehetővé teszi. Senki sem mentes azonban az örökölt kódtól és a rossz minőségű fejlesztések görbe kezétől. Remélem, hogy nem lesz szüksége erre az utasításra, de ha mégis szüksége van rá, akkor sok időt és ideget takarít meg. Köszönöm a figyelmet!

A felhasznált források listája

Forrás: will.com