BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki
krzysiek_be
krzysiek_be

 
0


Witam!
Jak można robić cykliczne kopie baz danych w SQL Server 2005 EE? SQL Server Management Studio Express pozwala zrobić kopię, ale nie ma opcji Schedule...

Może ktoś wie jak to obejść?
Pozdr.
Krzysiek





Piotr Wargin
Piotr Wargin
128 pkt.
Junior
 
0


sam server nie ma Job Agenta, ale Windows nadal ma task schedulera...
http://msdn2.microsoft.com/en-us/library/ms186865.aspx --
Piotr Wargin

--
Piotr Wargin
Paweł Potasiński Microsoft
Paweł Potasiński
7713 pkt.
Guru
 
0


Windowsowy Task Scheduler uruchamiający narzędzie SQLCMD, które wykonuje określony skrypt SQL? --
Pozdrawiam
Paweł Potasiński

Visit my homepage
Visit my blog

Pozdrawiam,
Paweł Potasiński

hubis
hubis
79 pkt.
Poczatkujacy
 
0


A skąd wziąć składniię takiego skryptu?

tobjasz
tobjasz
61 pkt.
Poczatkujacy
 
0


http://support.microsoft.com/kb/325003

Paweł Potasiński Microsoft
Paweł Potasiński
7713 pkt.
Guru
 
0


Trzeba sobie napisać :-) Na przykład:


DECLARE @stmt nvarchar(max)
DECLARE @db sysname
DECLARE @date smalldatetime
DECLARE @path nvarchar(255)
SET @db = $(database)
SET @path = N'C:\'
SELECT @date = CONVERT(nchar(8),GETDATE(),112)
SET @stmt = N'BACKUP DATABASE ' + @db + ' TO DISK = ''' + @path + @db + @date + N'.bak'''


Powyższy kod zapisany w skrypcie o rozszerzeniu .sql pozwoli Ci zapisać full backup dowolnej bazy na dysku C w pliku o nazwie BazaRRRRMMDD.bak (czyli nazwa bazy i data).

Musisz teraz dorobić do skryptu plik wsadowy (.bat lub .cmd) o treści:

SQLCMD -S localhost\SQLEXPRESS -v database="TwojaFajnaBaza" -i skrypt.sql

I ten plik wsadowy ustawiasz w Task Schedulerze w harmonogramie. Oczywiście podmień moją nazwę bazy na swoją własną :-)

--
Pozdrawiam
Paweł Potasiński

Visit my homepage
Visit my blog

Edytowano 1 raz. Ostatnio 2007-04-12 15:38:01 przez C3PO.

Pozdrawiam,
Paweł Potasiński

krzysiek_be
krzysiek_be
 
0


Tylko, że u mnie oczywiście nie działa :(
Tzn. gdy wykonuję polecenie SQLCMD -S localhost\SQLEXPRESS -v database='CERBER' -i skrypt.sql z linii poleceń to nic się nie dzieje, od razu przeskakuje znowu do linii poleceń, a w katalogu, w którym miała powstać kopia bazy danych nie ma nic. Co może być przyczyną? Może brak jakichś uprawnień? Jak to sprawdzić?

Pozdr.
Krzysztof Szczotka

Paweł Potasiński Microsoft
Paweł Potasiński
7713 pkt.
Guru
 
0


Start - Uruchom... - cmd, a dopiero potem SQLCMD... To Ci pozwoli przeczytać komunikaty błędów. --
Pozdrawiam
Paweł Potasiński

Visit my homepage
Visit my blog

Pozdrawiam,
Paweł Potasiński

Paweł Potasiński Microsoft
Paweł Potasiński
7713 pkt.
Guru
 
0


Wybacz, mój błąd :-) Skrypt był niekompletny i zawierał jeden błąd (błędny typ danych).

Po poprawkach:


