Automatyczna kopia baz danych w SQL Server Express na dysku sieciowym.

Każdy użytkownik/administrator MS SQL Server w wersji Express stanął przed problemem robienia kopii bezpieczeństwa. Najlepszym sposobem jest aby kopie te były tworzone automatycznie tak aby nie było potrzeby pamiętania o tym. Niestety w wersja Express jest pozbawiona możliwości tworzenia kopii automatycznej. Kolejnym dodatkowym wyzwaniem jest tworzenie kopii na dysku sieciowym np. jakiś NAS. Domyślnie lokalizację sieciowe nie są dostępne z poziomu SQL Servera. Poniżej opisze jak tego dokonać, kody źródłowe dostępne tylko dla zalogowanych użytkowników.

1. Zaczniemy od mapowania lokalizacji sieciowej w SQL Server, wszystkie operację wykonujemy na bazie master.

  • Należy włączyć możliwość zaawansowanej konfiguracji serwera.

  • Zezwolić na dostęp do procedur sys.xp_cmdshell

  • Utworzyć procedurę mapowania dysku: mapowanie, polecenie net use jest standardowe znane z normalnego mapowania dysków

  • Dodatkową w/w procedurę można ustawić jako startową wraz z włączeniem serwera

  • Manualnie procedurę można uruchomić tak:

  • Sprawdzanie aktualnie działających procedur, wywołujemy tym selectem

2. Następnym krokiem będzie stworzenie procedury sp_BackupDb SQL Server do tworzenia kopii. Jako wzór do tej procedury posłużył mi kod napisany przez Doug Rathbone, dostępny w internecie a wygląda on następująco:

Powyższy skrypt tworzy nową procedurę o nazwie Sp_BackupDb , który działa na bazie danych z wyboru (@dbName), w zależności od typu backup danych (@backupTypeToRun) kopię tworzy albo pełną (przy użyciu parametru F), różnicową (przy użyciu parametru D) lub tworzenia kopii zapasowych loga (używając L parametr) do folderu sieciowego wcześniej za mapowanego (Z:\).

 

3. Kolejnym krokiem będzie stworzenie skryptu sql kopia_baz.sql, wywołującą powyższą procedurę. Srypt ten będzie wyglądał tak:

4. Ostatnim krokiem będzie stworzenie/zaplanowanie nowego zadania w harmonogramie zadań windows. Nazwa oraz czas i powtarzalność nowego zadania jest dowolna. Użytkownik który wywołuję procedurę powinien posiadać prawa administratora lub można przypisać, że użytkownikiem wywołującym to zadanie będzie SYSTEM. Zadanie jakie wykona program będzie włączenie programu SQLCMD.EXE, w zależności od wersji SQL Servera znajduję się on domyślnie w katalogach:

SQL Express 2005

C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE

SQL Express 2008

C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE

SQL Express 2008 R2

C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE

Należy dodać argument

edytowanie akcji

-S .\sqlexpress -E -i C:\Skrypty\kopia_baz.sql -o C:\Skrypty\raport.txt

-S (ta określa nazwę instancji programu SQL Server. – Jeśli używasz to lokalnie jest to domyślnie sqlexpress)

-E (ta określa, że chcesz, aby połączenie było zaufanym)

-i (to określa plik polecenia wejściowego, które w naszym przypadku jest to kopia_baz.sql zapisany w katalogu C:\Skrypty)

-o (to określa plik wyjściowy raport może być formacie txt lub rpt, nazwałem go raport.txt, jest nadpisywany każdorazowo po wykonaniu zadania)

To jest praktycznie wszystko co należy zrobić, testowałem to rozwiązanie na SQL Server 2005,2008,2008 R2 wszystko działało prawidłowo.

Ten wpis został opublikowany w kategorii Bazy danych. Dodaj zakładkę do bezpośredniego odnośnika.