ProHoster > Blog > Adminisztráció > Biztonsági mentési adatok átvitele az MS SQL Server új verziójáról egy régebbi verzióra
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:
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.
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
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:
A tűzfalhoz adjon hozzá egy szabályt a portkérések kihagyására 1433.
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.
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:
Adatséma átvitel (táblák, nézetek, tárolt eljárások stb.)
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).
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:
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ó:
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.
Adja meg a csatlakozási beállításokat a célhoz (SQL Server 2014 a gazdagépen).
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.
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!