引言
在开展数据库管理工作中,备份数据库可谓至关重要。如果数据库出现故障,数据可能会永久丢失,这是不可挽回的损失。为了给数据库提供安全保障,SQL Server提供了自动备份功能,可以自动创建定期备份。在本文中,我们将详细讨论MSSQL自动备份,以及如何为数据库提供安全保障。
什么是MSSQL自动备份?
自动备份是SQL Server功能之一,可以自动创建数据库的备份。它可以在后台运行,定期执行。这个功能的好处是,可以确保即使出现数据损坏或数据丢失等不幸事件,仍有备份可用。
自动备份周期如何设置
设置自动备份的周期可以通过SQL Server Management Studio(SSMS)执行以下步骤:
-- 创建备份计划
USE [msdb]
GO
EXEC msdb.dbo.sp_add_job @job_name=N'Weekly Backup Job',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'This job will perform a full backup of all user databases on the server every week.',
@category_name=N'Database Maintenance',
@owner_login_name=N'sa',
@job_id = @jobId OUTPUT
-- 设置具体执行时间
EXEC msdb.dbo.sp_add_jobschedule @job_name=N'Weekly Backup Job',
@name=N'Weekly Schedule',
@enabled=1,
@freq_type=8,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=1,
@active_start_date=20180909,
@active_end_date=99991231,
@active_start_time=210000,
@active_end_time=235959
GO
-- 添加执行作业的步骤
EXEC msdb.dbo.sp_add_jobstep @job_name=N'Weekly Backup Job',
@step_name=N'Backup All Databases',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_fail_action=2,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0,
@subsystem=N'TSQL',
@command=N'BACKUP DATABASE [master] TO DISK = N''D:\SQLServer\Backup\master.bak'' WITH NOFORMAT, NOINIT, NAME = N''master-full'', SKIP, NOREWIND, NOUNLOAD, STATS = 10
BACKUP DATABASE [msdb] TO DISK = N''D:\SQLServer\Backup\msdb.bak'' WITH NOFORMAT, NOINIT, NAME = N''msdb-full'', SKIP, NOREWIND, NOUNLOAD, STATS = 10
BACKUP DATABASE [model] TO DISK = N''D:\SQLServer\Backup\model.bak'' WITH NOFORMAT, NOINIT, NAME = N''model-full'', SKIP, NOREWIND, NOUNLOAD, STATS = 10
BACKUP DATABASE [AdventureWorks2017] TO DISK = N''D:\SQLServer\Backup\AdventureWorks2017.bak'' WITH NOFORMAT, NOINIT, NAME = N''AdventureWorks2017-full'', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO',
@database_name=N'master',
@flags=0
GO
上面的代码创建了一个名为“Weekly Backup Job”的作业;设置在指定日期时间执行作业,并将数据库备份文件存储在指定位置,从而进行自动备份。
自动备份的优势
MSSQL自动备份提供了一些优势:
节省时间:无需人工手动备份,自动完成定期备份,大大节省了时间。
提高可用性:备份可以用于恢复数据库,可以确保即使出现故障,数据库也可以快速回复,从而提高了可用性。
保证数据安全:定期自动备份可以确保数据安全,即使出现数据丢失或损坏的情况,数据也可以轻松恢复。
备份类型
备份类型是指备份数据的种类。SQL Server提供了多种类型的备份:
完全备份
完全备份执行对整个数据库的备份,包括系统数据库和用户数据库。
--执行完全备份
BACKUP DATABASE [AdventureWorks2017] TO DISK = N'D:\SQLServer\Backup\AdventureWorks2017.bak' WITH NOFORMAT, NOINIT, NAME = N'AdventureWorks2017-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
差异备份
差异备份可以在完全备份之后执行。它只备份完全备份后已更改的页面和差异数据。因为它只备份部分更改,所以它可以更快地运行,并且需要更少的存储空间。
--执行差异备份
BACKUP DATABASE [AdventureWorks2017] TO DISK = N'D:\SQLServer\Backup\AdventureWorks2017_diff.bak' WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'AdventureWorks2017-differential', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
日志备份
日志备份备份活动日志文件。活动日志文件包含数据库中所有活动的交易。日志备份可用于还原该备份时发生在前一个备份和此时刻的所有事务。
--执行日志备份
BACKUP LOG [AdventureWorks2017] TO DISK = N'D:\SQLServer\Backup\AdventureWorks2017_log.bak' WITH NOFORMAT, NOINIT, NAME = N'AdventureWorks2017-log', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
部分备份
部分备份通常是指备份某些文件或文件组,而不是整个数据库。
--备份指定文件的部分备份
BACKUP DATABASE [AdventureWorks2017] FILEGROUP = N'PRIMARY' TO DISK = N'D:\SQLServer\Backup\AdventureWorks2017_part.bak' WITH NOFORMAT, NOINIT, NAME = N'AdventureWorks2017-part', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
备份还原
如果需要从备份文件中还原数据库,则可以使用SQL Server Management Studio(SSMS)或Transact-SQL遵循下列步骤:
使用 SSMS 进行还原操作
在SQL Server Management Studio(SSMS)中,连接到要还原的服务器并展开对象浏览器中的“数据库”文件夹;
右键单击要恢复的数据库,选择“任务”>“还原”>“数据库”;
在“还原数据库”对话框中,选择要恢复的备份,并指定要恢复的位置;
单击“选项”选项卡,在其中指定要用于还原的详细选项,例如要还原的日志之间的时间戳以及要还原的备份类型(完全、差异或日志备份)。
验证要还原的选项并单击“确定”按钮。
使用Transact-SQL进行还原操作
使用Transact-SQL还原时,可以根据情况选择使用完整恢复模式或简单恢复模式。
完整恢复模式
在SQL Server Management Studio (SSMS)中,展开“数据库”文件夹,并右键单击要还原的数据库。
选择“新的查询”选项卡。如果您不想使用新查询窗口,请确保当前查询窗口的连接与要还原的数据库的连接相同。然后将下面的 SQL 代码复制并粘贴到查询窗口中:
--还原完整备份
USE master
ALTER DATABASE AdventureWorks2017
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE
RESTORE DATABASE AdventureWorks2017
FROM DISK = 'D:\SQLServer\Backup\AdventureWorks2017.bak'
WITH REPLACE;
ALTER DATABASE AdventureWorks2017
SET MULTI_USER;
简单恢复模式
在SQL Server Management Studio中,展开“数据库”文件夹,并右键单击要还原的数据库。
选择“新的查询”选项卡。如果您不想使用新查询窗口,请确保当前查询窗口的连接与要还原的数据库的连接相同。然后将下列SQL代码复制并粘贴到查询窗口中:
--还原完整备份
USE master
ALTER DATABASE AdventureWorks2017
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE
RESTORE DATABASE AdventureWorks2017
FROM DISK = 'D:\SQLServer\Backup\AdventureWorks2017.bak'
WITH REPLACE,
MOVE 'AdventureWorks2017' TO 'D:\SQLServer\Data\AdventureWorks2017.mdf',
MOVE 'AdventureWorks2017_log' TO 'D:\SQLServer\Log\AdventureWorks2017_log.ldf',
NORECOVERY;
RESTORE LOG AdventureWorks2017
FROM DISK = 'D:\SQLServer\Backup\AdventureWorks2017_log.bak'
WITH NORECOVERY;
ALTER DATABASE AdventureWorks2017
SET MULTI_USER;
总结
在本文中,我们探讨了MSSQL自动备份的重要性,以及如何设置和执行数据库的备份。我们详细介绍了备份类型和如何执行备份恢复。了解这些信息,将使您能够为您的数据库提供足够的安全保障。