DECLARE @stmt nvarchar(max)
DECLARE @db sysname
DECLARE @date nchar(8)
DECLARE @path nvarchar(255)
SET @db = '$(database)'
SET @path = N'C:\'
SELECT @date = CONVERT(nchar(8),GETDATE(),112)
SET @stmt = N'BACKUP DATABASE ' + @db + ' TO DISK = ''' + @path + @db + @date + N'.bak'''
EXEC(@stmt)


PS. Jak będzie zwracał błąd, to zmień ścieżkę w zmiennej @path (np. na C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\).

--
Pozdrawiam
Paweł Potasiński

Visit my homepage
Visit my blog

Edytowano 3 razy. Ostatnio 2007-04-13 13:49:47 przez C3PO.

Pozdrawiam,
Paweł Potasiński

Kl3ryK
Kl3ryK
139 pkt.
Junior
 
0


A jak potem coś takiego z powrotem zaimportować z tego pliku do bazy ?

Grzegorz R
Grzegorz R
140 pkt.
Junior
 
0


;) nie zaimportować tylko zrestorować (odtworzyć) bazę.
I tu jest o tyle prościej, że zrobisz to za pomocą Management Studio - oczywiście starzy wyjadacze skrytykują takie stwierdzenie :) ale nie ulega wątpliwości, że dla mniej wprawnych jest to prostsze i nie trzeba pisać.
Tak na szybko: Object Explorer -> Databases -> Prawy Klawisz -> Restore -> Pokazać ten plik i poczytać co tam jest napisane ;) i OK - bazka się odtworzy.
pzdr
grzechoo

Paweł Potasiński Microsoft
Paweł Potasiński
7713 pkt.
Guru
 
0


oczywiście starzy wyjadacze skrytykują takie stwierdzenie :)

Słuszne obawy, zdecydowanie należy preferować składnię T-SQL, ale z interfejsem za pan brat być też należy (idealnie, jak potrafisz powiedzieć, który checkbox odpowiada jakiej opcji w poleceniu T-SQL) ;-) --
Pozdrawiam
Paweł Potasiński

Visit my homepage
Visit my blog

Pozdrawiam,
Paweł Potasiński

Radosław Kępa Ekspert WSS
Radosław Kępa
2903 pkt.
Guru
 
0


zdecydowanie należy preferować składnię T-SQL

Pawel chyba przesadzasz z tym zdecydowanie :) Bozia kwiatki stworzyla do ogladania i wachania a MS SSMS to klikania. Moim zdaniem: co szybsze i wygodniejsze to lepsze. OK rozumie na pewno klepiac tsqla nauszysz sie wiecej niz klikajac, ale niestety praca i wieczny brak czasu rewiduje to wszystko i w wiekszosci wypadkow wygrywa myszka ,a tsql zostaje tam gdzie SSMS nie daje rady.

Temat GUI versus cmd narodzil sie dawno temu i spory o to juz sa moim zdaniem troche nie na czasie. Pisze spory bu spotkalem juz kilka razy slepych wyznawcow-hardcorowcow wszelakich interfejsow tekstowych, ktorzy odrzucali notorycznie wszelakie argumenty za GUI). I tak wszyscy skazani jestesmy na matrix ;)

__________________________
Radosław Kępa
radek@kempes.com.pl
gg: 2335076

Edytowano 2 razy. Ostatnio 2007-04-18 00:08:17 przez radek_kepa.

__________________________

Radosław Kępa : radek@radekkepa.com

Grzegorz  Łyszkowski
Grzegorz Łyszkowski
431 pkt.
Junior
 
0


Super skrypcik, ale gdyby było taka możliwość to czy można go rozszerzyć o log wykonania zadania wysyłany na maila (z tematem od razu informującym czy Backup Database successfully czy error/failed)? Chodzi mi o wpis taki jak pojawia się w Event Viewer\Applications:

