Menu Close

sqlserver数据库中没有维护计划,使用脚本备份数据库

1. 背景

安装了SQLServer2016,其版本为 Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64) Apr 29 2016 23:23:58 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)

当我使用 Microsoft SQL Server Management Studio工具对数据库做定时备份时,在 管理 下没有找到 维护计划 这个功能,可能是数据库版本限制了。由于在网上找了一些脚本来实现数据库自动备份与自动清理任务,自己也做了一些优化与测试,以下是操作记录。

下列步骤仅对某一个数据库在特定的时间点做全量的备份,并没有备份日志(使用备份文件并不能还原到某个时间点)。

2. 操作步骤

2.1. 写一个sql脚本用作数据库备份与自动清理

例如:我们在目录 E:\sqlbak 创建一个文件 backup.sql,以后的备份文件也放在该目录下,其内容如下:

GO
DECLARE @oldDate DATETIME;
DECLARE @date DATETIME;
DECLARE @dbName  VARCHAR(40);
DECLARE @pathName VARCHAR(100);
DECLARE @fileName VARCHAR(1000);

-- 设置数据库名称
SELECT @dbName = 'et_plus';

-- 设置数据库备份路径
SELECT @pathName = 'E:\sqlbak\';

-- 设置数据库备份文件保留天数
SELECT @oldDate = GETDATE() - 5;

SELECT @date = GETDATE();
SELECT @fileName = @pathName + @dbName + CAST(DATEPART(yyyy,@date) as varchar) + '-' + CAST(DATEPART(mm,@date) AS varchar) + '-' + CAST(DATEPART(dd,@date) as varchar) + '.bak';

-- 开始备份数据库
BACKUP DATABASE @dbName TO DISK=@fileName;

-- 开始删除过期的数据库备份文件
EXECUTE master.dbo.xp_delete_file 0,@pathName,'bak',@oldDate,0;

GO

上述文件中,需要设置数据名、文件路径(注意是以 \ 结尾)、备份文件保留份数

2.2. 写一个批处理文件用作执行上述sql脚本

例如:我们在目录 E:\sqlbak 创建一个文件 backup_database.bat,其内容如下:

sqlcmd -S . -i  E:\sqlbak\backup.sql  -o  optLog_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.txt

上述文件中,需要注意脚本文件的路径和名称,要与2.1中设置的相同!

2.3. 新建一个Windows计划任务每天定时执行批处理文件

打开 控制面板 >> 系统和安全 >> 管理工具 >> 计划任务

file

  • 选择“创建基本任务”
    file

  • 输入任务名称和描述
    file

  • 选择触发的条件
    file

  • 选择执行的时间
    file

  • 选择操作
    file

  • 选择程序或脚本文件的路径
    file

  • 完成设置,并打开此任务属性对话框
    file

  • 设置计划任务的执行权限:不管用户是否登录都要运行
    file

  • 输入用户的密码进行验证
    file

2.4. 查看定时执行的文件与日志

file