Skocz do zawartości

Automatyczne wykonywanie kopii zapasowych baz danych Sello i Subiekt GT

Polecane posty

Automatyczny backup baz danych Sello i Subiek GT

 

Backup oparty w 100% o darmowe rozwiązanie. Jakoże bazy Sello i Subiekta (przynajmiej w firmie w której pracuje) nie zajmują zbyt dużo (po spakowaniu Subiekt 40mb, Sello 113 mb - ale szybko rośnie), dlatego można pokusić się o robienie kopii pełnych zamiast przyrostowych. Osobiscie jestem zwolennikiem robienia pełnych backupów - takie zboczenie zawodowe.

 

Sytuacja: jest serwer o nazwie SERWER na którym uruchamiany jest MSSQL server i chcemy aby automatycznie robił sobie backup, np. subiekta raz dziennie, a sello dwa razy dziennie. Żeby nie było zbyt rozrzutnie dorzucimy do tego automatyczne archiwizowanie backupów rarem i okresowe usuwanie kopii przestarzałych. Backupy bedziemy przykładowo przechowywać na zewnetrznym dysku E:\_backup\Sello\spakowane i E:\_backup\SubiektGT\spakowane.

 

 

1. Pobieramy darmowy programik SQL Scheduler http://www.lazycoding.com/downloads/SQLScheduler_LatestVersion.zip

2. Dodajemy nowy serwer na liście, w naszym przypadku będzie to SERWER\INSERTGT (jakoze domyslnie tam są bazy GT i Sello)

3. Klikamy prawym SERWER\INSERTGT i wybieramy New Job:

 

GENERAL:

 

Connection
SQL Server Authentication
Username: sa
Password:

 

DETAILS:

SQL:
--------------------------------------------------------------------
DECLARE @BackupName VARCHAR(100) 
DECLARE @BackupFileName VARCHAR(100) 
DECLARE @BackupPath VARCHAR(1000) 

SET @BackupName = 'nazwa_bazy-' + convert(nvarchar(20), getdate(), 112) 
SET @BackupFileName = @BackupName + N'.bak' 
SET @BackupPath = N'E:\_backup\Sello\' + @BackupFileName 

BACKUP DATABASE nazwa_bazy TO 
DISK = @BackupPath WITH NOFORMAT, NOINIT,

NAME = @BackupFileName, SKIP, REWIND, NOUNLOAD, STATS = 10 

exec xp_cmdshell 'C:\WINDOWS\sello.bat'
----------------------------------------------------------------------
Script timeout in seconds: 1200

SCHEDULE:

Type Recurring every 12 hour
Duration 16:30

 

4. Klikamy save. To zadanie bedzie wykonywało backup bazy Sello o nazwie nazwa_bazy o godzinie 16:30 i 4:30. Na koniec wykonywania backupu uruchamiany jest plik sello.bat, który musimy stworzyć i wrzucić, w tym przypadku, do C:\WINDOWS.

 

sello.bat:

 

cd E:\_backup\Sello
E:
"C:\Program Files\WinRAR\rar.exe" a -df -rr1 -ag[DD-MM-YYYY-HHmm] -ri7 %1 E:\_backup\Sello\spakowane\sello-%1.rar

 

5. Wykonanie powyzszego skryptu spowoduje spakowanie RARem wszystkich plików znajdujacych się w katalogu E:\_backup\Sello i umieszczenie archiwów w podkatalogu 'spakowane' o nazwach w formacie 'sello-[17-09-2008-1630].rar'. Czyli w nawiasie data i godzina wykonania backupu. Dodatkowo niespakowane kopie zostaną usuniete z nadrzędnego katalogu.

 

6. Dla Subiekta GT sytuacja wygląda praktycznie identycznie, wystarczy zmienić ścieżki i nazwy baz. SQL bedzie wyglądał np tak:

 

DECLARE @BackupName VARCHAR(100) 
DECLARE @BackupFileName VARCHAR(100) 
DECLARE @BackupPath VARCHAR(1000) 

SET @BackupName = 'nazwa_bazy-' + convert(nvarchar(20), getdate(), 112) 
SET @BackupFileName = @BackupName + N'.bak' 
SET @BackupPath = N'E:\_backup\SubiektGT\' + @BackupFileName 

BACKUP DATABASE nazwa_bazy TO 
DISK = @BackupPath WITH NOFORMAT, NOINIT,
NAME = @BackupFileName, SKIP, REWIND, NOUNLOAD, STATS = 10 