Event Type: Information
Event Source: MSSQLSERVER
Event Category: (6)
Event ID: 18264
Date: 5/26/2008
Time: 12:49:59 PM
User:
Computer:
Description:
Database backed up. Database: Production, creation date(time): 2008/01/16(15:35:12), pages dumped: 245700, first LSN: 10948:76375:41, last LSN: 10948:76393:1, number of dump devices: 1, device information: (FILE=1, TYPE=DISK: {'H:\JozinzBazin20080526.bak'}). This is an informational message only. No user action is required.

Gdyby ta treść znajdowała się w mailu to nie musiałbym logować się do serva i patrzeć w log ;)


Niestety mam SQL'a na Win2K3. Pod Vistą można sprawę załatwić poprzez Attach Task To This Event... i Sent an email ;)

Kiedyś widziałem skrypt przy pomocy, którego można to zrobić. No nic pokombinuję.

A może ktoś ma gotowca? ;) ___________________
Pozdrawiam
Grzegorz Łyszkowski

MCTS Vista Configuring

danmc
danmc
1259 pkt.
Senior
 
0


Nie będzie to bezpośrednie rozwiązanie Twojego problemu ale wiem w jaki sposób można to osiągnąć (nie będzie to też takie proste jak pod vista).

Potrzebujesz trzech rzeczy:

1. Serwer smtp - najlepiej anonimowy, z IIS spokojnie wystarczy
2. blat - klient smtp
3. dumpel - przeszukuje logi systemowe

Trzeba pokombinować z xp_cmdshell, dumpelem przeszukasz wszystkie zdarzenia generowane przez MSSQLSERVER zapiszesz do pliku, później przeszukasz (findstr) czy są jakieś z błędem (można ograniczyć co ile dni wstecz). Jeżeli znajdzie (zmienne systemowa errorlevel 0) to wysyłasz ten plik blatem.

To tak w uproszczeniu... może istniej prostszy sposób

--
Pozdrawiam

Pozdrawiam

Grzegorz  Łyszkowski
Grzegorz Łyszkowski
431 pkt.
Junior
 
0


Dziękuję za namiary :)

Mam SMTP, Blat także, pozostaje tylko przyjrzeć się dumpelowi :)

Wystarczy, że treść komunikatu z Event'u będzie znajdowała się w treści maila i to mi spokojnie wystarczy ;) ___________________
Pozdrawiam
Grzegorz Łyszkowski

MCTS Vista Configuring

persh
persh
6 pkt.
Nowicjusz
 
0


Dzieki tego szukałem właśnie :)

persh
persh
6 pkt.
Nowicjusz
 
0


Wszystko dziala fajnie ale ma taka glupia sprawe, musi byc tego jakies proste rozwiazanie. Ta baza ktora mnie interesuje ma znak "-" w nazwie.
Zmiana nazwy nie wchodzi w gre...

Msg 102, Level 15, State 1, Server SQL\TEST, Line 1
Incorrect syntax near '-'.

Jak nie kapuje jak sie bierze w ciapki: 'nazwa-nazwa', moze to jakos inaczej ująć?
Jakaś alergia na myślniki??

Ziemek Borowski
Ziemek Borowski
 
0


[nazwa-nazwa] ?

-- Ziemek Borowski / ziembor.pl/plitproblogs  / PEPUG - a poza tym uważam, że WSS.pl powinien z forum (nawet od nowa) przeniesiony na social.technet.microsoft.com, a baza wiedzy (tam gdzie regulamin pozwala) na tamtejsze wiki. 

persh
persh
6 pkt.
Nowicjusz
 
0


'[nazwa-nazwa]' teraz łyknęło ;)

marekpiotrow
marekpiotrow
61 pkt.
Poczatkujacy
 
0


Pozwolę sie podpiąć pod temat.

Piszesz, że trzeba napisac skrypt .bat lub cmd...

Napisalem taki skrypt i wszytsko dziala jak ręcznie skopiuje go do CMDi uruchomie. Ale jak poprostu klikne na niego x2 to tylko mignie czarne okno i nic się nie dzieje. Jaka może być tego przyczyna??

Paweł Potasiński Microsoft
Paweł Potasiński
7713 pkt.
Guru
 
