2009-05-19 13 views
34

क्या कोई जानता है कि बैच फ़ाइल में SQL सर्वर बैकअप को स्क्रिप्ट करने का कोई तरीका है या नहीं, ताकि इसे कमांड लाइन से निष्पादित किया जा सके? (एक .bat फ़ाइल में कॉपी-पेस्टएसक्यूएल सर्वर कमांड लाइन बैकअप स्टेटमेंट

+0

http://stackoverflow.com/questions/122690/what-is-a-simple-command-line-program-or-script -to-backup-sql-server-डेटाबेस –

उत्तर

51

यहाँ एक उदाहरण आप एक बैच स्क्रिप्ट के रूप में चला सकते हैं है), Sql सर्वर क्लाइंट उपकरण में SQLCMD सुविधा का उपयोग:

बैकअप:

echo off 
cls 
echo -- BACKUP DATABASE -- 
set /p DATABASENAME=Enter database name: 

:: filename format Name-Date (eg MyDatabase-2009.5.19.bak) 
set DATESTAMP=%DATE:~-4%.%DATE:~7,2%.%DATE:~4,2% 
set BACKUPFILENAME=%CD%\%DATABASENAME%-%DATESTAMP%.bak 
set SERVERNAME=your server name here 
echo. 

sqlcmd -E -S %SERVERNAME% -d master -Q "BACKUP DATABASE [%DATABASENAME%] TO DISK = N'%BACKUPFILENAME%' WITH INIT , NOUNLOAD , NAME = N'%DATABASENAME% backup', NOSKIP , STATS = 10, NOFORMAT" 
echo. 
pause 

पुनर्स्थापित:

echo off 
cls 
echo -- RESTORE DATABASE -- 
set /p BACKUPFILENAME=Enter backup file name:%CD%\ 
set /p DATABASENAME=Enter database name: 
set SERVERNAME=your server name here 
sqlcmd -E -S %SERVERNAME% -d master -Q "ALTER DATABASE [%DATABASENAME%] SET SINGLE_USER WITH ROLLBACK IMMEDIATE" 

:: WARNING - delete the database, suits me 
:: sqlcmd -E -S %SERVERNAME% -d master -Q "IF EXISTS (SELECT * FROM sysdatabases WHERE name=N'%DATABASENAME%') DROP DATABASE [%DATABASENAME%]" 
:: sqlcmd -E -S %SERVERNAME% -d master -Q "CREATE DATABASE [%DATABASENAME%]" 

:: restore 
sqlcmd -E -S %SERVERNAME% -d master -Q "RESTORE DATABASE [%DATABASENAME%] FROM DISK = N'%CD%\%BACKUPFILENAME%' WITH REPLACE" 