exec xp_cmdshell 'C:\WINDOWS\subiektgt.bat'

 

subiektgt.bat:

 

cd E:\_backup\SubiektGT
e:
"C:\Program Files\WinRAR\rar.exe" a -df -rr1 -ag[DD-MM-YYYY-HHmm] -ri7 %1 E:\_backup\SubiektGT\spakowane\subiekt-%1.rar 

 

7. Mając w SQL Scheduler uruchomione dwa powyższe zadania, ustawione na godziny jakie nam odpowiadają, możemy być spokojni o ewentualną awarię bazy danych, gdyż możemy ją w każdej chwili przywrócić. Ścieżką docelową kopii zapasowych powinien być najlepiej dysk zewnętrzny, który w wypadku awarii sprzętowej serwera lub jego dysku, pozostanie nienaruszony. Przechowywanie backupów na tym samym dysku na którym znajduje się zainstalowany MSSQL jest pozbawione sensu, gdyz w wypadku awarii sprzętowej pozostajemy z niczym. Jako ścieżkę docelową możemy również użyć sieciowej lokacji, jednak powinna ona być dostępna cały czas.

 

Na tą chwilę poprzestańmy na tym, że serwer uzywa jedynie wewnetrznego dysku oznaczonego literą C:\, a dysk E:\ to jakis zewnetrzny dysk na USB lub w najgorszym wypadku pendrive.

 

Nastepnym razem dopisze jak zautomatyzowac zarządzanie backupami, czyli ich usuwanie gdy są starsze niż podany przez nas okres czasu, aby nie doprowadzić do zapełnienia dysku.

 

 

Link to postu
  • 6 miesięcy temu...

a czy nie da się tego zrobić z poziomu SQL Servera? Opcje pojedynczego backupu znalazłem , ale nie potrafie wrzucić tego w jakiś harmonogram.

 

Zna się ktoś na tym? Fajnie by było gdyby ktoś z Insertu zapodał jakiś sposób na automatyczne tworzenie kopii zapasowych ich programów.

Z góry dzięki!

Link to postu

Uważam, że przydałby się mechanizm jednoczesnego zapisu danych w czasie rzeczywistym do dwóch identycznych baz na różnych dyskach. W przypadku awarii jednego z dysków możemy kontynuować pracę od momentu awarii. Backup wg. _euan_ jest ciekawy, ale dane możemy odtworzyć tylko na podstawie ostatniej archiwizacji - kilka godzin pracy zawsze nam bezpowrotnie zniknie, a przy ok.200-300 transakcjach dziennie odtworzenie danych może być niemożliwe.

Link to postu

Automatyzacja procesu backupu w Microsoft SQL 2005/2008 Express

 

 

