pátek 25. listopadu 2011

Jak automaticky zálohovat Windows Internal Database

Pokud používáte Windows Internal Database (např. pro RMS, ...) v rámci serveru MS Windows 2008 ( nebo MS Windows Serveru 2008 R2) je dobré také nasadit zálohování.
Nejlépe plně automaticky skrz naplánované úlohy (to co je červeně modifikujeme dle svých potřeb).

Popis skriptu ... co dělá:
- provede automaticky zálohu všech databází
- udržuje historii posledních 12 záloh
- zálohuje do cesty D:\SQLinternal\Backup\

Vytvoříme nejprve příkazový řádek např. pod názvem SQLintBackup.cmd:
@echo off
cls
rem definuje cestu pro zalohy

set BackupFilePath=D:\SQLinternal\Backup\
rem pripojime Windows Internal Database
sqlcmd -S \\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query -E -i SQLintBackup.sql

rem smazeme vsechny soubory starsi 12 dnů
echo Mazu zalohy starsi 12 dnů ...
forfiles /P %BackupFilePath% /M *.bak /D -12 /C "CMD /C DEL /Q @FILE"

A ješte musíme vytvořit soubor s SQL příkazy např. pod názvem SQLintbackup.sql
-- kam bude script zálohovat
:setvar BackupFilePath "D:\SQLinternal\Backup\"
DECLARE
  @timestamp AS nvarchar(20),
  @current_id AS int,
  @current_name AS varchar(max),
  @current_file AS varchar(max)

-- vytvori jmeno souboru s casovou znackou (ve frmatu: YYYYMMDD_hhmmss)
SET @timestamp = CONVERT(nvarchar, GETDATE(), 20)
SET @timestamp = REPLACE(@timestamp, '-', '')
SET @timestamp = REPLACE(@timestamp, ':', '')
SET @timestamp = REPLACE(@timestamp, ' ', '_')

SELECT @current_id = MIN(database_id) FROM sys.databases WHERE name <> 'tempdb'
WHILE @current_id IS NOT NULL BEGIN
  SELECT @current_name = name FROM sys.databases WHERE database_id = @current_id
  SET @current_file = '$(BackupFilePath)' + @current_name + '_' + @timestamp + '.bak'
  PRINT 'Backing up database ' + @current_name + ' to ' + @current_file
  BACKUP DATABASE @current_name TO  DISK = @current_file WITH NOINIT
  PRINT NULL

  SELECT @current_id = MIN(database_id) FROM sys.databases WHERE name <> 'tempdb' AND database_id > @current_id
END

Žádné komentáře:

Okomentovat