SQLServer 10. téma Adatok mentése Adatmentés A DBA egyik fő feladata az adatok épségének, megőrzésének biztosítása. Az adatokat redundánsan kell tárolni mentések (backup) helyreállítás (restore, recover) Különböző mentési modellek COPY mentés SQLServer mentés mentés jellege mentés tartalma 1
Adatmentés Back-up and Restore Planning Implementation Execution Goals and Objectives Training and Testing BACKING UP AND RESTORING Adatmentés Adatbázis szerkezete Data files - primary (mdf) - secondary (ndf) filegroup-ba szervezettek Transaction Logs - REDO LOG - csak a tevékenység parancsa van benne LSN: Log Sequence Number, megy napló bejegyzés azonosítója a két komponens együtt kell a hatékony mentéshez Asszinkron és részben szinkron módon íródnak ki a lemezre. 2
Adatmentés Mentési típusok - FULL - minden adatelem mentésre kerül - minden köztes napló is mentésre kerül - BULK LOGGEDor szü - a bulk copy parancs nem mentődik le, ekkor egy teljes mentésre is szükség lehet - SIMPLE - nincs napló mentes - BULK COPY nem naplózótt A mentésekben az adatok ömlesztve jönnek, a helyreállítás modul teszi őket használhatóvá Adatmentés Elvégezhet gezhető mentési módok: m Differential backup Complete backup Transaction log backup File/filegroup backup File/filegroup differential A napló és filegroup mentések csak SIMPLE módban használhatók A mentés célhelyeiként BACKUP DEVICE hozható létre: - permanens - ideiglenes 3
Teljes adatmentés Konzisztens mentést adhat lépései: - adatbázis zárolás, minden tranzakció blokkolása - a naplóban megadni a kezdő SLN-t - adatbázis zárolás felengedése - adatbázis tartalom mentése - adatbázis zárolás, minden tranzakció blokkolása - jelezni a naplóban a záró LSN-t - adatbázis tartalom felengedése - a köztes szakasz napló bejegyzéseinek mentése Teljes adatmentés Konzisztens mentést adhat Függetlenséget biztosít Több célhely megadható egyszerre Célszerű időszakosan megismételni BACKUP DATABASE nev TO DISK TO TAPE WITH INIT 4
Teljes adatmentés BACKUP DATABASE { database_name @database_name_var } TO < backup_device > [,...n ] [ WITH [ BLOCKSIZE = { blocksize @blocksize_variable } ] [ [, ] DESCRIPTION = { 'text' @text_variable } ] [ [, ] DIFFERENTIAL ] [ [, ] EXPIREDATE = { date @date_var } RETAINDAYS = { days @days_var } ] [ [, ] PASSWORD = { password @password_variable } ] [ [, ] FORMAT NOFORMAT ] [ [, ] { INIT NOINIT } ] [ [, ] MEDIADESCRIPTION = { 'text' @text_variable } ] [ [, ] MEDIANAME = { media_name @media_name_variable } ] [ [, ] MEDIAPASSWORD = { mediapassword @mediapassword_variable } ] [ [, ] NAME = { backup_set_name @backup_set_name_var } ] [ [, ] { NOSKIP SKIP } ] [ [, ] { NOREWIND REWIND } ] [ [, ] { NOUNLOAD UNLOAD } ] [ [, ] RESTART ] [ [, ] STATS [ = percentage ] ] Inkrementális adatmentés Helyreállítási hatékonyságát növeli Csak a legutóbbi mentés után módosult adatokat menti Induló teljes mentést igényel Több célhely megadható egyszerre Célszerű időszakosan megismételni 5
Differenciális adatmentés Helyreállítási hatékonyságát növeli A legutóbbi teljes mentés óta eltelt változásokat menti le Induló teljes mentést igényel Több célhely megadható egyszerre Célszerű időszakosan megismételni BACKUP DATABASE nev TO DISK TO TAPE WITH INIT WITH DIFFERENTIAL Differenciális adatmentés 6
Napló adatmentés Helyreállítási hatékonyságát növeli A napló bejegyzéseket menti más helyre A mentés után csonkolódik a naplófile Induló teljes mentést vagy részleges mentést igényel Több célhely megadható egyszerre Célszerű időszakosan megismételni BACKUP LOG { database_name @database_name_var } { TO < backup_device > [,...n ] [ WITH [ BLOCKSIZE = { blocksize @blocksize_variable } ] [ [, ] DESCRIPTION = { 'text' @text_variable } ] [ [,] EXPIREDATE = { date @date_var } RETAINDAYS = { days @days_var } ] [ [, ] PASSWORD = { password @password_variable } ] [ [, ] FORMAT NOFORMAT ] [ [, ] { INIT NOINIT } ] [ [, ] MEDIADESCRIPTION = { 'text' @text_variable } ] [ [, ] MEDIANAME = { media_name @media_name_variable } ] [ [, ] MEDIAPASSWORD = { mediapassword @mediapassword_variable } ] [ [, ] NAME = { backup_set_name @backup_set_name_var } ] [ [, ] NO_TRUNCATE ] [ [, ] { NORECOVERY STANDBY = undo_file_name } ] [ [, ] { NOREWIND REWIND } ] [ [, ] { NOSKIP SKIP } ] [ [, ] { NOUNLOAD UNLOAD } ] [ [, ] RESTART ] [ [, ] STATS [ = percentage ] ] ] Napló adatmentés 7
Napló adatmentés A napló mentés point in time vagy point of failure típusú helyreállításokat is lehetővé tesz Filecsoport adatmentés Helyreállítási hatékonyságát növeli Szelektálható az objektumok köre Gyorsabb mentés végrehajtás Több célhely megadható egyszerre naplómentést is igényel BACKUP DATABASE { database_name @database_name_var } < file_or_filegroup > [,...n ] TO < backup_device > [,...n ] 8
Adatmentés Adatbázis mentése elérhető a SSMS komponensből database tasks - backup Adathelyreállítás RESTORE: az állományok adattartalmának helyreállítása RECOVER: az adatok integritásának helyreállítása Főbb lépések: - adatfileok visszaállítása (restore) - naplók tartalmának újrajátszása (redo) - az integritás helyreállítása (recover) A helyreálltás előtt célszerű még egy napló mentést végezni Ha több elemű a mentés, akkor a sorrend: FULL mentés helyreállítása, DIFFERENTIAL mentések helyreállítása 9
Adathelyreállítás Helyreállítás SQL parancs: RESTORE DATABASE dd FROM DISK=device WITH REPLACE Az integritási helyreállítás szabályozása: RESTORE WITH RECOVERY WITH NORECOVERY A mentés helyességének ellenőrzése: RESTORE VERIFYONLY FROM < backup_device > [,...n ] [ WITH [ FILE = file_number ] [ [, ] { NOUNLOAD UNLOAD } ] [ [, ] LOADHISTORY ] Adathelyreállítás RESTORE DATABASE { database_name @database_name_var } [ FROM < backup_device > [,...n ] ] [ WITH [ RESTRICTED_USER ] [ [, ] FILE = { file_number @file_number } ] [ [, ] PASSWORD = { password @password_variable } ] [ [, ] MEDIANAME = { media_name @media_name_variable } ] [ [, ] MEDIAPASSWORD = { mediapassword @mediapassword_variable } ] [ [, ] MOVE 'logical_file_name' TO 'operating_system_file_name' ] [,...n ] [ [, ] KEEP_REPLICATION ] [ [, ] { NORECOVERY RECOVERY STANDBY = undo_file_name } ] [ [, ] { NOREWIND REWIND } ] [ [, ] { NOUNLOAD UNLOAD } ] [ [, ] REPLACE ] [ [, ] RESTART ] [ [, ] STATS [ = percentage ] 10
Adathelyreállítás Speciális helyreállítási esetek: RESTORE LABELONLY RESTORE HEADERONLY RESTORE FILELISTONLY Napló helyreállítás RESTORE LOG { database_name @database_name_var } [ FROM < backup_device > [,...n ] ] [ WITH [ RESTRICTED_USER ] [ [, ] FILE = { file_number @file_number } ] [ [, ] PASSWORD = { password @password_variable } ] [ [, ] MOVE 'logical_file_name' TO 'operating_system_file_name' ] [,...n ] [ [, ] MEDIANAME = { media_name @media_name_variable } ] [ [, ] MEDIAPASSWORD = { mediapassword @mediapassword_variable } ] [ [, ] KEEP_REPLICATION ] [ [, ] { NORECOVERY RECOVERY STANDBY = undo_file_name } ] [ [, ] { NOREWIND REWIND } ] [ [, ] { NOUNLOAD UNLOAD } ] [ [, ] RESTART ] [ [, ] STATS [= percentage ] ] [ [, ] STOPAT = { date_time @date_time_var } [, ] STOPATMARK = 'mark_name' [ AFTER datetime ] [, ] STOPBEFOREMARK = 'mark_name' [ AFTER datetime ] 11
Adathelyreállítás Adatmentés és helyreállítás Speciális lehetőség, a tartalom mentése SQL generáló script lekérése: database script database as generate Adatbázis séma lekérése: Database Diagram Egy új adatbázis létrehozható, mint egy másik mentése 12
Adatmentés és helyreállítás Speciális opció az adatbázisok lecsatolása és visszacsatolása Lecsatolás: Database Tasks Detach Visszacstolás: Databases Attach 13