Automatyczna kopia bazy dla Microsoft SQL Express

backup dla Microsoft SQL Express

Z tego wpisu dowiecie się jak wykonać automatyczną kopię bazy dla Microsoft SQL Express.
Jest to skrypt który można zapisać jako plik z rozszerzeniem .bat. Skonfigurować harmonogram zadań, aby go wykonywał regularnie.
Skrypt ten ustawia ścieżkę folderu, w którym zostanie utworzona kopia zapasowa. Nazwę pliku kopii zapasowej oraz ścieżkę do narzędzia do zarządzania bazą danych SQL Server Express. Następnie łączy się z lokalnym serwerem SQL Express i wykonuje polecenie BACKUP DATABASE. Aby utworzyć kopię zapasową bazy danych i zapisać ją we wskazanym folderze. Na końcu wyświetla informację o zakończeniu kopii zapasowej.
Po prawidłowym wykonaniu backupu wykonuje sekcję usuwającą kopie zapasowe starsze niż np. 7 dni. Do tego celu używa polecenia „FORFILES”, które jest dostępne w systemie Windows.
Jak wykonać kopię SQL Express? Wystarczy poniższy kod zapisać w pliku .bat lub .cmd, podmienić ścieżki oraz nazwę serwera i bazy na swoje.

@echo off
REM Skrypt pochodzi z https://www.robinit.eu/

setlocal

REM Ścieżka do folderu, w którym ma zostać utworzona kopia zapasowa
set BACKUP_DIR=C:\Backup

REM Nazwa pliku kopii zapasowej
set BACKUP_FILE_NAME=sql_backup_%date:~10,4%%date:~7,2%%date:~4,2%_%time:~0,2%%time:~3,2%%time:~6,2%.bak

REM Ścieżka do narzędzia do zarządzania bazą danych SQL Server Express
set SQLCMD_EXE="C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\SQLCMD.exe"

REM Połączenie z lokalnym serwerem SQL Express (zmień "SQLEXPRESS" na odpowiednią nazwę instancji)
set SQL_CONNECTION=-S .\SQLEXPRESS -E

REM Polecenie wykonujące kopię zapasową (zmień "SAGE" na odpowiednią nazwę bazy)
set BACKUP_COMMAND="BACKUP DATABASE SAGE TO DISK='%BACKUP_DIR%\%BACKUP_FILE_NAME%'"

REM Polecenie "forfiles", które usuwa pliki z rozszerzeniem ".bak" z folderu określonego w zmiennej "BACKUP_DIR", które są starsze niż 7 dni. Parametr "/d -7" określa, że pliki starsze niż 7 dni powinny zostać usunięte. 
set DELETE_COMMAND=forfiles /p %BACKUP_DIR% /m *.bak /d -7 /c "cmd /c del @path"

REM Wykonanie kopii zapasowej
%SQLCMD_EXE% %SQL_CONNECTION% -Q %BACKUP_COMMAND%


if %ERRORLEVEL% EQU 0 (
  echo Kopiowanie bazy danych SQL Server Express zakończone.
  %DELETE_COMMAND%
) else (
  echo Błąd wykonania kopii.
)

W przykładowym skrypcie nie ma parametrów do podania hasła. Korzysta z autoryzacji Windows (parametr „-E”), która nie wymaga podawania hasła. Jeśli korzystasz z autoryzacji SQL, musisz dodać parametry do połączenia z bazą danych, takie jak nazwa użytkownika i hasło, do zmiennej SQL_CONNECTION. Na przykład, jeśli używasz autoryzacji SQL z nazwą użytkownika „user” i hasłem „password”, zmodyfikuj zmienną SQL_CONNECTION w ten sposób:

set SQL_CONNECTION=-S .\SQLEXPRESS -U user -P password

W tym przypadku połączenie z serwerem SQL Server Express wymaga podania nazwy użytkownika i hasła. Możesz również użyć zmiennej środowiskowej, aby ukryć hasło i zabezpieczyć skrypt. W tym celu zmodyfikuj zmienną SQL_CONNECTION w ten sposób:

set SQL_CONNECTION=-S .\SQLEXPRESS -U user -P %SQL_PASSWORD%

Następnie ustaw wartość zmiennej środowiskowej SQL_PASSWORD za pomocą polecenia „setx”:

setx SQL_PASSWORD "password" /m
Uwaga: Pamiętaj, że używanie zmiennej środowiskowej z hasłem jest NIEBEZPIECZNE, jeśli skrypt jest udostępniany innym użytkownikom. Upewnij się, że go ODPOWIEDNIO zabezpieczyłeś i jest dostępny tylko dla uprawnionych użytkowników.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *