Version 1 (modified by 3 weeks ago) ( diff ) | ,
---|
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):
bcp MyDatabase.dbo.MyTable out "C:\backups\MyTable_data.bak" -c -t, -S localhost -U sa -P YourPassword
- Со SQLCMD за копија на целата база (DDL + DML):
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:
-- 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
-- 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. Ова овозможува враќање на базата до одреден момент. Ваквиот начин е многу корисен доколу сакаме да вратиме некоја база неколку минути пред грешка/баг.
-- 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:
# 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'; "