0


Dopisz na końcu pliku .bat lub .cmd linijkę:

pause

i dowiesz się więcej :-) --
Pozdrawiam
Paweł Potasiński

[ PLSSUG ] | [ mój blog ]

Pozdrawiam,
Paweł Potasiński

marekpiotrow
marekpiotrow
61 pkt.
Poczatkujacy
 
0


Dopisałem... i nic to nie dało. Tak samo, okienko cmd otwiera sie na ułamek sekundy i znika...

Ziemek Borowski
Ziemek Borowski
 
0


niemożliwe.
pause na pewno jest w ostatniej linijce? i nie ma w tej linijce nic więcej. Pozdrawiam,

Ziemek

-- Ziemek Borowski / ziembor.pl/plitproblogs  / PEPUG - a poza tym uważam, że WSS.pl powinien z forum (nawet od nowa) przeniesiony na social.technet.microsoft.com, a baza wiedzy (tam gdzie regulamin pozwala) na tamtejsze wiki. 

marekpiotrow
marekpiotrow
61 pkt.
Poczatkujacy
 
0




SQLCMD -S SQLSERVER -v database="TEST" -i skrypt.sql

pause



Tak on wygląda. Zapisany jako skrypt.bat

Ja jego zawartość ręcznie wkleję do CMD, to wszystko działa jak należy.

Krzysztof Stachyra Ekspert WSS
Krzysztof Stachyra
1577 pkt.
Guru
 
0


a może by tak do tego skrypt.sql podać konkretną ścieżkę bo inaczej to jest wyszukiwany bieżący katalog nie wiemy czy tam masz ten plik Pozdrawiam,
Krzysiek Stachyra

Pozdrawiam,

Krzysiek Stachyra

PLSSUG

marekpiotrow
marekpiotrow
61 pkt.
Poczatkujacy
 
0


Tak, mam w tym samym katalogu. Ale dopisałem do skryptu całą ścieżkę, ale niestety to nic nie pomogło.

Radosław Kępa Ekspert WSS
Radosław Kępa
2903 pkt.
Guru
 
0


przekieruj wynik tesktu do pliku i zobacz co sie dzieje.
batch.bat > log.txt __________________________
Radosław Kępa
radek@kempes.com.pl

__________________________

Radosław Kępa : radek@radekkepa.com

Rogo
Rogo
9 pkt.
Nowicjusz
 
0


Temat z przed paru lat ale mam nadzieję że ktoś tu zagląda z mądrych głów ;] jak zrobić aby do nazwy dodawany był czas, w postaci takiej jak teraz w skrypcie sql nadgrywa mi backup jeden na drugi w ciągu tego samego dnia, moim marzeniem jest aby do nazwy dodawał jeszcze czas w którym ten backup wykonuje ;] czy jest to wykonalne ?????

 


karolas
karolas
69 pkt.
Poczatkujacy
 
0


