首页 > 数据库 >14.2 SQL Server恢复模式

14.2 SQL Server恢复模式

时间:2023-01-30 11:14:31浏览次数:54  
标签:HR 数据库 恢复模式 Server BULK SQL 日志 备份

SQLServer 恢复模式(Recovery Model)

目录

简介

恢复模式控制以下内容:

  • SQL Server如何记录数据库的事务。
  • 数据库的事务日志是否需要备份。
  • 什么类型的恢复操作可用于恢复数据库。

SQL Server提供了三种恢复模式

  • 简单
  • 完整
  • 大容量日志

创建新数据库时,SQL Server使用model数据库设置新数据库的默认恢复模式。

先创建一个新数据库HR用于示例:

CREATE DATABASE HR;

然后在HR数据库创建一张新表People

USE HR

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'),
  ('Jane', 'Doe'),
  ('Upton', 'Luis'),
  ('Dach', 'Keon');

完整代码:

CREATE DATABASE HR;
GO

USE HR;

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'),
  ('Jane', 'Doe'),
  ('Upton', 'Luis'),
  ('Dach', 'Keon');

SELECT * FROM People;

查看数据库的恢复模式

查看HR数据库的恢复模式

SELECT
  name,
  recovery_model_desc
FROM master.sys.databases
WHERE name = 'HR';

可见,人力资源(HR)数据库具有完整恢复模式。

要查看当前服务器中所有数据库的恢复模型,使用以下查询:

SELECT
  name,
  recovery_model_desc
FROM master.sys.databases
ORDER BY name;

更改恢复模式

语法:

ALTER DATABASE database_name 
SET RECOVERY recovery_model;
  • 首先指定数据库名
  • 然后在SET RECOVERY后面指定模式,可以是SIMPLE, FULL, 和 BULK_LOGGED

比如将HR数据库的恢复模式从FULL更改为SIMPLE

ALTER DATABASE HR
SET RECOVERY SIMPLE;

简单(SIMPLE)恢复模式

SIMPLE恢复模式中,SQL Server在每个检查点从事务日志文件中删除事务日志。这导致事务日志文件相对较小。

此外,在SIMPLE恢复模式中,事务日志不存储事务记录。因此,将无法使用高级备份策略来最大限度地减少数据丢失。

在实践中,可以使用SIMPLE恢复模式来恢复可以从其他源(如数据库)重新加载的数据库,以便进行报告。

完整(FULL)恢复模式

在完整恢复模式中,SQL Server将事务日志保存在事务日志文件中,直到执行BACKUP LOG语句。换句话说,BACKUP LOG语句从事务日志文件中删除事务日志。

如果不经常运行BACKUP LOG语句,SQL Server将保留事务日志文件中的所有事务日志,直到事务日志文件已满且数据库不可访问。这就是为什么需要定期运行BACKUP LOG语句以防止事务日志文件满。

简而言之,FULL恢复模型允许在任何时间点恢复数据库。

大容量日志(BULK_LOGGED)恢复模式

BULK_LOGGED恢复模式的行为与FULL恢复模型几乎相同,但是大容量日志操作除外。例如,在事务日志文件中简要描述了将平面文件插入到表中的BULK INSERT

BULK_LOGGED恢复模式不允许在任何时间点恢复数据库。
BULK_LOGGED恢复的实际场景如下:

  • 在定期加载数据之前,将恢复模式设置为BULK_LOGGED
  • 将数据加载到数据库中
  • 完成数据加载后,将恢复模式设置回FULL
  • 备份数据库

下表显示了所有恢复模式的特性:

恢复模式 描述 数据丢失 时间点恢复
简单 无日志备份 最新备份之后的更改不受保护。 在发生灾难时,这些更改必须重做 只能恢复到备份结束。
完整 需要日志备份 通常没有 如果备份在接近特定的时点完成,则可以恢复到该时点。
大容量日志 需要日志备份 如果自最近一次日志备份以来日志已损坏或发生了大容量日志操作,则必须重做自上次备份以来的更改。否则,不会丢失任何工作。 可以恢复到任何备份的末尾。不支持时间点恢复。

总结

  • 恢复模式是数据库的属性,用于控制事务的日志记录方式。
  • 恢复模式可以是以下类型之一:SIMPLEFULLBULK_LOGGED
  • 对于其数据可以从其他源重新加载的数据库,使用SIMPLE恢复模式。
  • 如果要在任何时间点恢复数据库,使用FULL恢复模式。
  • BULK_LOGGED恢复模式用于批量日志操作,如BULK INSERT

标签:HR,数据库,恢复模式,Server,BULK,SQL,日志,备份
From: https://www.cnblogs.com/michaelshen/p/17074844.html

相关文章

  • 14.3 SQL Server备份介绍
    SQLServer备份目录SQLServer备份什么是备份为什么要备份备份的存储位置哪些数据库需要备份备份类型完整备份差异备份事务日志备份总结什么是备份备份是完整备份时该数......
  • 14.4 SQL Server完整备份
    SQLServer完整备份目录SQLServer完整备份简介使用T-SQL创建数据库的完整备份示例在一个文件中执行多个完整备份从完整备份还原数据库从第一次完整备份恢复从第二次完全......
  • 14.5 SQL Server差异备份
    SQLServer差异备份目录SQLServer差异备份简介创建差异备份示例恢复差异备份总结简介差异备份基于最近的完整备份。换句话说,只有在至少有一个完整备份后,才能创建差异备......
  • 14.6 SQL Server事务日志备份
    SQLServer事务日志备份目录SQLServer事务日志备份简介使用T-SQL创建事务日志备份示例从事务日志备份还原数据库总结简介当数据库的恢复模式为FULL(完整)或BULK_LOGGED(大......
  • 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语句返回一组称为结果集的行。但......