Firma Microsoft oprócz swojego flagowego produktu jakim jest Microsoft SQL 2005/2008 Server (wydała również w pełni darmową lecz okrojoną wersję tegoż oprogramowania. Mowa tu oczywiście o SQL 2005/2008 Express . Server ten posiada trzy istotne ograniczenia : Obsługa tylko jednego procesora , maksymalnie potrafi wykorzystać 1 GB pamięci fizycznej , maksymalny rozmiar bazy to 4 GB . Oprócz wyżej wymienionych minusów są jeszcze inne jak min brak opcji ustawiania harmonogramu automatycznie uruchamianych zadań jak np. backup , procesowanie kostek itp. Jednym z tych ograniczeń a dokładnie wykonaniem automatycznie kopii postanowiłem się zająć.

 

Zaczynamy , w moim modelu zakładam że użytkownik posiada zainstalowany serwer bazodanowy SQL 2005 , pakiet SP2 i narzędzie Management Studio Express. Po pierwsze za pomocą Management Studio wybieramy interesującą naszą bazę . Klikamy opcję Tasks -> Back UP -> przechodzimy do menu Options gdzie zaznaczamy opcję „Overwrite All existing backup sets” ( w przeciwnym wypadku kolejne kopię będą się dopisywać do naszego pliku – co nie jest zalecane zwłaszcza w przypadku gdy nośnik kopii zapasowych się nie zmienia ).

 

sql2JPG_thumb.jpg

 

Możemy jeszcze zaznaczyć opcję weryfikacji po wykonaniu się kopi . Wybieramy jeszcze ścieżkę gdzie, kopia ma być zapisywana i klikamy meny Script -> Script Action fo File . Ostatnim krokiem jest zapisanie zadania do pliku z rozszerzeniem sql.

 

sql3JPG_thumb1.jpg

 

sql4_thumb.jpg

 

By uruchomić nasze zadanie w wierszu poleceń ( lub w skrypcie ) należy wykonać ciąg

 

sqlcmd -S server -i backupsql_1.sql.

 

Sqlcmd to narzędzie wchodzące w skład pakietu Management Studio( domyślna ścieżka to C:\Microsoft SQL Server\90\Tools\Binn). Skrypt wystarczy dodać do Harmonogramu Zadań Windows i wykonywać go w zaplanowanych porach

 

Przykład:

 

mojabaza.sql

BACKUP DATABASE [mojabaza] TO DISK = N’D:\Microsoft SQL Server 2005 Express\MSSQL.1\MSSQL\Backup\mojabaza.bak’ WITH NOFORMAT, INIT, NAME = N’mojabaza-Full Database Backup’, SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO

 

Backupmojabaza.cmd

sqlcmd -S server -i mojabaza.sql

rename “D:\Microsoft SQL Server 2005 Express\MSSQL.\MSSQL\Backup\mojabaza.bak” mojabaza_%DATE%.bak

 

W tym przykładzie sqlcmd zrzuci nam bazę do pliku mojabaza.bak , a następnie zostanie mu zmieniona nazwa na mojabaza_dzisiejszadata.bak

 

W przypadku posiadania wielu baz i częstego wykonywania się kopii na pewno zauważycie że miejsce przeznaczone na backup szybko się zapełnia .

 

Można temu zaradzić an kilka sposobów . Ja radzę sobie narzędziem FORFILES np.

 

deloldbakfiles.cmd

Forfiles -p ” D:\Microsoft SQL Server 2005 Express\MSSQL.1\MSSQL\Backup” -m *.bak -d -7 -c “CMD /C del @file”

Exit

 

Uruchamiając to narzędzie raz w na dwa tygodnie czyszczę katalog ze starych kopii – oczywiście wcześniej jeszcze przenoszę kopie na bezpieczny storage.

Link to postu
  • 2 lata później...

@slr

 

Wykonałem wszystkie czynności opisane przez Ciebie do wykonania backupu jednak mam problem z wywołaniem skryptu uruchamiającego  backup.  Poniżej treść utworzonych przeze mnie plików uruchamiających:

 

Backup_Sello_Allehandel.sql

 

BACKUP DATABASE [www_allehandel_pl__1_7_2_] TO  DISK = N'H:\Backup_SQL\Sello\www.allehandel.pl\backup_sello_allehandel.bak' WITH NOFORMAT, INIT,  NAME = N'www_allehandel_pl__1_7_2_-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO

 

 

Run_Backup.cmd

 

sqlcmd -S server -i Backup_Sello_Allehandel.sql

rename “H:\Backup_SQL\Sello\www.allehandel.pl\backup_sello_allehandel.bak” backup_sello_allehandel_%DATE%.bak

 

 

Uruchomienie pliku Run_Backup.cmd wyświetla następujący komunikat:

 

HResult 0x35, Level 16, State 1

Named Pipes Provider: Cloud can open a connection to SQL Server [53]

Sqlcmd: Error: Microsoft SQL Native Client: An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allowed remote connections...

Sqlcmd: Error:  Microsoft SQL Native Client: Login timeout expired.

 

 

Z powyższego komunikatu wynika że wystąpił błąd ustanowienia połączenia z serwerem i może to być spowodowane brakiem możliwości połączenia zdalnego.

 

W opcjach konfiguracji SQL Serwera mam ustawione zezwolenie na połączenia zdalne.

 

Prosze o sugestie odnośnie rozwiązania tego problemu.

 

Link to postu

Radzę sobie w b. podobny sposób i, szczerze pisząc, czegoś mi w wierszu uruchamiającym backup brakuje - a konkretnie informacji nt. logowania do serwera SQL.  Spróbuj dopisać do tego wiersza, jeśli używasz autoryzacji mieszanej dane użytkownika bazy, czyli

 

sqlcmd -U użytkownik -P hasło -S server -i Backup_Sello_Allehandel.sql

 

Jeśli korzystasz z autoryzacji Windows to zamiast tego musisz chyba zastosować opcję -E - ale to już zajrzyj do helpa od sqlcmd.  Nie korzystałem, więc nie znam.

Link to postu

Radzę sobie w b. podobny sposób i, szczerze pisząc, czegoś mi w wierszu uruchamiającym backup brakuje - a konkretnie informacji nt. logowania do serwera SQL.  Spróbuj dopisać do tego wiersza, jeśli używasz autoryzacji mieszanej dane użytkownika bazy, czyli

 

sqlcmd -U użytkownik -P hasło -S server -i Backup_Sello_Allehandel.sql

 

Jeśli korzystasz z autoryzacji Windows to zamiast tego musisz chyba zastosować opcję -E - ale to już zajrzyj do helpa od sqlcmd.  Nie korzystałem, więc nie znam.

 

Dzięki tadzimir. Dopisanie informacji o logowaniu, w moim przypadku autoryzacja windows -E  oraz ustawienie nazwy serwera pomogło (o tym też zapomniałem ;)). Wszystko działa jak należy. Poniżej prawidłowy kod:

 