:: remap user/login (http://msdn.microsoft.com/en-us/library/ms174378.aspx) 
sqlcmd -E -S %SERVERNAME% -d %DATABASENAME% -Q "sp_change_users_login 'Update_One', 'login-name', 'user-name'" 
sqlcmd -E -S %SERVERNAME% -d master -Q "ALTER DATABASE [%DATABASENAME%] SET MULTI_USER" 
echo. 
pause 
+0

फ़ाइल से डेटाबेस को पुनर्स्थापित करने के बारे में कैसे? –

+0

इसके अलावा, मूल मैनुअल का संदर्भ जोड़ना बहुत ही अच्छा होगा। धन्यवाद! –

+0

@ हैमिश-ग्रुबिजन - मैंने –

2

यदि आप बैकअप शेड्यूल करने के लिए बैच फ़ाइल की जरूरत है, एसक्यूएल प्रबंधन उपकरण है अनुसूचित कार्यों में बनाया ...

+2

अन्य उत्तरों की तुलना में यह पर्याप्त जानकारीपूर्ण नहीं है। –

+0

क्या आप इस बारे में बात कर रहे हैं? "https://support.microsoft.com/en-us/kb/930615" –

1

मैं SQL सर्वर 2005 एक्सप्रेस का उपयोग कर रहा हूं, और मुझे विंडोज़ कमांड से बैकअप करने में सक्षम होने के लिए नामित पाइप्स कनेक्शन सक्षम करना था। मेरी अंतिम लिपि यह है:

@echo off 
set DB_NAME=Your_DB_Name 
set BK_FILE=D:\DB_Backups\%DB_NAME%.bak 
set DB_HOSTNAME=Your_DB_Hostname 
echo. 
echo. 
echo Backing up %DB_NAME% to %BK_FILE%... 
echo. 
echo. 
sqlcmd -E -S np:\\%DB_HOSTNAME%\pipe\MSSQL$SQLEXPRESS\sql\query -d master -Q "BACKUP DATABASE [%DB_NAME%] TO DISK = N'%BK_FILE%' WITH INIT , NOUNLOAD , NAME = N'%DB_NAME% backup', NOSKIP , STATS = 10, NOFORMAT" 
echo. 
echo Done! 
echo. 

यह ठीक काम कर रहा है !!

2

Seba Illingworth के कोड, मामले में आप अपने फ़ाइल का नाम समय की आवश्यकता है (यह देता है 2014-02-21_1035)

echo off 
cls 
echo -- BACKUP DATABASE -- 
set /p DATABASENAME=Enter database name: 
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b) 
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b) 

:: filename format Name-Date (eg MyDatabase-2009.5.19.bak) 
set DATESTAMP=%mydate%_%mytime% 
set BACKUPFILENAME=%CD%\%DATABASENAME%-%DATESTAMP%.bak 
set SERVERNAME=. 
echo. 

sqlcmd -E -S %SERVERNAME% -d master -Q "BACKUP DATABASE [%DATABASENAME%] TO DISK = N'%BACKUPFILENAME%' WITH INIT , NOUNLOAD , NAME = N'%DATABASENAME% backup', NOSKIP , STATS = 10, NOFORMAT" 
echo. 
pause 
0

ऊपर स्क्रिप्ट के साथ Remove Old Backup files कम्बाइन तो यह एक अनुसूचक द्वारा बैकअप प्रदर्शन कर सकते हैं, पिछले रखना 10 बैकअप फ़ाइलों

echo off 
:: set folder to save backup files ex. BACKUPPATH=c:\backup 
set BACKUPPATH=<<back up folder here>> 

:: set Sql Server location ex. set SERVERNAME=localhost\SQLEXPRESS 
set SERVERNAME=<<sql host here>> 

:: set Database name to backup 
set DATABASENAME=<<db name here>> 

:: filename format Name-Date (eg MyDatabase-2009-5-19_1700.bak) 
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b) 
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b) 

set DATESTAMP=%mydate%_%mytime% 
set BACKUPFILENAME=%BACKUPPATH%\%DATABASENAME%-%DATESTAMP%.bak 
echo. 

sqlcmd -E -S %SERVERNAME% -d master -Q "BACKUP DATABASE [%DATABASENAME%] TO DISK = N'%BACKUPFILENAME%' WITH INIT , NOUNLOAD , NAME = N'%DATABASENAME% backup', NOSKIP , STATS = 10, NOFORMAT" 
echo. 

:: In this case, we are choosing to keep the most recent 10 files 
:: Also, the files we are looking for have a 'bak' extension 
for /f "skip=10 delims=" %%F in ('dir %BACKUPPATH%\*.bak /s/b/o-d/a-d') do del "%%F" 
2

आप बैकअप, या किसी अन्य T-SQL स्क्रिप्ट चलाने के लिए sqlcmd उपयोग कर सकते हैं। आप इस आलेख में विभिन्न उपयोगी sqlcmd स्विच पर विस्तृत निर्देश और उदाहरण पा सकते हैं: Working with the SQL Server command line (sqlcmd)

संबंधित मुद्दे