Pagina principala » HOWTO » Batch Script pentru a copia toate bazele de date SQL Server

    Batch Script pentru a copia toate bazele de date SQL Server

    Am acoperit deja modul de copiere de rezervă 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, backup-urile bazei de date vor fi atașate la un fișier care va crește de mărimea noului copier de rezervă 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 punct, acesta este scriptul de backup:

    @CHO OFF
    setlocal

    REM Data data in format YYYY-MM-DD (presupune ca localizarea este in Statele Unite)
    FORET / F "= 1,2,3,4 delims = /" %% A IN ('Date / T') DO SET NowDate = %% 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 "jetoane = *" %% 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 rularea 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 în această listă dacă nu doriți ca acestea să fie salvate. (1 loc)
    • Modificați locația de salvare de rezervă din "D: Backup" la locația în care doriți să fie stocate fișierele de rezervă de bază de date.

    După 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.