How to Automate the Backup of a SQL Server 2005 Express Data Store

I recently built a Presentation Server 4.5

I recently built a Presentation Server 4.5 (PS 4.5) farm where the decision was made to use a SQL Server 2005 Express database as the IMA data store. When it came time to create an automated backup of the data store, I soon realized the process was not at simple as creating a SQL job in a friendly GUI as with a full-blown SQL Server install, or running DSMAINT BACKUP. This article describes how automate the backup a SQL Server Express data store without having to purchase a third-party tool or without having to learn SQL programming. That said, this document is intended for the non-SQL savvy administrator unfamiliar with creating T-SQL statements.

As you may know, it’s very easy to install and use a SQL Server Express database as your data store since Citrix provides at custom batch file in the PS 4.5 Support folder. Running \Support\SqlExpress_2005_SP1\SetupSqlExpressForCPS.cmd automatically installs and configures a SQL Server Express instance named CITRIX_METAFRAME. By default, three SQL Server Express configuration tools (SQL Server Configuration Manager, SQL Server Error and Usage Reporting, and SQL Server Surface Area Configuration) are also installed on the server, but none of these can be used to configure a backup.

Creating the Database Backup Script

For further SQL Server Express management options download and install SQL Server Management Studio Express .  This is a free tool from Microsoft and will be used to create a script to backup your data store.

  1. Once the tool is installed, launch Microsoft SQL Server Management Studio Express and connect to the CITRIX_METAFRAME instance.
  2. Expand Databases and you will see the MF20 database. (This is the default name of the database that was created when creating the Presentation Server farm.)
  3. Right click the MF20 database and select “Tasks | Backup”.  A dialog box appears allowing you to define different options such as what type of backup (full or differential) you want to do, backup destination etc. Configure the available options as desired then click the “Options” page on the left-hand column. Continue configuring options accordingly. For example, you may want to select “overwrite all existing backup sets.”
  4. Once all desired options are set, select “Script | Actions to File” and enter a desired file name, for example, “DatastoreBackup,” and specify the location where to save the file.

This creates a .SQL file which scripts the options you defined in the prior step. The contents of your .SQL file may look like this:



BACKUP DATABASE [MF20] TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\MF20.bak' WITH NOFORMAT, INIT,  NAME = N'MF20-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

To test your .SQL file run the following from a command prompt.

sqlcmd -S .\CITRIX_METAFRAME -i "C:\<enter path to .sql file>\DatastoreBackup.sql"

If the MF20.bak file was created with the correct data and time stamp then you know your script works. By default the MF20.bak is located in C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL\Backup. (This folder might be “MSSQL.1” or “MSSQL.x” depending on what else is on your server.)

Automating the Database Backup

You can automate the backup process by creating two Scheduled Tasks.

SQLCMD Scheduled Task

  1. First, create a Scheduled Task to automate the .SQL script created above. Use the Scheduled Task Wizard and when asked to select a program browse to use browse to C:\Program Files\Microsoft SQL Server\90\Tools\binn\ SQLCMD.exe. Define the Schedule Task parameters accordingly and click “Finish”.
  2. Go the properties of the newly created Scheduled Task and edit the Run command as such.

"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -S .\CITRIX_METAFRAME -i "C:\Program Files\Microsoft SQL Server\DatastoreBackup.sql"

Copy MF20.bak Scheduled Task

copy "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\MF20.bak" "\\<servername>\<sharename>\"

Lastly, create a simple Command Prompt Scheduled Task and configure accordingly. (Make sure to run this Scheduled Task after the SQLCMD Scheduled Task.)  Go to the properties of the newly created Scheduled Task and edit the Run command to point to the location of CopyMF20bak.cmd (or your respective batch file name).

Next, create a simple batch file to copy the MF20.bak from the local server to a network share located on server being backed up regularly.  For example, create a file named, “CopyMF20bak.cmd”, with the following contents.  


Join the conversation


