Attila's profileTuróczy Attila (MCP, MCT...PhotosBlogLists Tools Help

Blog


    July 24

    SQL Server 2005 – Mentési eljárások

    Az SQL Serverben több különböző igényeket kielégítő mentési módszer létezik. Fontos, hogy mindig a számunkra legoptimálisabb mentési eljárást válasszuk, hisz adatinknak baj vagy hiba esetén a gyors és konzisztens visszanyerése kulcsfontosságú. Ebben a cikkben a leggyakrabban használt mentési eljárásokkal ismerkedünk meg.image

    Például:

    • Teljes mentés
    • Különbségi mentés
    • Tranzakció log mentés
    • File csoport mentés
    • Tükrözött mentés
    • Rögzített mentés

    A Teljes Mentés

    Ebben az esetben minden adat mentésre kerül, ami az adott adatbázisban található. Ez a mentési eljárás visszaállítási modell független. Valamint ebben az esetben a lehető leggyorsabban történik a mentés, minimális erőforrás használat mellett.

    A teljes mentés egyik legfontosabb jellemzője az, hogy a backup engine lapokat ír backup device-re, a sorrend figyelembe vétele nélkül. Valamint a sorrendi függetlenség miatt ezt a műveletet több szál közt osztja szét és így a gyorsaság csak az eszköz sebességétől függ. Ez a mentési eljárás használható az adatbázis újralétrehozására is.

    A teljes mentésnél logikai inkonzisztencia léphet fel, a felhasználók bejelentkezett állapota és aktivitása miatt. Az SQL Server a következőképpen küszöbölheti ki ezt a problémát.

    • Lockolja azt adatbázist és blockolja az összes tranzakciót
    • Tesz egy jelölést a tranzakció logba
    • Felengedi az adatbázis lockolást
    • Menti az összes lapot
    • Lockolja azt adatbázist és blockolja az összes tranzakciót
    • Tesz egy jelölést a tranzakció logba 
    • Felengedi az adatbázis lockolást
    • A két log jelölés közötti tranzakciókat hozzáfűzi a backup-hoz

    Parancs:

    BACKUP DATABASE <database_name> TO DISK=‘<directory>\<filename>’ WITH INIT

    TO résznél a backup device-t lehet megadni (DISK,TAPE: explicit útvonalat lehet kijelölni)
    WITH résznél több mint egy tucat paramétere lehet (MSDN-ben van leírás ezekről a paramtérekről)
    Az INIT meg azt jelöli itt, hogy mindent írjon felül a backup eszközön


    Különbségi mentésimage

    Ebben az esetben az utolsó teljes mentés óta változott extenteket menti. (Például: A telje mentés éjfélkor történt, és 4 óránként van különbségi mentés. Így ez a mentés az éjfél óta eltelt változásokat menti) A mentés előnyei közé tartozik az, hogy a tranzakciós log mentéseinek számát csökkenti, csak teljes mentés után használható, valamint ez a mentési mód is visszaállítási modell független. Ez a mentési modell nem inkrementális backup ugyanis az inkrementális backup.

    Az Extent map egy másik adatlap az adatbázisban. Minden bit az oldalon egy extent-et reprezentál, tehát amikor az extent változik, az extent bitje 0-ról 1-re változik. Teljes mentésnél minden bit 0-ra állítódik. Mivel az adatbázisok mérete korlátlan és az adatlapok mérete 8KB lehet, 8192 extentenként jön létre mapping oldal.

    Parancs:

    BACKUP DATABASE <database_name> TO DISK=‘<directory>\<filename>’ WITH DIFFERENTIAL


    Tranzakció log mentése

    Ez a mentési model az adatok egy részhalmazát tartalmazza és szükséges egy teljes mentés a visszaállításhoz. Tulajdonképpen az aktív logot menti, az előző log backup utáni Log Sequence Number-ével (LSN) kezdi. Mindaddig menti a tranzakciókat, amíg egy nyitott tranzakciót el nem ér. Ezt a mentési model teljes vagy bulk-logged recovery modell esetén használható.

    Parancs:

    BACKUP LOG <database_name> TO DISK=‘<directory>\<filename>’ WITH INIT


    Filecsoport

    Alternatív mentési stratégia a teljes mentéshez. Ugyanis az adatbázis mentése helyett az egyes filecsoportokat menti az adatbázisból. Kiindulásként szükséges egy mentés az össze filecsoportról. Viszont itt csak Teljes vagy Bulk-logged recovery modell szükséges, az adatok helyreállításához.

    Parancs

    BACKUP DATABASE <database_name> FILEGROUP = ‘<filegroup_name>’ TO DISK=‘<directory>\<filename>’

    BACKUP DATABASE <database_name> FILEGROUP = ‘<filegroup_name>’ TO DISK=‘<directory>\<filename>’ WITH DIFFERENTIAL

    Tükrözött mentés

    Ennél a mentési eljárásnál minden backup létrehoz egy egyszeri másolatot az adatokról egy eszközön. Az adminisztrátor duplikálhatja ezt az esetleges eszközhibák miatt. (A duplikáció költséges és időigényes folyamat)image

    BACKUP parancs opcionális része:

    [[MIRROR TO <backup_device> [,…n]][…next-mirror]]

    Összesen 4 másolat létrehozása lehetséges, ebből 3 a MIRROR TO részben definiált

    A tükrözött mentés korlátozásai egyik fontos korlátozása az, hogy az eszköznek az összes másolathoz ugyanolyan típusúnak kell lenni valamint mindegyiknek hasonló tulajdonságokkal kell rendelkeznie. Például: ha a backup disk-re történik, a másolatok is disk-re kell kerüljenek

    Részleges mentés

    Ennél a mentési eljárásnál lehetőség van írható és csak olvasható filecsoportok kezelésére. Az előző verziókban a backup a csak olvasható filecsoportokra terjedt ki, ami ugyebár nem változhatott.

    Új paraméter: READ_WRITE_FILEGROUPS

    Ebben az esetben a backup figyelmen kívül hagyja a csak olvasható filecsoportokat. Így időt és helyet takaríthatunk meg vele.

    Példa:

    BACKUP DATABASE PUBS READ_WRITE_FILEGROUPS TO DISK=‘C:\DEMO\BACKUP\PUBS1.BAK’

    July 18

    SQL Server 2005 – Particionálás

    A particionálás lényege az, hogy a tábla index adatit szétosszuk több FileGropuba. Így a nagyméretű táblákat hatékonyabban tudjuk kezelni, valamint hatékonyabb és gyorsabb az adathozzáférés is. És arról nem is beszélve, hogy részeket önállóan tudjuk menteni és karbantartani. Tehát egészébe nézve a particionálás segítségével a terhelés kiegyensúlyozható. image

    De nem csak előnyei vannak a partcionálásnak. Sajnos az adminisztráció és a probléma tér is megnő a partíciók használatával. (Egységként kezelés).

    Nézzük meg, hogy milyen lépések is szükségesek ahhoz, hogy az SQL Serverben egy partíciót létrehozzunk.

    • Particionálló függvény létrehozása
    • Partíció séma létrehozása (Partíció függvényen alapszik)
    • Tábla, index kötése a particionálási sémához.
    • Információs adatok lekérdezése

    A Paricionáló függvény célja az, hogy a rekord tartalma alapján a rekordnak a helyét kijelöljük.
    Főbb tulajdonságai:

    • Csak tartomány alapú lehet (Nincs Hash)
    • Egy kulcsintervallumhoz egy célhely tartozik

    CREATE PARTITION FUNCTION

    fnev (kulcs_tipus) AS

    RANGE LEFT | RIGHT

    FOR VALUES (v1,v2,…)

    A Particionálási séma szerepe az, hogy megadja a tartományok tárolási helyét valamint az értéktartományok helyét hozzáadja a FileGrouphoz.

    CREATE PARTITION SCHEMA

    pnev AS PARTITION pfnev

    TO ([filegroup1] [filegroup2],…)

    Tábla particionálás

    Létrehozáskori kötés

    • Partíció séma megadása
    • Aktuális kulcsmező kijelölése

    CREATE TABLE db.sema.tabla

    (mezolista)

    ON particio_séma (aktuális_kulcs)

    Index particionálása

    Egy Cluster Index létrehozásával utólag is particionálható a tábla.

    CREATE INDEX db.sema.index

    ON (mezolista)

    ON particio_séma (aktuális_kulcs)

    Partíciók adatai

    Partíció függvények:

    SELECT … FROM SYS.PARTITION_RANGE_VALUES

    Partíció séma:

    SYS.PARTITION_SCHEMES

    Particiók:

    SYS.PARTITIONS

    Particiós függvény

    Függvény meghívása

    SELECT … $PARTITION.par_fuggv(pp)

    Függvény módosítása

    Intervallum szétvágása

    ALTER PARTITION FUNCTION fnev

    SPLIT (hatar)

    Intervallum összevonása

    ALTER PARTITION FUNCTION fnev

    MERGE (hatar)