随锐旗下互动传媒:

SQL Server 2005 Express自动备份及删除旧备份文件

http://www.weaseek.com  2008-07-23 11:50:53  来源:IT专家网

我们可以通过Windows中的任务管理,结合VBSript和TSQL来达到在SQl Server 2005 Express 版本中自动备份系统和数据的目的。

问题提出

当越来越多的多商业应用采用SQl Server 2005 Express 版本作为后台数据库的时候,我们必须确保能顺利的备份系统以及运行在实例上的用户数据库。不幸的是,SQl Server 2005 Express 版本没有SQL代理,也就不能使用SQL代理来创建可以备份所有数据库的数据库维护计划。那么对于SQl Server 2005 Express 版本,我们如何像其它版本一样来备份系统和数据呢?

专家解答

我们可以通过Windows中的任务管理,结合VBSript和TSQL来达到在SQl Server 2005 Express 版本中自动备份系统和数据的目的。

注意:所有的文件都必须保存在如下文件夹:E:\SQL_Backup\scripts。这个目录可以改变。但在该例中设定的是这个目录。如果将文件保存到其它目录,必须相应的更新脚本中的目录设置。

第一步-创建TSQL脚本

以下的TSQL脚本将生成一个数据库备份文件,同时考虑到生成的日期和时间,其格式类似于数据库维护计划生成的备份文件。我们将之保存为后缀名.sql的文件:E:\SQL_Backup\scripts\backupDB.sql。该文件将在批处理命令文件中使用sqlcmd调用。

DECLARE @dateString CHAR(12), @dayStr CHAR(2), @monthStr CHAR(2), @hourStr CHAR(2), @minStr CHAR(2)

--month variable

IF (SELECT LEN(CAST(MONTH(GETDATE()) AS CHAR(2))))=2

SET @monthSTR=CAST(MONTH(GETDATE()) AS CHAR(2))

ELSE

SET @monthSTR= '0' + CAST(MONTH(GETDATE()) AS CHAR(2))

--day variable

IF (SELECT LEN(CAST(DAY(GETDATE()) AS CHAR(2))))=2

SET @daySTR=CAST(DAY(GETDATE()) AS CHAR(2))

ELSE

SET @daySTR='0' + CAST(DAY(GETDATE()) AS CHAR(2))

--hour variable

IF (SELECT LEN(DATEPART(hh, GETDATE())))=2

SET @hourStr=CAST(DATEPART(hh, GETDATE()) AS CHAR(2))

ELSE

SET @hourStr= '0' + CAST(DATEPART(hh, GETDATE()) AS CHAR(2))

--minute variable

IF (SELECT LEN(DATEPART(mi, GETDATE())))=2

SET @minStr=CAST(DATEPART(mi, GETDATE()) AS CHAR(2))

ELSE

SET @minStr= '0' + CAST(DATEPART(mi, GETDATE()) AS CHAR(2))

--name variable based on time stamp

SET @dateString=CAST(YEAR(GETDATE()) AS CHAR(4)) + @monthStr + @dayStr + @hourStr + @minStr

--=================================================================

DECLARE @IDENT INT, @sql VARCHAR(1000), @DBNAME VARCHAR(200)

SELECT @IDENT=MIN(database_id) FROM SYS.DATABASES WHERE [database_id] > 0 AND NAME NOT IN ('TEMPDB')

WHILE @IDENT IS NOT NULL

BEGIN

SELECT @DBNAME = NAME FROM SYS.DATABASES WHERE database_id = @IDENT

/*Change disk location here as required*/

SELECT @SQL = 'BACKUP DATABASE '+@DBNAME+' TO DISK = ''E:\SQL_Backup\'+@DBNAME+'_db_' + @dateString +'.BAK'' WITH INIT'

EXEC (@SQL)

SELECT @IDENT=MIN(database_id) FROM SYS.DATABASES WHERE [database_id] > 0 AND database_id>@IDENT AND NAME NOT IN ('TEMPDB')

END

[责任编辑:梧桐]热门关键词: SQL Server 2005 Express 自动备份