SQL Server使用脚本实现自动备份的方法及实战

1. 背景介绍

SQL Server是一种关系型数据库管理系统(RDBMS),用于存储和管理数据。对于企业级应用程序,数据备份是至关重要的。然而,手动执行数据备份花费时间长,还容易出错。因此,自动备份是一个很好的选择。本文将介绍如何使用脚本来自动备份SQL Server数据库,并实现自动备份的实战案例。

2. 自动备份的脚本实现

2.1 创建备份存储路径

首先,需要指定用于存储备份的路径。可以在SQL Server中创建一个文件夹,用于存储备份文件。在文件夹中,可以为每个数据库创建一个单独的子文件夹,以便备份文件被组织得更好。

--创建备份存储路径

EXEC master.dbo.xp_create_subdir 'C:\SQL_Backups'

EXEC master.dbo.xp_create_subdir 'C:\SQL_Backups\example_database'

2.2 编写备份脚本

接下来,需要编写用于备份数据库的脚本。使用T-SQL命令可以自动生成脚本。备份脚本包括备份类型、备份文件路径、备份数据库的名称和备份的描述。

--完整备份脚本

BACKUP DATABASE [example_database] TO

DISK = N'C:\SQL_Backups\example_database\example_database_full.bak'

WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10

GO

--差异备份脚本

BACKUP DATABASE [example_database] TO

DISK = N'C:\SQL_Backups\example_database\example_database_diff.bak'

WITH DIFFERENTIAL , NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10

GO

在每个脚本中,都指定了备份文件的路径。需要注意的是,备份命令中的参数都控制着备份的进程。例如,DIFFERENTIAL修饰符将区别当前备份和上次完整备份之后更改的信息。NOINIT选项将保留现有备份,而不是覆盖上一个备份。

2.3 生成备份计划

由于需要自动备份数据库,因此应该安排一个计划,在指定的时间自动运行备份脚本。可以使用SQL Server代理来创建备份计划。

--设置备份计划

USE [msdb]

GO

BEGIN TRANSACTION

DECLARE @ReturnCode INT

SELECT @ReturnCode = 0

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'BackupExampleDatabase',

@enabled=1,

@notify_level_eventlog=0,

@notify_level_email=2,

@notify_level_netsend=0,

@notify_level_page=0,

@delete_level=0,

@description=N'Backup Example Database to a local server every day at 2AM.',

@category_name=N'[Uncategorized (Local)]',

@owner_login_name=N'sa', @job_id = @jobId OUTPUT

SELECT @jobId

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

DECLARE @schedule_id int

EXEC msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'BackupExampleDatabaseSchedule',

@enabled=1,

@freq_type=4,

@freq_interval=1,

@freq_subday_type=1,

@freq_subday_interval=0,

@freq_relative_interval=0,

@freq_recurrence_factor=1,

@active_start_date=20220712,

@active_end_date=99991231,

@active_start_time=20000,

@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:

在这个例子中,使用msdb系统数据库和存储过程创建了一个新的SQL Server代理,然后指定代理负责运行并维护这个计划。可以使用SQL Server Management Studio来设置其他代理属性,例如登录名和密码。

3. 自动备份的实战案例

接下来,我们将在Windows操作系统上实现SQL Server的自动备份。本实战案例将演示如何在Windows Server 2016中设置和运行SQL Server的自动备份。

3.1 安装SQL Server Express

在本例中,我们将使用SQL Server Express来演示自动备份。可以从Microsoft网站上下载和安装SQL Server的免费版本。请确保安装包含SQL Server代理,以便可以使用代理来管理备份计划。

3.2 创建备份存储路径并设置权限

为了存储备份文件,需要在计算机上创建一个目录并设置适当的权限。在SQL Server实例中创建一个文件夹,例如C:\SQL_Backups,在该文件夹中为每个数据库创建一个单独的子目录。确保Login帐户对C:\SQL_Backups以及它下面的所有文件夹和文件都具有读取和写入的权限。

3.3 创建备份脚本

使用前面提到的备份脚本,根据需要调整备份路径和是否进行完整和/或差异备份。将脚本保存在计算机上的任何位置。

3.4 配置备份计划

按照以下步骤设置SQL Server代理:

右键单击计算机上的SQL Server Management Studio,选择“以管理员身份运行”。

在左侧的“对象资源管理器”窗格中,展开“管理”文件夹,展开“SQL Server代理”文件夹,并单击“作业”文件夹。

右键单击“作业”文件夹并选择“新建作业”。

在“新建作业”对话框中,命名作业并输入作业说明。

点击“步骤”添加步骤。

在“新建步骤”对话框中,命名步骤,选择作业类型为“Transact-SQL脚本(T-SQL)”。

在“命令”文本框中输入要运行的备份脚本。

在“高级”选项卡中,可以指定作业的运行时间和频率。

点击“确定”。

现在,备份计划已经成功设置。SQL Server代理将按照指定的计划在每个时间间隔自动运行脚本。备份文件将被保存在指定的备份目录中。

4. 总结

自动备份是数据库管理中的一个重要方面,可以为企业级应用程序提供数据完整性和可靠性。本文介绍如何使用脚本实现SQL Server数据库的自动备份,并提供了一个实际案例演示在Windows Server 2016中如何设置并运行SQL Server的自动备份。实践证明,设置自动备份计划不仅节省了大量时间,同时也提高了数据安全性和数据的完整性。

数据库标签