让SQL Server 2008自动备份数据库,需要建立一个SQL Server作业,并启动SQL Server代理,使该作业定期运行。
具体来说,可以按以下步骤进行:
一、启动代理
打开SQL Server Management Studio,在对象资源管理器中,
确认SQL Server代理已启动,若没有,右击SQL Server代理节点,点击“启动”。
二、新建作业
展开SQL Server 代理节点,在其下的作业文件夹上右击,选择“新建作业”,在弹出的“新建作业”对话框中,在常规选卡上为该作业命名,如“备份TXDPCS”。
三、编写代码
选择“步骤”选项卡,点击“新建”按钮,在弹出的对话框中,为该步骤起一个名字,如“直接备份”,然后在命令栏中,输入如下命令:
DECLARE @fileName nvarchar(100)
SET @fileName='E:DB_Backup\' + REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(100), GETDATE(), 121), ' ', ''), ':', ''), '-', ''), '.', '') + '.bak'
PRINT 'Backup to ' + @fileName + '...'
BACKUP DATABASE [数据库名称] TO DISK = @fileName WITH NOINIT , NOUNLOAD , NAME = N'数据库-备份', NOSKIP , STATS = 10, NOFORMAT
点击“确定”保存步骤。
四、设置定时任务。
选择“新建作业”的计划选项卡(这里就是定期执行的核心了!),点击“新建”按钮,为该计划命名,如“每周一、三、五、七执行”,然后进行其他设置,如每1周一、三、五、七执行,时间为00:00:00等。最后点击“确定”保存计划。
五、说明
//默认账户
osql -E -Q "BACKUP DATABASE db_test TO DISK = 'D:\DB_BAK\db_test%date:~0,4%%date:~5,2%%date:~8,2%'"
//指定账户
osql -S .\MSSQL2008R2 -U netuser -P netuser2008 -Q"BACKUP DATABASE db_test TO DISK = 'D:\DB_BAK\db_test%date:~0,4%%date:~5,2%%date:~8,2%'"
db_test:需要备份的数据库名称
D:\DB_BAK:数据库备份路径
%date:~0,4%%date:~5,2%%date:~8,2%:YYYYMMDD日期格式
六、手动备份也可以使用批处理
/************************************************************
* 数据备份脚本:
* 1.运行前,请根据实际配置修改相应账户信息;
* 2.请将脚本执行结果另存为批处理文件,执行批处理文件即可;
* 时间: 2015/3/10 14:21:15
************************************************************/
DECLARE @name NVARCHAR(200)
DECLARE @path NVARCHAR(500)
DECLARE @dbServer NVARCHAR(500)
DECLARE @dbUserName NVARCHAR(500)
DECLARE @dbUserPwd NVARCHAR(500)
--备份文件存放路径
SET @path = 'E:\05_DataBase_bakup\'
--数据库服务器
SET @dbServer = '.'
--数据库用户名
SET @dbUserName = 'sa'
--数据库用户密码
SET @dbUserPwd = '123'
DECLARE cursors CURSOR
FOR
--查询集合
SELECT [name]
FROM [sysdatabases]
WHERE NAME NOT IN ('master', 'tempdb', 'model', 'msdb')
OPEN cursors
FETCH NEXT FROM cursors INTO @name
WHILE @@fetch_status = 0
BEGIN
--遍历集合
PRINT 'osql -S ' + @dbServer + ' -U ' + @dbUserName + ' -P ' + @dbUserPwd +
' -Q "BACKUP DATABASE ['
+ @name + '] TO DISK = ''' + @path +
'[%date:~0,4%%date:~5,2%%date:~8,2%]' + @name + '.bak''"'
FETCH NEXT FROM cursors INTO @name
END
CLOSE cursors
DEALLOCATE cursors