### SQL 2005 自动定期备份并删除过期备份文件
#### 一、应用场景与需求背景
在日常的企业数据库管理中,确保数据的安全性和完整性至关重要。对于使用 SQL Server 2005 的企业来说,实现数据库的定期自动备份是一项重要的任务。然而,SQL Server 2005 并不支持自动删除过期备份文件的功能,这给企业的数据管理和存储带来了一定的挑战。因此,通过编写脚本来实现这一功能显得尤为重要。
本文将详细介绍如何通过编写 SQL 脚本来实现 SQL Server 2005 数据库的自动备份以及自动删除过期备份文件。具体需求如下:
1. **数据库定期备份**:希望能够在指定的时间间隔内(例如每天)自动备份数据库到指定路径(例如 `E:\DataBaseBak`)。
2. **备份文件命名规则**:备份文件需要遵循一定的命名规则,例如以“文件名前缀+8位日期流水”的方式命名,如 `YAMEI20121204.bak`。
3. **自动删除过期备份**:能够自动删除一定时间之前的备份文件,例如删除三天前的备份文件。
#### 二、准备工作
1. **启动 xp_cmdshell**:为了能够通过 SQL Server 执行外部命令,需要启用 xp_cmdshell 存储过程。
```sql
sp_configure 'showadvancedoptions', 1
reconfigure
go
sp_configure 'xp_cmdshell', 1
reconfigure
go
```
2. **启动 SQL Server 代理**:SQL Server 代理用于调度和执行 SQL Server 作业。

3. **建立存放备份文件的文件夹**:创建一个专门用于存放备份文件的文件夹,例如 `E:\DataBaseBak`。

#### 三、建立作业计划
1. **新建作业**:在 SQL Server Management Studio (SSMS) 中创建一个新的作业。

2. **建立步骤一**:创建一个作业步骤来执行备份操作。
- 步骤一脚本:
```sql
declare @sql varchar(100)
set @sql = 'E:\DataBaseBak\YAMEI' + rtrim(convert(varchar, getdate(), 112)) + '.bak'
backup database YAMEI to disk = @sql
```
- 注意事项:
- 确保备份路径真实存在且与脚本中的路径一致。
- 调整备份数据库的名称(本例为 YAMEI)以匹配实际情况。
3. **建立步骤二**:创建另一个作业步骤来删除过期的备份文件。
- 步骤二脚本:
```sql
declare @sql varchar(100)
set @sql = 'del E:\DataBaseBak\YAMEI' + rtrim(convert(varchar, getdate() - 3, 112)) + '.bak'
exec master..xp_cmdshell @sql
```
- 注意事项:
- 确认备份路径与步骤一中的路径一致。
- 修改备份文件前缀(本例为 YAMEI)以匹配实际情况。
- 调整删除策略(本例为删除三天前的备份文件)以满足业务需求。
4. **设定计划**:为作业设置运行计划,例如每天定时执行。

5. **作业列表与监控**:在 SSMS 中可以查看已创建的作业及其状态。


#### 四、验证
1. **立即执行作业**:手动触发作业执行,以验证备份和删除逻辑是否正确。

2. **修改备份文件名称**:根据实际情况调整备份文件的命名规则。

3. **再次执行作业**:再次触发作业执行,观察是否按预期工作。

通过以上步骤,我们可以有效地实现 SQL Server 2005 数据库的自动备份及自动删除过期备份文件的功能。这不仅提高了数据库维护的自动化水平,也减少了人工干预的需求,从而降低了出错的风险。