declare @sciezka varchar(200)
set @sciezka = (select '\\test\' +  + replace(replace(convert(varchar(20),getdate(),120),'-',''),':','') + '.bak')

backup database [bazadanych] to disk = @sciezka


Iwiwiwi
Iwiwiwi
0 pkt.
Nowicjusz
 
0


a ja jeszcze chciałam zrobić tak, żeby mi nadpisywał wcześniejszy plik backup'u.

 

I tutaj może się okazać zonk, bo może się zdarzyć tak, że nie stworzy mi pliku backup'u (bo wystąpi jakiś błąd, tworzy się wtedy plik .bak o wadze 1 KB ^.^), a usunie mi wcześniejszy plik i w razie czego zostaję z niczym.

Kombinowałam dać ifa, który przechodziłby na koniec batch'a, ale wtedy w ogóle robi jakieś cuda i dziwy, których nie pojmuję :)

 

Robiłam tak (piszę skrótami):

 

składnia isql z backup'em

 

if exist plik_data.bak del D:\Backup\plik_*.zip (wcześniejszy spakowany .bak) else goto KONIEC

 

kompresja pliku .bak do .zip

 

:KONIEC

del plik_Data.bak

 

nooo... i głupoty mi wychodziły, tzn. niby się nadpisywał, ale .bak mi zostawał. Myślicie że muszę po kompresji dać "goto KONIEC"?


y3k
y3k
323 pkt.
Junior
y3k
 
0


Do warunkowego usuwania plików ze starym backupem, jeśli ich rozmiar jest powyżej jakiegoś określonego, jeśli są starsze niż i dowolne inne warunki polecam powershella. W moim przypadku, sprawdziło się wykonywanie poleceń PS z pomocą xp_cmdshell, ale równie dobrze możesz go wykonywać poza skryptem sql jeśli np. ze względów bezpieczeństwa masz zablokowane xp_cmdshell


Iwiwiwi
Iwiwiwi
0 pkt.
Nowicjusz
 
0


Udało się mi zrobić to w ten sposób:

(bazowałam na kodzie znalezionym na stronie http://czarczarek.blogspot.com/2009/10/backup-bazy-przy-pomocy-narzedzia-osql.html)

 

@echo off
@cls
REM ***************************************************
REM *              DANE DO USTAWIENIA                 *
REM ***************************************************

REM *** ŚCIEŻKA DOCELOWA BACKUP'U (ze slashem na końcu) ***
@set Dir=D:\Backup\

REM *** NAZWA BAZY DANYCH (tak jak w SQL Server) ***
@set DbName=NazwaBazyDanych

REM *** DANE SERWERA\INSTANCJI ***
@set SrvName=Srv\Inst
@set UserName=NazwaUsera
@set UserPass=HasloDoSerwera

REM *** DANE DO 7ZIP'A ***
@set ZipDir="C:\Program Files\7-Zip\7z.exe"
@set ZipFormat=zip
@set ZipPass=haslo

REM ***************************************************
REM *              WŁAŚCIWY KOD BATCH'A               *
REM ***************************************************

@set Now=%Time: =0%
@set DateTime=%date:~0,4%%date:~5,2%%date:~8,2%_%Now:~0,2%%Now:~3,2%%Now:~6,2%

@set BackupFile=%DbName%_%DateTime%.bak
@set BackupPath=%Dir%%BackupFile%

@set ZipFile=%DbName%_%DateTime%.zip
@set ZipPath=%Dir%%ZipFile%

REM kod backup'owy
REM -S nazwaSerwera\Instancji -U nazwaUżytkownika -P hasłoUżytkownika
isql -S %SrvName% -U %UserName% -P %UserPass% -d %DbName% -Q "BACKUP DATABASE %DbName% TO DISK = '%BackupPath%' WITH FORMAT"
REM gdyby isql (2000) się wysypywał, użyć sqlcmd (2008) lub osql (2005)

REM jeżeli nie udało się utworzyć plików backup'u, to nie będzie usuwał wcześniejszego pliku
REM dzięki temu zawsze będzie jakiś plik backup'u
IF NOT EXIST %BackupPath% goto KONIEC  

REM usunięcie wcześniejszego pliku backup'u
DEL %Dir%%DbName%*.zip

REM kompresja 7zipem
REM "ścieżka\do\programu\7z.exe" -tFORMAT -pHASŁO do paczki (tam nie ma spacji po -t i -p)
%ZipDir% a -t%ZipFormat% %ZipPath% %BackupPath% -p%ZipPass%

DEL %BackupPath%

:KONIEC

 

 

Działa poprawnie w przypadku gdy nie ma połączenia do bazy ^,^

To czy tworzy plik o wadze 1 KB, to już wina osoby, która zmienia dane :D

Chyba że się mylę, ktoś mnie wyprowadzi z błędu?


Edytowano 2 razy. Ostatnio 2012-09-04 11:07:28 przez Iwiwiwi.

Udziel odpowiedzi

pkt.
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.