sqlcmd -E -S localhost\insertgt -i Backup_Sello_Allehandel.sql

Link to postu
  • 2 lata później...

Być może obniżając priorytet procesu wykonującego backup - ale to na pewno kosztem czasu wykonywania backupu.  Zależy w jaki sposób korzystasz z komputera, na którym stoi baza - u mnie np. działa on 24h/dobę, więc mam ustawione robienie backupu codziennie w nocy i nie ma problemu.

Link to postu
A plusik gdzie? Mrugnięcie

Śledzisz swoje "pomóki" :)? W sumie to jeszcze 1 i będziesz miał więcej ode mnie :).

 

Co do zamulania, to najlepiej mieć komputer wyposażony w procesor dwurdzeniowy (co najmniej). Wtedy SQL Server wykonując backup nie będzie blokował pracy. Inna sytuacja gdy to dysk twardy stanowi problem, zwłaszcza w laptopach, gdzie dyski są relatywnie wolne.

Link to postu

RAID to zabezpieczenie przed utratą danych, nie system przyspieszający działanie dysku.  Nie korzystałem, ale przypuszczam, że jeśli to spowolni on operacje, a nie przyspieszy

 

Może lepiej przyjąć na forum zasadę: Nie znam się to się nie wypowiadam?

 

Ponawiam pytanie: Czy RAID 0 w odczuwalny sposób przyśpieszy działanie bazy danych?

Link to postu
  • 3 miesiące temu...

 

Ponawiam pytanie: Czy RAID 0 w odczuwalny sposób przyśpieszy działanie bazy danych?

 

Zwykle powinno tak się stać.

Oczywiście należy zainwestować w sprzętowy raid, dobrej firmy (Adaptec, LSI), bo programowe raidy dostępne na płytach głównych dość szybko się duszą przy operacjach bazodanowych, nie mówiąc o pożeraniu procesora.

Ewentualnie można na początek spróbować z dyskiem SSD, ale tutaj trzeba by poszukać odpowiedniego modelu do baz danych, gdyż zwykłe jak wiadomo osiągają marne wyniki w odczycie/zapisie dużych ilości małych porcji danych. Oczywiście trzeba też mieć na uwadze ograniczoną ilość operacji zapisu dla tego typu dysków, co przy bazach danych może szybko okazać się problemem.

 

Link to postu
  • 4 tygodnie później...

W zasadzie bardziej zaawansowany użytkownik może to wszystko osiągnąć sam, poprzez

https://forum.sello.pl/index.php?topic=1067.msg11332#msg11332

 

oraz plik bat, który trzeba samodzielnie wsadzić do Harmonogramu Zadań.

U mnie tak działa i nie muszę pamiętać o backupach.

Czas w nazwie pliku też można zapisać.

U mnie działa taki ciąg w pliku bat (pod windows 7)

SET HOUR=%time:~0,2%
SET dtStamp9=%date%-0%time:~1,1%_%time:~3,2%_%time:~6,2% 
SET dtStamp24=%date%-%time:~0,2%_%time:~3,2%_%time:~6,2%

if "%HOUR:~0,1%" == " " (SET dtStamp=%dtStamp9%) else (SET dtStamp=%dtStamp24%)

 

potem tylko wykorzystujemy zmienną %dtStamp% w nazwie np.:

sello_backup_%dtStamp%.bak

 

daje to wynik jak:

sello_backup_2014-01-06-20_31_13.bak

 

No i robiąc backupy samodzielnie mamy pełną dowolność - można od razu sobie to skompresować rarem czy 7zipem, wysłać ftpem czy wgrać na drugi dysk na wszelki wypadek.

 

 

Link to postu

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.
Uwaga: Twój wpis zanim będzie widoczny, będzie wymagał zatwierdzenia moderatora.

Użytkownik forum
Odpowiedz...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...