Problem z archiwizacją bazy MSSQL


(Sztamblewski) #1

MS SQL 2014 express

Windows Serwer 2012 Essentials

 

Mam na serwerze firmową bazę danych, w konfiguracji bazy mam wskazany katalog E:\SqlBackup, w harmonogramie skonfigurowaną kopię zapasową i wszystko ładnie działa ale robienie kopii na tym samym serwerze trochę mija się z celem. Mam obok serwer plików na jakimś linuxie,udostępniony zasób i chciałbym aby właśnie tam się tworzyły kopie bazy danych ale nie potrafię tego zrobić. Archiwizacją zajmuje się program od WAPRO - Archiwizator. Kiedy podaję mu ścieżkę \ip\katalog to mam komunikat że plik juz istnieje, klikam dalej i mam komunikat, że nie może usunąć pliku. Jak mapuje jako dysk lokalny to wciąż to samo. Ktoś coś może doradzić? Problem może być w uprawnieniach do serwera plików?


(djgrzenio) #2

Machaj ten E:\sqlbackup rsynkiem dla wingrozy na linuxa. cos dla przykladu

 

forfiles /p “b:” /s /m *.* /d -5 /c “cmd /c del @path


(mrcn.s) #3

Rozumiem, że przy “normalnym” kopiowaniu do zasobu nie ma problemu z uprawnieniami? Jeżeli tak, to najprościej dodaj sobie w harmonogramie po wykonaniu kopii zapasowej przez archiwizator Wapro  kopiowanie utworzonego pliku z archiwum na zasób sieciowy jakimś plikiem wsadowym. Sugeruję użycie zamiast zwykłego copy xcopy lub robocopy (to wbudowane narzędzia Windowsa). Jak byś potrzebował szczegółowych instrukcji jak to zrobić, to daj znać.

 

Pozdrawiam,

Marcin


(Sztamblewski) #4

zainstalowałem cobiana i wszystko ładnie śmiga ale to jednak kolejny proces w pamięci i poczytam o tym xcopy…


(mrcn.s) #5

Korzystam z Cobiana od wielu lat u wielu klientów. Polecam, nigdy z nim nie maiłem większych problemów. Wg mnie powinieneś odpuścić ten archiwizator Wapro i sobie robić backup bazy z poziomu SQL-a. Wystarczy krótki skrypt. Jak będziesz chciał to Ci mogę jakiś podesłać.

Pozdrawiam,

Marcin


(Sztamblewski) #6

to ja poproszę ten skrypt, będzie działał na wersji express?


(pan_jez) #7

Express nie ma SQL Agent’a, który pozwala definiować zadania z wykorzystaniem “wewnętrznego harmonogramu zadań” serwera SQL. Możesz to rozwiązać tworząc dwa skrypty - jeden wykonujący dump bazy do pliku i wykonywany po stronie serwera bazy (nazwany na przykład backup_bazy.sql:

BACKUP DATABASE [NAZWA_BAZY] TO DISK = N'E:\baza.BAK' WITH NOFORMAT, NOINIT, NAME = N'Backup bazy jakiejstam', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO

Drugi natomiast to zwykły plik wsadowy uruchamiany z wykorzystaniem Windowsowego harmonogramu zadań, który wywołuje program sqlcmd z odpowiednimi parametrami i wyglądać moze tak:

SQLCMD.EXE -S SERWER\NAZWA_INSTANCJI -E -i C:\backup_bazy.sql


(Sztamblewski) #8

Działa pięknie, dzieki!

BACKUP DATABASE FK TO DISK = N'D:\baza.BAK' WITH NOFORMAT, NOINIT, NAME = N'Backup bazy FK', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO

oraz batch:

@ECHO OFF
SET dt=%date:~0,13%
ECHO ## Tworze archiwum...
"C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\SQLCMD.exe" -i C:\archiwasql\backup.sql
ECHO ## Kompresuje...
"c:\Program Files\7-Zip\7z.exe" a "d:\fk_%dt%.7z" "d:\baza.BAK"
ECHO ## Kopiuję archiwum na dysk sieciowy...
xcopy d:\fk_%dt%.7z \\192.168.1.2\sql\
ECHO ## Usuwam pliki tymczasowe...
del /f "d:\baza.BAK"
del /f "d:\fk_%dt%.7z"
ECHO ## Gotowe!
:END

Mam jeszcze pytania:


(mrcn.s) #9

Jak ta baza nie jest jakaś gigantyczna, to lepiej zostaw sobie więcej kopii. Jeść przecież nie wołają. Jak się okaże, że trzeba przywrócić coś starszego, to sobie tylko zaplusujesz u księgowej, a wiadomo, że księgowa to najważniejsza osoba w firmie ;)  Co więcej, ja bym zostawiał kopię i na hoscie z SQLServerem i na serwerze plików do backupu.  

Ja bym na twoim miejscu sprawdził co jakiś czas, czy się przywraca baza. Postaw sobie SQL Expressa na jakiejś innej maszynie, albo na czymś wirtualnym i przywróć. Warto przećwiczyć, żeby oszczędzić sobie nerwów jak zajdzie konieczność przywrócenia. 

Jeżeli jesteś pewny, że w godzinach nocnych nikt na bazie nie pracuje, to można jeszcze zrobić backup bez skryptu. Po prostu zatrzymujesz usługę mssqlserver i kopiujesz plik z bazą (mdf i ldf). 

Cobiana polecam wtedy, gdy robisz backup u kogoś, gdzie Cię nie ma na codzień, bo dobrze działa wysyłanie logów na maila. Jak by coś się nie udało skopiować, to od razu się dowiesz. Wiadomo, czasami jest się na wakacjach i nie chce się zaglądać, czy oby backup na pewno się zrobił. Kilka razy mi to  d.upę uratowało.

Pozdrawiam,

Marcin


(Sztamblewski) #10

Nie wiem czy duża, ponad 200mb surowa i jakieś 50 spakowana 7zip’em. I tak trzymam dane z backupu na dwóch maszynach i wciąż korzystam z archiwizatora wapro. Nie wpadłem natomiast na to, że można tak po prostu zgrać dwa pliczki bazy danych. Jeśli postawię świeży sql express na innym kompie i na żywca przekopiuję te dwa pliki do katalogu baz danych to normalnie zobaczę tą bazę po restarcie MS SQL?


(mrcn.s) #11

Kopiujesz i robisz attach w SQL Management Studio. 200mb to bardzo mała baza. Jak trzymasz na 2 maszynach to teoretycznie wystarcza, choć warto, żeby jedna kopia, chociaż raz na jakiś czas, np. na jakimś flashu była wynoszona do innej lokalizacji. Jak będzie pożar i wszystko pójdzie z dymem to warto mieć jakiekolwiek dane do przywrócenia. Większość biur księgowych jakie obsługuję mają raz na jakiś czas robiony backup na dysku zewnętrznym i trzymają go sobie w sejfie poza biurem. 

Pozdrawiam,

Marcin


(Sztamblewski) #12

spoko, wszystko działa jak należy, z kopiami nie będę przesadzał. ważne, że w ogóle jakieś są. dzieki za pomoc.


(klonek_wp) #13

(Sztamblewski) #14

Dzięki za pomoc, tak właśnie robię i archiwizuję wszystkie bazy danych. A z tą licencją miałem sporo problemów