Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation
Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement.Téléchargez la présentation en cliquant sur ce lien.Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.
Függvények implementálása • Skalár függvények • Input paraméterek: 0 v. több • Visszatérési érték: egyszerű skaláris érték • Megszorítások: nem változtathatják meg az objektumok állapotát CREATE FUNCTION [ schema_name. ] function_name ([ { @parameter_name[ AS ][ type_schema_name. ] parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS return_data_type [ WITH <function_option> [ ,...n ] ] [ AS ] BEGIN function_body RETURN scalar_expression END [ ; ]
Függvények implementálása II. • Tábla értékű függvények • Hasonló a skaláris függvényekhez • Különbség: visszatérési értéke tábla • Használata: SELECT utasítás FROM részében CREATE FUNCTION [ schema_name. ] function_name ( [ { @parameter_name[ AS ] [ type_schema_name. ] parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS @return_variable TABLE < table_type_definition > [ WITH <function_option> [ ,...n ] ] [ AS ] BEGIN function_body RETURN END [ ; ]
Determinisztikus és nem determinisztikus függvények • Determinisztikus függvények • Ugyanazon bemenő paraméterekre mindig ugyanazt a visszatérési értéket szolgáltatja • Pl. sin(), cos(), … • Az eredmény indexelhető • Nem determinisztikus függvények • Hívásonként más visszatérési értéket szolgáltat • Pl. : GETDATE() • Hívhat nem determinisztikus függvényt vagy tárolt eljárást • Az eredmény nem indexelhető
Tárolt eljárások • Bármilyen SQL Server által futtatható parancsot tartalmazhat • Biztonsági funkció: • Futtatási jog a tárolt eljárásra • Az adatokra, amin dolgozik nem kell jogot adni • Elrejti az adatbázis szerkezeti megvalósítását a user elől
Tárolt eljárások II. CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ] [ { @parameter [ type_schema_name. ] data_type } [ OUT | OUTPUT ] ] [ ,...n ] [ WITH <procedure_option> [ ,...n ] ] [ FOR REPLICATION ] AS { <sql_statement> [;][ ...n ] | <method_specifier> } [;] <procedure_option> ::= [ ENCRYPTION ] [ RECOMPILE ] [ EXECUTE_AS_Clause ] <sql_statement> ::= { [ BEGIN ] statements [ END ] } <method_specifier> ::= EXTERNAL NAME assembly_name.class_name.method_name
Tárolt eljárások III. • Jellemzők: • Egyedi nevük van • Tetszőleges számú input paraméterekkel rendelkezik • Kimeneti paraméterek definiálására is lehetőség van • ENCRYPTION: az eljárás titkosítva tárolódik • RECOMPILE: minden futtatáskor újrafordítódik • A törzs nem tartalmazhatja a következőket: • SET SHOWPLAN_TEXT • SET SHOWPLAN_ALL • USE <database>
Tárolt eljárások IV. • Használathoz futtatási jog szükséges • GRANT EXECUTE ON <stored procedure> TO <database principle> • A futtatási joggal automatikusan elérhetővé válnak a tartalmazott objektumok és parancsok • DE! Direktben nem érhetők el, csak az eljáráson keresztül
Triggerek • Típusai: • DML triggerek • AFTER • INSTEAD OF • DDL triggerek • Rekurzív triggerek • Nested triggerek
DML triggerek • Egy adott táblához tartozik • Esemény bekövetkezésének hatására fut le, nem lehet direkt meghívni • Események: INSERT, UPDATE, DELETE • Módok: • AFTER • INSTEAD OF • Törzsben nem használhatóak: • Create, alter, drop, backup, restore
DML triggerek II. • Speciális táblák: • INSERTED • DELETED CREATE TRIGGER [ schema_name. ] trigger_name ON { table | view } [ WITH <dml_trigger_option> [ ,...n ] ] { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <methodspecifier [ ; ] > } <dml_trigger_option> ::= [ ENCRYPTION ] [ EXECUTE AS Clause ]
Rekurzív és nested triggerek • Rekurzív triggerek: • Trigger akciója kiválthatja újra önmagát • Egy mechanizmus kezeli a végtelenséget • RECURSIVE_TRIGGERS opció állításával • Nested triggerek: • Egy trigger akciója kiváltja egy másik trigger „tüzelését” • A másik trigger pedig kiváltja az előző lefutását • NESTED_TRIGGERS paraméter állításával szabályozható
DDL triggerek • Használata: • Korlátozhatja a DDL utasítások használatát • Szintaktika: CREATE TRIGGER trigger_name ON { ALL SERVER | DATABASE } [ WITH <ddl_trigger_option> [ ,...n ] ] { FOR | AFTER } { event_type| event_group} [ ,...n ] AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME < methodspecifier > [ ; ] } <ddl_trigger_option> ::= [ ENCRYPTION ] [ EXECUTE AS Clause ] <method_specifier> ::= assembly_name.class_name.method_name
Teljes mentés • Minden adat mentésre kerül, ami az adatbázisban található • Használható adatbázis újralétrehozására is • A visszaállítási modelltől függetlenül mindig alkalmazható. • A lehető leggyorsabban történik az elvégzése minimális erőforrás használat mellett. • A backup engine lapokat ír backup device-re, a sorrend figyelembe vétele nélkül • 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éggétől függ.
Teljes mentés II. • Logikai inkonzisztencia léphet fel • Userek bejelentkezett állapota és aktivitása miatt • SQL Server a következőképpen küszöböli ezt ki • 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
Teljes mentés III. • Parancs: • BACKUP DATABASE <database_name> TO DISK=‘<directory>\<filename>’ WITH INIT • TO rész: • A backup device-t lehet megadni • DISK,TAPE: explicit útvonalat lehet kijelölni • WITH rész: • Több, mint egy tucat paramétere lehet • INIT: mindent írjon felül a backup eszközön
Különbségi mentés • Az utolsó teljes mentés óta változott extenteket menti. • Előnye: a tranzakciós log mentések számát csökkenti. • Csak teljes mentés után használható • Visszaállítási modelltől függetlenül haszálható.
Különbségi mentés II. • Nem inkrementális backup • Inkrementális backup: az utolsó inkrementális backup óta eltelt változásokat menti • Az utolsó TELJES MENTÉS óta eltelt változásokat menti. • Pl. teljes mentés éjfélkor történt • 4 óránként van különbségi mentés • Minden mentés az éjfél óta eltelt változásokat tartalmazza
Különbségi mentés III. • Extent map • Egy másik adatlap az adatbázisban • Minden bit az oldalon egy extent-et reprezentál • 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áltlan és az adatlapok mérete 8KB lehet, 8192 extentenként jön létre mapping oldal
Különbségi mentés IV. • Parancs: • BACKUP DATABASE <database_name> TO DISK=‘<directory>\<filename>’ WITH DIFFERENTIAL
Tranzakció log mentés • Teljes vagy bulk-loggedrecoverymodel esetén használható • Teljes mentés után használható • Adatok egy részhalmazát tartalmazza és szükséges egy teljes mentés a visszaállításhoz • Az aktív logot menti • Az előző log backup utáni Log SequenceNumber-rel (LSN) kezdi. • Mindaddig menti a tranzakciókat, amíg egy nyitott tranzakciót el nem ér • A mentett tranzakciók a logból eltávolíthatók
Tranzakció log mentés II. • Parancs: • BACKUP LOG <database_name> TO DISK=‘<directory>\<filename>’ WITH INIT
Filecsoport mentés • Alternatív mentési stratégia a teljes mentéshez • 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 • Teljes vagy Bulk-logged recovery modell szükséges
Filecsoport mentés II. • 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 • 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ó fárasztó és időigényes folyamat. • Létrehozható másolat a mentésről az SQL Serverben: tükrözött mentés
Tükrözött mentés II. • BACKUP parancs opcionális része: • [[MIRROR TO <backup_device> [,…n]][…next-mirror]] • 4 másolat létrehozása lehetséges, ebből 3 a MIRROR TO részben definiált • Korlátozások: • Az eszköznek az összes másolathoz ugyanolyan típusúnak kell lenni. • Mindegyiknek hasonló tulajdonságokkal kell rendelkeznie. • Pl. ha a backup disk-re történik, a másolatok is disk-re kell kerüljenek
Tükrözött mentés III. • Példa: BACKUP DATABASE PUBS TO DISK=‘C:\DEMO\BACKUP\PUBS1A.BAK’, DISK=‘C:\DEMO\BACKUP\PUBS1B.BAK’ MIRROR TO DISK=‘\\BAKSERVER1\BACKUP\PUBSMIRROR1A.BAK’, DISK=‘\\BAKSERVER1\BACKUP\PUBSMIRROR1B.BAK’ MIRROR TO DISK=‘\\BAKSERVER2\BACKUP\PUBSMIRROR2A.BAK’, DISK=‘\\BAKSERVER2\BACKUP\PUBSMIRROR2B.BAK’ MIRROR TO DISK=‘\\BAKSERVER3\BACKUP\PUBSMIRROR3A.BAK’, DISK=‘\\BAKSERVER3\BACKUP\PUBSMIRROR3B.BAK’ WITH FORMAT GO
Részleges mentés • Lehetőség van írható és csak olvasható filecsoportok kezelésére • Előző verziókban a backup a csak olvasható filecsoportokra is kiterjedt, ami ugyebár nem változhatott • Új paraméter: • READ_WRITE_FILEGROUPS
Részleges mentés II. • Jelentése: • A backup figyelmen kívül hagyja a csak olvasható filecsoportokat • Időt és helyet takaríthatunk meg vele • Példa: • BACKUP DATABASE PUBS READ_WRITE_FILEGROUPS TO DISK=‘C:\DEMO\BACKUP\PUBS1.BAK’
Részleges mentés II. • Jelentése: • A backup figyelmen kívül hagyja a csak olvasható filecsoportokat • Időt és helyet takaríthatunk meg vele • Példa: • BACKUP DATABASE PUBS READ_WRITE_FILEGROUPS TO DISK=‘C:\DEMO\BACKUP\PUBS1.BAK’
Gyakorlás • 1. Mentsük az adatbázist teljes, különbségi és tranzakció log mentéssel! • 2. Készítsünk filecsoport, filcsoport különbségi és tranzakció log mentéseket!
Full backup visszaállítás • Legtöbb visszaállítás az adatbázis újralétrehozásával kezdődik egy adott időben • Aztán a következő backup-ok visszaállítása a cél ideig • Ez a folyamat a teljes mentésből történő visszaállítással kezdődik.
Full backup visszaállítás II. • A teljes mentés az teljes adatbázist tartalmazza • A visszaállítási műveletnek az oldalakat szekvenciális sorrendben kell visszatenni az adatbázisba • A folyamat végén egy teljesen koherens adatbázist kapunk.
Full backup visszaállítás III. • Példa: • RESTORE DATABASE PUBS FROM DISK=‘C:\DEMO\BACKUP\PUBSFULL.BAK’ WITH REPLACE, STANDBY = ‘C:\DEMO\BACKUP\PUBSSTANDBY.STN’ • REPLACE opció: • Írja felül a már létező ugyanolyan nevű adatbázist • STANDBY opció: • Az adatbázist visszaállítás állapotban hagyja: • Írás nem megengedett • De a userek kapcsolódhatnak az adatbázishoz és lekérdezéseket végezhetnek • WITH RECOVERY, WITH NORECOVERY opciók
Differential Backup visszaállítás • Kiindulópont: • Teljes backup visszaállítás szükséges • Példák: • RESTORE DATABASE PUBS FROM DISK=‘C:\DEMO\BACKUP\PUBSFULL.BAK’WITH NORECOVERY • RESTORE DATABASE PUBS FROM DISK=‘C:\DEMO\BACKUP\PUBSFULL.BAK’WITH RECOVERY
Differential Backup visszaállítás II. • Filecsoport visszaállítás példa: • RESTORE DATABASE AdventureWorks FILEGROUP=‘FG1’ FROM DISK=‘C:\TEST\AWFG1.BAK’ WITH NORECOVERY • RESTORE DATABASE AdventureWorks FILEGROUP=‘FG1’ FROM DISK=‘C:\TEST\AWFG1.BAK’ WITH RECOVERY
Transaction Log visszaállítás • Az adatbázis előregörgetése egy adott pontig • Teljes vagy különbségi backup visszaállítás után lehetséges. • A TL Backup tranzakció sorozatot tartalmaz az LSN-nel azonosítva • Lehetőség van egy bizonyos LSN-nél leállítani a recovery folyamatot (STOPAT)
Példák • Visszaállítási folyamat (full+diff+TR) • Full • RESTORE DATABASE AdventureWorks FILEGROUP=‘FG1’ FROM DISK=‘C:\TEST\AWFG1.BAK’ WITH NORECOVERY • Differential • RESTORE DATABASE AdventureWorks FROM DISK=‘C:\TEST\FG1DIFF1.BAK’ WITH NORECOVERY • Transaction log • RESTORE LOG AdventureWorks FROM DISK=‘C:\TEST\AW2.TRN’ WITH RECOVERY
Példák II. • Visszaállítási folyamat (full+multiple TR) • Full • RESTORE DATABASE AdventureWorks FILEGROUP=‘FG1’ FROM DISK=‘C:\TEST\AWFG1.BAK’ WITH NORECOVERY • TR log • RESTORE LOG AdventureWorks FROM DISK=‘C:\TEST\AW1.TRN’ WITH NORECOVERY • RESTORE LOG AdventureWorks FROM DISK=‘C:\TEST\AW2.TRN’ WITH RECOVERY
Részleges visszaállítás • Az adatbázis egy részének visszaállítása • Az adatbázis többi része elérhetővé válik a kérések számára • Amennyiben a kérésekhez nincs szükség a visszaállítandó részre, a usereknek semmi sem tűnik fel
Korrupt oldal visszaállítása • Egy vagy több oldal korrupttá válhat • Előző verziókban server hiba okozta és az adtabázis offline módba került • Javítás az oldal típusától függő volt: • Index oldal vált korrupttá: • Droppolás után újragenerálódott • Adat oldal vált korrupttá: • Visszaállítás backupból, • A backup alatt a DB offline
Korrupt oldal visszaállítása II. • PAGE_VERIFY CHECKSUM • Ezen verifikáció engedélyezése után bármely korrupttá vált oldal loggolódik és karanténba kerül • Verifikáció engedéleyezése: • ALTER DATABASE <database_name> SET PAGE_VERIFY CHECKSUM • Alaphelyzetben ki van kapcsolva • Korrupt lapok a suspect_pages táblába loggolódnak az msdb adatbázisban
Korrupt oldal visszaállítása III. • A log végének mentése • BACKUP LOG PUBS TO DISK=‘C:\HA\DEMO\BACKUP\PUBS1.TRN’ WITH INIT • GO • Korrupt lap visszaállítása • USE MASTER • GO • RESTORE DATABASE PUBS PAGE=‘1:88’ FROM DISK=‘C:\HA\DEMO\BACKUP\PUBSMIRROR1.BAK’ WITH RECOVERY • GO • Tranzakciók a TR logba • USE MASTER • GO • RESTORE LOG PUBS FROM DISK=‘C:\HA\DEMO\BACKUP\PUBS1.TRN’ WITH RECOVERY • GO
Visszaállítás eszköz hibákkal • a hiba ritkán detektálható a backup előtt • Visszaállításnál a létező adatbázis tartalma kisöprődik • A visszaállítás abortálódik a hiba miatt • Marad egy teljesen érvénytelen adatbázis
Visszaállítás eszköz hibákkal II. • A RESTORE utasításnak van egy opciója, melynek hatására a hibás szektorok átugrásra kerülnek és a visszaállítási folyamat ezáltal befejeződhet • WITH CONTINUE_AFTER_ERROR • Nincs rá garancia, hogy a visszaállítás során az adatbázis használható lesz • Hiba esetén az adatbázis emergency módba kerül • Kapcsolódhatunk az adatbázishoz • Select utasításokat kiadhatunk • Adatváltoztatás nem lehetséges
Backup validálása • Honnan tudható, hogy a backup használható? • Módja: • Adatok visszaállítása és verifikációja • Igen időigényes és ritkán praktikus • Helyette: • RESTORE VERIFYONLY FROM <backup_device> […,n] • Ellenőrzi a mediaheader-t • Verifikálja a backup checksum-ot • Olvassa a belső lap láncokat és újraszámítja a backup checksum-ot az összehasonlításhoz
Adatbázis mozgatása • Szükség lehet adatbázisok szerveren belüli v. szerverek közötti mozgatására • 3 mechanizmus létezik erre: • Backup és restore • Detach/attach • Copy Database Wizard
Connexion au compte
Connectez-vous pour publier votre contenu sur SlideServe.