3.1.限制和局限
-
不允许在显式或隐式事务中使用 BACKUP 语句。
-
无法在早期版本的 SQL Server 中还原较新版本的 SQL Server 创建的备份。
3.2.建议
-
随着数据库不断增大,完整备份需花费更多时间才能完成,并且需要更多的存储空间。 因此,对于大型数据库而言,您可以用一系列“差异数据库备份”来补充完整数据库备份。 有关详细信息,请参阅差异备份 (SQL Server)。
-
您可以使用 sp_spaceused 系统存储过程估计完整数据库备份的大小。
-
默认情况下,每个成功的备份操作都会在 SQL Server 错误日志和系统事件日志中添加一个条目。 如果非常频繁地备份日志,这些成功消息会迅速累积,从而产生一个巨大的错误日志,这样会使查找其他消息变得非常困难。 在这些情况下,如果任何脚本均不依赖于这些日志条目,则可以使用跟踪标志 3226 取消这些条目。 有关详细信息,请参阅跟踪标志 (Transact-SQL)。
3.3.权限
默认情况下,为 sysadmin 固定服务器角色以及 db_owner 和 db_backupoperator 固定数据库角色的成员授予 BACKUP DATABASE 和 BACKUP LOG 权限。
备份设备的物理文件的所有权和权限问题可能会妨碍备份操作。 SQL Server 必须能够读取和写入设备;运行 SQL Server 服务的帐户必须具有写入权限。 但是,用于在系统表中为备份设备添加项目的 sp_addumpdevice 不检查文件访问权限。 备份设备物理文件的这些问题可能直到为备份或还原而访问物理资源时才会出现。
3.4.使用 SQL Server Management Studio备份数据库
右键数据库AdventureWorks2012->tasks->back up,如下图所示:
完全备份配置选项
- backup type:full,表示完全备份
- backup component:database
- backup set->name:默认
- backup set will expire:after:0,表示永远不失效。
- destination:disk,表示备份到磁盘
- 点击add选择备份设备或者指定备份路径,如下图所示:
- 我们这里选择的是前面创建的backup device:mybackupdisk。
- 注意:我们可以指定多个backup device。指定多个备份设备可以节约备份时间。并行写入。
验证
完成上述配置以后并确定备份,我们就可以在磁盘目录”d:\backup\backup1.bak"下找到我们的备份文件,一共有189MB。
3.5.使用 Transact-SQL创建完整数据库备份
--默认情况下,BACKUP DATABASE 创建完整备份。 --定义备份设备 EXEC sp_addumpdevice ‘disk‘, ‘mybackupdisk2‘, ‘d:\backup\backup2.bak‘; --备份到逻辑设备 BACKUP DATABASE AdventureWorks2012 TO mybackupdisk2 WITH NOINIT,NAME = ‘Full Backup of AdventureWorks2012‘; --直接备份到磁盘 BACKUP DATABASE AdventureWorks2012 TO disk=‘d:\backup\backup3.bak‘ WITH NOINIT,NAME = ‘Full Backup of AdventureWorks2012‘;
BACKUP具体语法参考BACKUP (Transact-SQL)。
4.差异数据库备份
4.1.必备条件
创建差异数据库备份需要有以前的完整数据库备份。 如果选定的数据库从未进行过备份,则请在创建任何差异备份之前,先执行完整数据库备份。 有关详细信息,请参阅创建完整数据库备份 (SQL Server)。
4.2.建议
当差异备份的大小增大时,还原差异备份会显著延长还原数据库所需的时间。 因此,建议按设定的间隔执行新的完整备份,以便为数据建立新的差异基准。 例如,您可以每周执行一次整个数据库的完整备份(即完整数据库备份),然后在该周内执行一系列常规的差异数据库备份。
4.3.使用 SQL Server Management Studio创建差异数据库备份
操作步骤跟3.4节完整备份数据库一样,只是将buckup type类型改成Differential而已。destination可以依然选择完整备份的那一个device,不过要求是NOINIT,而不能是INIT,因为如果是INIT的话会覆盖原来的完整备份。
4.4.使用 Transact-SQL创建差异数据库备份
USE [TSQL2012] --定义备份设备 EXEC sp_addumpdevice ‘disk‘, ‘backupdevice1‘, ‘d:\backup\backup_tsql2012.bak‘; --完整备份数据库 BACKUP DATABASE TSQL2012 TO backupdevice1 WITH NOINIT,NAME = ‘Full Backup of TSQL2012‘; --插入数据 INSERT INTO dbo.test(OrderID,ProductID) VALUES(1,1); INSERT INTO dbo.test(OrderID,ProductID) VALUES(2,2); INSERT INTO dbo.test(OrderID,ProductID) VALUES(3,3); --差异备份数据库 BACKUP DATABASE TSQL2012 TO backupdevice1 WITH DIFFERENTIAL,NOINIT,NAME = ‘DIFFERENTIAL Backup of TSQL2012‘;
验证我们创建的完整备份和差异备份
右键选择数据库TSQL2012->tasks->restore->database,出现如下图所示内容:
如上图所示,出现了我们之前创建的完整备份和差异备份。
5.事务日志备份
5.1.建议
-
如果数据库使用完整恢复模式或大容量日志恢复模式,则必须足够频繁地备份事务日志,以保护数据和避免事务日志变满。 这将截断日志,并且支持将数据库还原到特定时间点。
-
默认情况下,每个成功的备份操作都会在 SQL Server 错误日志和系统事件日志中添加一个条目。 如果非常频繁地备份日志,这些成功消息会迅速累积,从而产生一个巨大的错误日志,这样会使查找其他消息变得非常困难。 在这些情况下,如果任何脚本均不依赖于这些日志条目,则可以使用跟踪标志 3226 取消这些条目。 有关详细信息,请参阅跟踪标志 (Transact-SQL)。
5.2.使用 SQL Server Management Studio创建差异数据库备份
5.2.1.例行事务日志的备份
5.2.2.尾部事务日志的备份
5.3.使用 Transact-SQL创建差异数据库备份
--插入数据 INSERT INTO dbo.test(OrderID,ProductID) VALUES(4,4); INSERT INTO dbo.test(OrderID,ProductID) VALUES(5,5); --事务日志备份,NOINIT是默认的,表示不重写,而是追加 BACKUP LOG TSQL2012 TO backupdevice1 WITH NAME = ‘Transaction Log Backup of TSQL2012‘; --插入数据 INSERT INTO dbo.test(OrderID,ProductID) VALUES(6,6); INSERT INTO dbo.test(OrderID,ProductID) VALUES(7,7); --结尾日志备份,如果报错说数据库正在使用,请重启服务。 use master go BACKUP LOG TSQL2012 TO backupdevice1 WITH NORECOVERY,NAME = ‘Transaction Tail-Log Backup of TSQL2012‘; go
注意:事务日志备份与结尾日志备份就只差了一个关键字NORECOVERY,数据库备份可以有多个事务日志,但是只有一个结尾日志。一般结尾日志多用在数据库恢复的时候。在数据库恢复中,恢复事务日志并不能说明数据库已经恢复完成,但是一旦恢复了结尾日志,这表明数据库恢复工作完成。
验证我们创建的事务日志与结尾日志
右键选择数据库TSQL2012->tasks->restore->database,出现如下图所示内容:
由上图可见,备份中多出我们上述定义的事务日志:Transaction Log Backup of TSQL2012和结尾日志:Transaction Tail-Log Backup of TSQL2012。