您的位置:首页 > 数据库

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

2011-04-20 13:43 417 查看
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:

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息