Send me notifications when other members comment.

By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy

Please create a username to comment.

I love that the DB instance is called CITRIX_METAFRAME still.. even though we're like two revs past that word.

Excuse me but what about Wfshell.exe? Doesn't that stand for WinFrame Shell? Thing is, as much as marketing guys like to rename stuff for no good reason, developers know how difficult it is to change the name of internal components without breaking stuff all over the place.


Nice, this is an awesome stuff to general SQL developer's too!
very useful, thanks
and how on PS4 you still get a MetaFrame XP logo on logon...

The ExpressMaint utility created by Jasper Smith is a much easier way...




Hello everybody,

I hope you are getting on. I had some problem when i used datareport in vb with Ms Access that has password. I can't connect data to put on datareport. I don't know why so please help me to resolve this problem.



Thanks for the nice article but I have one question in mind.

Can we have different filename for each back-up? Maybe date-based file naming (18-06-2007.bak, 19-06-2007.bak, and so on) convention instead of  "MF20.bak"


Thank you.


Forget about that, I've just run a across a code snippet.

 DECLARE @MyBackupName nvarchar(250)

SET @MyBackupName = 'C:\BackUp\ST_BKUP_' + convert( varchar(10), getdate(), 112 ) + '.BAK'

BACKUP DATABASE [DatabaseName] TO DISK = @MyBackupName
   NAME = N'DatabaseName-Differential Database Backup',
   STATS = 10

Hi there, Is there a way i can do an automated backup of a database,
which does not over write the previous nights file, and does not append to it.  
I want the filename to automatically be created and based on the date it was made.
Is there a way to do this?? thanks
Will it work with PS 4.0?
thanks for the clear information
nice work!!! very useful.....

We provide 24 hours outcall service [url=]shanghai escort[/url], We based in Shanghai but available to travel anywhere in the world <a href="" target="_blank">shanghai escort</a>. we should know who r u, so please call me by my telephone No.


We provide 24 hours outcall service [url=]shanghai escort[/url], We based in Shanghai but available to travel anywhere in the world <a href="" target="_blank">shanghai escort</a>. we should know who r u, so please call me by my telephone No.v


Awesome method for automating SQL 2005 backups!!!  Thanks so much!


SqlBackupAndFTP is way easier:

SqlBackupAndFTP link: <a href="">SqlBackupAndFTP</a>

This is simply awesome. Works smoothly as it should.
Why use 3rd party tools? This is way too easy.


 I came across a wired problem in doing this backup that there are only 4  databases lists in the left-column,all of which belongs to system databases, and there is no MF20.dsn visible here,but my farm do working fine now and the MF20.dsn file resides in the default directory.Who can help me troubleshoot this issue?


Hi i got error while firing the command from the cmd promt  here below is the command and the error


C:\Documents and Settings\Administrator>sqlcmd -S .\BMCWEB\SQLEXPRESS -i "C:\Pro

gram Files\Microsoft SQL Server\MSSQL.1\MSSQL\Everyday DB Backup\DBBackup.sql"

HResult 0xFFFFFFFF, Level 16, State 1

SQL Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].

Sqlcmd: Error: Microsoft SQL Native Client : An error has occurred while establi

shing a connection to the server. When connecting to SQL Server 2005, this failu

re may be caused by the fact that under the default settings SQL Server does not

allow remote connections..

Sqlcmd: Error: Microsoft SQL Native Client : Login timeout expired.


Got solution ..

user this command

C:\Documents and Settings\Administrator>sqlcmd localhost  -i "C:\Pro


Excellent Script!! wish I'd found long before.

However, I solved this issue by using this tool http://www, which fits perfectly for SQL Express. The free version lets you schedule up to 2 database backups daily.


Thanks for such an awesome article. It helped!


What do you mean by "How do you edit the properties of a newly created scheduled task  and edit the run command"?

When I r-click the new Windows task and properties I am not clear on where to edit to add the two file paths you mentioned.