首页 > 数据库 >14.6 SQL Server事务日志备份

14.6 SQL Server事务日志备份

时间:2023-01-30 11:11:41浏览次数:85  
标签:事务 14.6 HR 创建 备份 Server SQL 日志 数据库

SQL Server事务日志备份

目录

简介

当数据库的恢复模式为FULL(完整)或BULK_LOGGED(大容量日志)时,可以备份数据库的事务日志

在创建事务日志备份之前,需要创建至少一个完整备份。之后,可以创建任意数量的事务日志备份。

最好更频繁地将事务日志备份以:

  • 最小化数据丢失
  • 截断日志文件

通常,偶尔创建一次完整备份(如每周),并以较短的间隔(如每天)创建一系列差异备份。独立于数据库备份,您可以以更频繁的间隔(如每小时)创建事务日志。

下图说明了事务日志备份:

在这张图片中,我们有:

  • 两个完整备份
  • 三个事务日志备份

第一个完整备份包含id 1,第二个完整备份包括id 1、2和3。

第一个事务日志备份包含id 2,第二个事务日志副本包含id 3,第三个事务日志附件包含id 3。

注意,事务日志备份不像完整备份或差异备份那样包含重复数据。

使用T-SQL创建事务日志备份

语法:

BACKUP LOG database_name
TO DISK = path_to_backup_file
WITH options;
  • 首先,指定要备份事务日志的数据库的名称。数据库必须存在并处于联机状态。
  • 其次,指定备份日志文件的路径。路径必须存在于文件系统中。
  • 第三,在WITH子句中指定其他备份选项。

示例

首先,删除HR数据库:

USE master;
DROP DATABASE IF EXISTS HR;

第二步,创建新的HR数据库:

CREATE DATABASE HR;
GO

第三步,确保HR数据库处于FULL恢复模式以执行事务日志备份:

ALTER DATABASE HR 
SET RECOVERY FULL;

第四步,创建人员表并插入一行:

USE HR;
GO

CREATE TABLE People (
  Id int IDENTITY PRIMARY KEY,
  FirstName varchar(50) NOT NULL,
  LastName varchar(50) NOT NULL
);

INSERT INTO People (FirstName, LastName)
VALUES ('John', 'Doe');

第五步,创建完整备份:

BACKUP DATABASE HR 
TO  DISK = 'D:\backup\hr.bak'
WITH INIT,
NAME = 'HR-Full Database Backup';

第六步,在人员表中再插入一行:

INSERT INTO People(FirstName, LastName)
VALUES ('Jane', 'Doe');

第七步,创建第一个事务日志备份:

BACKUP LOG HR
TO  DISK = N'D:\backup\hr.bak' 
WITH NAME = N'HR-Transaction Log Backup';

第八步,在人员表中插入另一行:

INSERT INTO People(FirstName, LastName)
VALUES ('Upton', 'Luis');

第九步,创建第二个事务日志备份:

BACKUP LOG HR
TO  DISK = N'D:\backup\hr.bak' 
WITH NAME = N'HR-Transaction Log Backup';

第十步,创建第二个完整备份:

BACKUP DATABASE HR 
TO  DISK = 'D:\backup\hr.bak'
WITH NOINIT,
NAME = 'HR-Full Database Backup';

第十一步,在人员表中插入另一行:

INSERT INTO People(FirstName, LastName)
VALUES('Dach', 'Keon');

最后,查看备份文件:

RESTORE HEADERONLY   
FROM DISK = N'D:\backup\hr.bak';

从事务日志备份还原数据库

要恢复数据库,可以还原第二个完整备份(Position 4)和最后一个事务日志备份(Position 5)。

首先,删除人力资源数据库:

USE master;
DROP DATABASE HR;

然后,从第二次完整备份中恢复数据库:

RESTORE DATABASE HR
FROM  DISK = N'D:\backup\hr.bak'
WITH FILE = 4, NORECOVERY;

在该语句中,数字4指定备份文件中的第二个完整备份。NORECOVERY将数据库置于还原状态,以便可以还原事务日志备份。

第三步,使用RESTORE LOG语句恢复事务日志备份:

RESTORE LOG HR
FROM DISK = N'D:\backup\hr.bak'
WITH FILE = 5, RECOVERY

在该语句中,数字5表示最后一次事务日志备份。RECOVERY表示没有要恢复的进一步备份。因此,在恢复完成后,可以访问数据库。

最后,将当前数据库切换到HR,并从人员表中选择数据:

USE HR;
SELECT * FROM people;

People表有四行,表示已成功从完整备份和事务日志备份中恢复了数据库。

总结

若要备份事务日志,数据库的恢复模式必须是 FULLBULK _ LOGGED

事务日志备份包含数据库的事务日志。

使用 BACKUP LOG 语句备份事务日志。

使用 RESTORE LOG从事务日志备份中恢复数据库。

标签:事务,14.6,HR,创建,备份,Server,SQL,日志,数据库
From: https://www.cnblogs.com/michaelshen/p/17074864.html

相关文章

  • 12.1 SQL Server视图
    SQLServer视图(Views)目录SQLServer视图(Views)简介视图的优点安全简单一致性创建视图示例创建一个简单视图重新定义视图使用聚合函数创建视图删除视图简介示例删除一个......
  • SQL Server 存储过程定时转存数据
    CREATEPROCEDURE[dbo].[sp_MES_JTMSLS]--创建存储过程asBEGINBEGINTRANTran_MoveData--开始事务DECLARE@tran_erro......
  • 9.2 SQL Server BEGIN END
    BEGINEND目录BEGINEND简介嵌套BEGIN...END简介BEGIN…END语句用于定义语句块。语句块由一组一起执行的SQL语句组成。语句块也称为批处理。打个比方说,如果语句是句子......
  • 9.4 SQL Server循环
    SQLServer循环目录SQLServer循环简介WHILE示例BREAK简介示例CONTINUE简介示例简介WHILE语句是一个控制流语句,它允许重复执行语句块,只要指定的条件为TRUE。WHILE语法......
  • 9.3 SQL Server IF ELSE
    SQLServerIFELSE目录SQLServerIFELSE简介IF语句示例IFELSE语句示例:嵌套IF…ELSE简介IF...ELSE语句是一种控制流语句,允许根据指定的条件执行或跳过语句块。IF......
  • 9.5 SQL Server游标
    SQLServer游标(CURSOR)目录SQLServer游标(CURSOR)简介什么是数据库游标SQLServer游标生命周期示例简介SQL基于集合进行操作,例如,SELECT语句返回一组称为结果集的行。但......
  • 9.6 SQL Server异常处理
    SQLServer异常处理目录SQLServer异常处理TRYCATCH简介CATCH块中的函数嵌套的TRYCATCH简单示例在事务中使用TRYCATCH的示例THROW简介示例A)以下示例使用THROW语句引......
  • 8.3 SQL Server非聚集索引
    SQLServerNon-ClusteredIndexes(非聚集索引)目录SQLServerNon-ClusteredIndexes(非聚集索引)简介使用SQLServerCREATE[NONCLUSTERED]INDEX创建非聚集索引示例A)使用C......
  • 8.4 SQL Server唯一索引
    SQLServer唯一索引(UniqueIndex)目录SQLServer唯一索引(UniqueIndex)简介示例A)创建包含一列的唯一约束B)创建包含多列的唯一约束SQLServer唯一索引与NULL唯一索引(Uniquei......
  • 8.5 SQL Server包含列索引
    SQLServer索引与包括的列目录SQLServer索引与包括的列简介创建包含列的索引的语法简介本文使用sales.customers表作为示例下面语句在email列创建唯一约束:CREATEU......