If-Koubou

Batch Script pentru a copia toate bazele de date SQL Server

Batch Script pentru a copia toate bazele de date SQL Server (Cum să)

Am acoperit deja modul de rezervare a unei baze de date SQL Server din linia de comandă, deci dacă doriți să efectuați o copie de rezervă a tuturor bazelor de date simultan? S-ar putea crea un script batch care rulează comanda de backup pentru fiecare bază de date, dar acest script ar trebui să fie actualizat de fiecare dată când o bază de date este adăugată sau eliminată. În plus, copii de siguranță ale bazei de date vor fi atașate la un fișier care va crește de mărimea noului copier de siguranță de fiecare dată când este rulat. În schimb, în ​​modul "setați-l și uitați", vom crea un script batch care se va adapta la serverul dvs. SQL, pe măsură ce se adaugă și se elimină noi baze de date.

Pentru a ajunge la un punct, acesta este scriptul de backup:

@CHO OFF
setlocal

REM Obțineți data în format YYYY-MM-DD (presupune că localizarea este în Statele Unite)
FORT / F "= 1,2,3,4 delims = /" %% A IN ('Date / T') DO SET AcumData = %% D - %% B - %% C

REM Creați o listă de baze de date pentru copierea de rezervă
SET DBList =% SystemDrive% SQLDBList.txt
SqlCmd -E -S MyServer -h-1 -W -Q "SET NoCount ON; SELECT Numele din master.dbo.sysDatabase WHERE [Nume] NOT IN ('master', 'model', 'msdb', 'tempdb') ">"% DBList%

REM Backup fiecare bază de date, prepending data la numele fișierului
FORF / F "(*)"%% I IN (% DBList%) DO (
ECHO Baza de date de rezervă: %% I
SqlCmd -E -S MyServer -Q "BACKUP DATABASE [%% I] Pentru a Disk =" D: Backup% NowDate% _ %% I.bak ""
ECOU.
)

REM Curățați fișierul temp
DACĂ EXISTĂ "% DBList%" DEL / F / Q "% DBList%"

ENDLOCAL

Presupunând că data este 1/13/2009 și aveți 3 baze de date numite "MyDB", "AnotherDB" și "DB Name with Spaces", scriptul va produce 3 fișiere în locația de backup specificată:

  • 2009-01-13_AnotherDB.bak
  • 2009-01-13_DB Nume cu Spaces.bak
  • 2009-01-13_MyDB.bak

Personalizarea și executarea scriptului de lot

Desigur, veți dori să personalizați scenariul pentru mediul dvs., astfel că aici este ceea ce trebuie să faceți:

  • Dacă locația mașinii dvs. nu este setată în SUA, comanda "Date / T" nu poate returna data în formatul "Tue 01/13/2009". În acest caz, variabila NowDate nu va produce formatul dorit și ar trebui să fie ajustată. (1 loc)
  • Modificați "MyServer" ca fiind numele serverului dvs. SQL (adăugați numele instanței, dacă este cazul). (2 locuri)
  • Bazele de date numite "master", "model", "msdb" și "tempdb" sunt bazele de date livrate cu SQL Server. Puteți adăuga nume suplimentare de bază de date la această listă dacă nu doriți ca acestea să fie salvate. (1 loc)
  • Modificați locația de rezervă de la "D: Backup" la locația în care doriți să fie stocate fișierele de rezervă de bază de date.

Odată ce ați personalizat scriptul de lot, programați-l să ruleze prin Windows Task Scheduler ca un utilizator cu drepturi de administrator și sunteți cu toții setați.