SQL笔记——数据库恢复技术

目录

事务

定义

事务是DBMS的基本单位
事务(Transaction)用: 户定义的一个数据库操作序列,	这些操作要么全做,要么全不做,是一个不可分割的工作单位
事务是恢复和并发控制的基本单位

事务: 一个事务可以是一条SQL语句,一组SQL语句或整个程序
程序: 一个程序通常包含多个事务

例如:
转账, 转账失败,退回钱;  或直接转账成功

代码格式

BEGIN TRANSACTION
SQL语句1
SQL语句2
COMMIT (成功) 或 	ROLLBACK (异常中止,回滚操作)

特性

事务的特性(ACID):
原子性(Atomicity): 不可分割 ,  要不然全做,要不然全不做
一致性(Consistency): 如转账一方减1,一方加1; 两种操作要不全做,要不全不做
隔离性(Isolation): 不被其他事务, 操作干扰 , 相当于在一个独立空间中执行; 如抢票, 一旦一个用户预订, 则其他用户不可操作;
持续性(Durability): 事务一旦提交,不可逆 ; 其他操作对该事物不会有影响

数据库恢复

数据库管理系统必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能
这就是数据库的恢复管理系统对故障的对策

故障的种类

事务内部的故障
例如: 银行转账,余额不足
事务撤销: 
事务故障的恢复由系统自动完成,对用户是透明的,不需要用户干预
由恢复子系统利用日志文件撤消(UNDO)此事务已对数据库进行的修改
undo 撤销, 反向扫描
redo 重做, 正向扫描

系统故障
又叫软故障, 如CPU故障 / 操作系统故障
恢复:
介质故障的恢复需要数据库管理员介入
数据库管理员的工作: 
重装最近转储的数据库副本和有关的各日志文件副本;  执行系统提供的恢复命令
具体的恢复操作仍由数据库管理系统完成

介质故障
又叫硬故障, 如磁盘损坏, 磁场干扰; 必上两类破坏性更大

计算机病毒

恢复技术

数据转储

转储是指数据库管理员定期地将整个数据库复制到磁带、磁盘或其他存储介质上保存起来的过程
备用的数据文本称为后备副本(backup)或后援副本

转储方法
(1)静态转储与动态转储
一个在转储过程不能修改, 一个可以修改数据

(2)海量转储与增量转储
海量转储全部的数据库 ( 数据量大 )
增量转储指只转储上一次转储后更新过的数据(数据量小)

登记日志文件

日志文件(log file)是用来记录事务对数据库的更新操作的文件

 日志文件的格式和内容 
必以记录为单位的日志文件,每条日志记录的内容
■事务标识(标明是哪个事务)
■操作类型(插入、
删除或修改)
■操作对象(记录D、Block NO.)
更新前数据的旧值(对插入操作而言,此项为空值)
更新后数据的新值(对删除操作而言,此项为空值)

登记日志文件
按照时间顺序
先写日志文件后写数据库文件

并发控制

并发控制

多用户数据库系统
允许多个用户同时使用的数据库系统
例如:飞机定票数据库系统
特点:在同一时刻并发运行的事务数可达数百上千个

多事务执行方式

事务串行执行
每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行
不能充分利用系统资源,发挥数据库共
享资源的特点

交叉并发方式(Interleaved Concurrency)
在单处理机系统中,事务的并行执行是这些并行事务的并行操作轮流交叉运行

同时并发方式(simultaneous concurrency)
多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行

并发控制机制是衡量一个数据库管理系统性能的重要标志之一

事务是并发控制的基本单位

并发控制机制的任务

■对并发操作进行正确调度
■保证事务的隔离性
■保证数据库的一致性

并发操作带来的数据不一致性

1.丢失修改(Lost Update)
t2售票员的操作,覆盖了t1售票员操作,使数据丢失

2.不可重复读(Non-repeatable Read)
不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果

3.读"脏"数据(Dirty Read
■事务T1修改某一数据,并将其写回磁盘
■事务T2读取同一数据后,T由于某种原因被撤销
■这时T1已修改过的数据恢复原值,T2读到的数据就与	数据库中的数据不一致
■T2读到的数据就为"脏"数据,即不正确的数据


数据不一致性:由于并发操作破坏了事务的隔离性
并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性 

并发控制的主要技术

封锁(Locking)

封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁
加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
封锁是实现并发控制的一个非常重要的技术

基本封锁类型
■排它锁(Exclusive Locks,简记为X锁)
排它锁又称为写锁
若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁
保证其他事务在T释放A上的锁之前不能再读取和修改A

■共享锁(Share Locks,简记为S锁)
共享锁又称为读锁
若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁
保证其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改

时间戳(Timestamp)

乐观控制法

多版本并发控制(MVCC)

封锁协议

在运用X锁和S锁对数据对象加锁时,需要约定一些规则,这些规侧为封锁协议(Locking Protocol)。
何时申请X锁或S锁
持锁时间
何时释放

保持数据一致性的常用封锁协议

三级封锁协议

1.一级封锁协议
事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
·正常结束(COMMIT)
·非正常结束(ROLLBACK)
一级封锁协议可防止丢失修改,并保证事务T是可恢复的。
在一级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不读"脏"数据。

2.二级封锁协议
一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。
二级封锁协议可以防止丢失修改和读"脏"数据在二级封锁协议中,由于读完数据后即可释放s锁,所以它不能保证可重复读。

3.三级封锁协议
一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
三级封锁协议可防止丢失修改、读脏数据和不可重复读。


以上就是今日博客的全部内容了

创作不易,若对您有帮助,可否点赞、关注一二呢,感谢支持.

相关推荐
woshilys25 分钟前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi25 分钟前
SQL注入的那些面试题总结
数据库·sql
建投数据1 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi2 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀2 小时前
Redis梳理
数据库·redis·缓存
独行soc2 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天3 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺3 小时前
分布式系统架构:服务容错
数据库·架构
冷眼看人间恩怨4 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
独行soc4 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