= MSSQL Server – Бекап и реставрација = Во Microsoft SQL Server, резервните копии и реставрацијата се клучен дел од администрацијата на базата на податоци. MSSQL овозможува различни типови на бекапи: логички, физички и напредни сценарија како '''Point-in-Time Recovery (PITR)'''. Овие опции ја штитат базата од загуба на податоци поради хардверски дефекти, грешки во апликации или човечки грешки. ---- === Типови на бекап во MSSQL === ===== 1. Логички бекап (Logical Backup) ===== Овие копии можеме да ги правиме преку Generate Scripts во SQL Server Management Studio (SSMS) или преку BCP/SQLCMD. - Со користење на BCP (Bulk Copy Program): {{{ #!sql bcp MyDatabase.dbo.MyTable out "C:\backups\MyTable_data.bak" -c -t, -S localhost -U sa -P YourPassword }}} - Со SQLCMD за копија на целата база (DDL + DML): {{{ #!sql sqlcmd -S localhost -U sa -P YourPassword -d MyDatabase -Q "SELECT definition FROM sys.sql_modules" }}} ===== 2. Физички бекап (Physical Backup) ===== MSSQL има опции за '''full, differential, и transaction log backups.''' Ова е стандардниот начин за целосна заштита на податоците. Основни типови: - Full Backup -> комплетна копија на базата - Differential Backup -> само промените од последниот Full backup - Transaction Log Backup -> сите трансакции од последниот log backup ====== ''Примери со T-SQL:'' ====== {{{ #!sql -- Full backup BACKUP DATABASE MyDatabase TO DISK = 'C:\backups\MyDatabase_full.bak' WITH FORMAT, INIT, NAME = 'Full Backup of MyDatabase'; -- Differential backup BACKUP DATABASE MyDatabase TO DISK = 'C:\backups\MyDatabase_diff.bak' WITH DIFFERENTIAL, INIT, NAME = 'Differential Backup of MyDatabase'; -- Transaction log backup BACKUP LOG MyDatabase TO DISK = 'C:\backups\MyDatabase_log.trn' WITH INIT, NAME = 'Transaction Log Backup'; }}} === Реставрација во MSSQL === {{{ #!sql -- Restore a full backup RESTORE DATABASE MyDatabase FROM DISK = 'C:\backups\MyDatabase_full.bak' WITH MOVE 'MyDatabase_Data' TO 'C:\SQLData\MyDatabase.mdf', MOVE 'MyDatabase_Log' TO 'C:\SQLData\MyDatabase.ldf', REPLACE, RECOVERY; }}} === Point-in-Time Recovery (PITR) === PITR во MSSQL се прави со помош на '''Transaction Log Backups'''. Ова овозможува враќање на базата до одреден момент. Ваквиот начин е многу корисен доколу сакаме да вратиме некоја база неколку минути пред грешка/баг. {{{ #!sql -- Restore full backup RESTORE DATABASE MyDatabase FROM DISK = 'C:\backups\MyDatabase_full.bak' WITH NORECOVERY; -- Restore all transaction logs until target time RESTORE LOG MyDatabase FROM DISK = 'C:\backups\MyDatabase_log.trn' WITH STOPAT = '2025-08-30 15:45:00', NORECOVERY; -- Finalize RESTORE DATABASE MyDatabase WITH RECOVERY; }}} === Автоматизација === Имаме неколку опции кога станува збор за автоматизација на бекап процедури: - `SQL Server Agent Jobs` -> можеме да креираме автоматски таскови за бекап. - `PowerShell scripts` -> можеме да користиме автоматизација преку Windows Task Scheduler.  Пример за `PowerShell` скрипта за full backup: {{{#!sql # PowerShell backup script $timestamp = Get-Date -Format "ddMMyyyy_HHmm" $backupFile = "C:\backups\MyDatabase_$timestamp.bak" Invoke-Sqlcmd -Query " BACKUP DATABASE [MyDatabase] TO DISK = N'$backupFile' WITH FORMAT, INIT, NAME = 'Full Backup of MyDatabase'; " }}}