sql server2005 自动备份数据库 删除一段时间以前的备份 步骤详细描述

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:

你可能感兴趣的:(sql server2005 自动备份数据库 删除一段时间以前的备份 步骤详细描述)