Sql Server2005 自动备份数据库解决方案
一、 准备工作:
a) . 启用 sql server 的代理服务 (Agent), 并把该项服务的启动类型修改成 ’ 自动 ’( 保证重启机器后自动备份计划可以执行 ), 具体操作方法为:
Step1 :打开服务管理程序 , 具体路径为: ” 开始 --> 设置 --> 控制面 --> 管理工具 --> 服务 ” 。
Step2 :启动 ” SQL Server Agent” 服务 , 并设置为 ” 自动启动 ”, 具体截图如下:
截图 1
b) . 启用 sql server 的 xp_cmdshell 功能 , 具体每一步骤的操作截图如下:
Step1 :打开 ” SQL Server 外围应用配置器 ”
截图 2
Step2 :点击 ” 功能的外围应用配置器 ”
截图 3
Step3 :启用 xp_cmdshell
截图 4
二、 在数据库创建一项作业 :
a) . 通过执行 ” 自动备份数据库并删除一个月前的备份文件 .sql” 脚本 , 在 sql server 中创建一项 ” 作业 ”, 该作业可完成 CCCL_DB 数据库的自动备份及删除一个月前的备份文件的工作。里面有两处关于路径的地方和一处数据库名称的地方需要根据本地实际的情况填写 .
三、 作业的测试方法:
在 sql server 的 ”SQL Server Management Studio” 中右键相应的作业 , 选择执行即可进行测试 , 操作截图如下:
截图 5
sql文如下:
USE [msdb] GO /****** 对象: Job [CCCL_BACKUP] 脚本日期: 04/28/2011 13:31:56 ******/ BEGIN TRANSACTION DECLARE @ReturnCode INT SELECT @ReturnCode = 0 /****** 对象: JobCategory [[Uncategorized (Local)]]] 脚本日期: 04/28/2011 13:31:56 ******/ IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1) BEGIN EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback END DECLARE @jobId BINARY(16) EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'CCCL_BACKUP', @enabled=1, @notify_level_eventlog=2, @notify_level_email=0, @notify_level_netsend=0, @notify_level_page=0, @delete_level=0, @description=N'无描述。', @category_name=N'[Uncategorized (Local)]', @owner_login_name=N'sa', @job_id = @jobId OUTPUT IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback /****** 对象: Step [备份及删除之前一个月的备份] 脚本日期: 04/28/2011 13:31:56 ******/ EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'备份及删除之前一个月的备份', @step_id=1, @cmdexec_success_code=0, @on_success_action=1, @on_success_step_id=0, @on_fail_action=2, @on_fail_step_id=0, @retry_attempts=0, @retry_interval=0, @os_run_priority=0, @subsystem=N'TSQL', @command=N'declare @data_30ago nvarchar(50) declare @cmd varchar(50) set @data_30ago = ''E:/CCCL_DB_bak/''+convert(varchar(10),getdate()-30,112) set @cmd = ''del ''+ @data_30ago exec master..xp_cmdshell @cmd go declare @data nvarchar(50) set @data= ''E:/CCCL_DB_bak/''+convert(varchar(10),getdate(),112) BACKUP DATABASE CCCL_DB TO DISK = @data with init', @database_name=N'CCCL_DB', @flags=0 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'每天凌晨2点备份数据', @enabled=1, @freq_type=4, @freq_interval=1, @freq_subday_type=1, @freq_subday_interval=0, @freq_relative_interval=0, @freq_recurrence_factor=0, @active_start_date=20110420, @active_end_date=99991231, @active_start_time=93500, @active_end_time=235959 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback COMMIT TRANSACTION GOTO EndSave QuitWithRollback: IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION EndSave: