Introduction
Taking regular database backups is an important task for server administrators. In Windows servers running Microsoft SQL Server, we can use a batch script with the sqlcmd utility to back up all user-created MSSQL databases.
This script helps automate the backup process by listing all databases except system databases and creating .bak files in a date-wise backup folder.
Prerequisites
Before running the script, make sure the following requirements are met:
- Windows server with Microsoft SQL Server installed.
sqlcmdutility should be installed and accessible from Command Prompt.- SQL Server instance name should be known, for example:
.\SQLEXPRESS
- A valid SQL user account with backup permission should be available.
- Backup drive or folder should have enough free disk space.
- The backup destination folder should exist or be created by the script.
- Avoid using the
saaccount unless required. It is recommended to use a dedicated SQL backup user with limited permissions.
Batch Script
Open Notepad and paste the below script.
@ECHO OFF
SETLOCAL
REM MSSQL Database Backup Script
REM This script will backup all user-created databases
REM Set date format
for /F "tokens=2-4 delims=/ " %%A in ('Date /T') DO SET NowDate=%%A-%%B-%%C
REM SQL Server details
SET SQL_INSTANCE=.\SQLEXPRESS
SET SQL_USER=sa
SET SQL_PASS=YourPasswordHere
REM Backup location
SET BACKUP_PATH=D:\Backup
SET DBList=%SystemDrive%\SQLDBList.txt
ECHO Backup Date: %NowDate%
REM Create backup directory
IF NOT EXIST "%BACKUP_PATH%\%NowDate%" mkdir "%BACKUP_PATH%\%NowDate%"
REM Get list of user databases
sqlcmd -S "%SQL_INSTANCE%" -U "%SQL_USER%" -P "%SQL_PASS%" -h -1 -W -Q "SET NOCOUNT ON; SELECT name FROM master.dbo.sysdatabases WHERE name NOT IN ('master','model','msdb','tempdb')" > "%DBList%"
REM Backup each database
FOR /F "usebackq tokens=* delims=" %%I IN ("%DBList%") DO (
IF NOT "%%I"=="" (
ECHO Backing up database: %%I
sqlcmd -S "%SQL_INSTANCE%" -U "%SQL_USER%" -P "%SQL_PASS%" -Q "BACKUP DATABASE [%%I] TO DISK='%BACKUP_PATH%\%NowDate%\%%I.bak' WITH INIT, COMPRESSION"
ECHO Backup completed for: %%I
ECHO.
)
)
REM Remove temporary database list file
IF EXIST "%DBList%" DEL /F /Q "%DBList%"
ECHO All database backups completed.
ENDLOCAL
Steps to Run the Script
Step 1: Open Notepad
Open Notepad on the Windows server.
Step 2: Paste the Script
Copy and paste the above batch script into Notepad.
Step 3: Update SQL Details
Update the below values based on your server:
SET SQL_INSTANCE=.\SQLEXPRESS SET SQL_USER=sa SET SQL_PASS=YourPasswordHere
Example:
SET SQL_INSTANCE=.\SQLEXPRESS SET SQL_USER=backupuser SET SQL_PASS=StrongPassword
Step 4: Update Backup Path
Update the backup location if required.
SET BACKUP_PATH=D:\Backup
The backup files will be stored inside a date-wise folder like:
D:\Backup\04-13-2012
Step 5: Save the File
Save the file with .bat extension.
Example:
backup.bat
Make sure the file type is selected as All Files while saving.
Step 6: Run the Script
Right-click the backup.bat file and select Run as Administrator.
The script will list all user-created MSSQL databases and generate backup files in the backup folder.
Backup Output
After the script runs successfully, the backup files will be stored in the following format:
D:\Backup\DATE\DatabaseName.bak
Example:
D:\Backup\04-13-2012\mydatabase.bak
Important Notes
- Do not store SQL passwords in plain text on shared servers.
- Use a dedicated SQL backup user instead of the
saaccount whenever possible. - Make sure the backup folder has enough disk space.
- Test the backup file by restoring it on a test server.
- Schedule the script using Windows Task Scheduler for automatic daily or weekly backups.
- Store an additional copy of the backup in another location for disaster recovery.
Conclusion
Using a batch script is a simple and effective way to take backups of all MSSQL databases on a Windows server. The script automatically collects the list of user databases, creates a date-wise backup folder, and stores each database as a .bak file.
Regular database backups help protect business-critical data and make it easier to recover from accidental deletion, database corruption, or server failure.
Thank you for every other informative blog.