首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微头条
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
数据库
›
Oracle
›
【数据库】数据库恢复技术
返回列表
发新帖
【数据库】数据库恢复技术
[复制链接]
发表于 2025-7-8 08:38:53
|
显示全部楼层
|
阅读模式
数据库
恢复技术
实现恢复的焦点是利用冗余,也就是根据冗余数据重建不精确数据。
事件
事件是一个
数据库
操作序列,是一个不可分割的工作单元,是恢复和并发的基本单元。
在关系
数据库
中,一个事件是一条或多条SQL语句,也可以包含一个或多个程序。一个程序通常包含多个事件。
可以显式的界说一个事件:
BEGIN TRANSACTION
SQL 语句1
SQL 语句2
……
COMMIT|ROLLBACK
复制
代码
COMMIT是提交事件,ROLLBACK是回滚。
事件具有四个非常紧张的特性,即ACID特性:
原子性(Atomicity) 原子性是指,事件要不全部完成,要不全部取消。如果事件失败,会回滚到事件之前。
一致性(Consistency) 一致性是指,只有合法的数据才能写入数据库。
隔离性(Isolation) 隔离性是指,如果两个事件同时执行,那么执行次序不影响执行结果。
持续性(Durability) 持久性是指,一旦事件提交,数据必须保存在数据库之中。
事件一般有五种状态,其状态图如下:
故障和恢复
常见的故障有四种:事件内部的故障、体系故障、介质故障、计算机病毒。
事件内部的故障有些是通过事件程序自己发现的,有些是非预期的。比如,有一个事件,从A转账给B。有下面的事件程序:
BEGIN TRANSACTION
BALANCE = BALANCE - 100
IF (BALANCE < 0) THEN {
ROLLBACK
} ELSE {
读取用户乙的余额BALANCE1
BALANCE1 = BALANCE + AMOUNT
写回BALANCE1
COMMIT
}
复制
代码
如果出现了余额不敷,就可以回滚,保证数据库状态正常,而不是只减了甲的钱却不影响乙的钱。
有的时间事件故障是非预期的,比如运算溢出、死锁、违反完整性限定。这类故障一般利用撤销事件(UNDO)。
体系故障是造成体系克制运转的任何事件,使得体系要重新启动。这个时间,体系运行被粉碎,事件非正常克制,不粉碎数据库,缓存区信息丢失。
这种体系故障可能是硬件错误或操作体系故障引起的。如果发生故障的时间事件未提交,那么直接UNDO未完成事件;如果已提交但缓冲区未写入磁盘,那么进行REDO。
介质故障是外存故障,比如磁盘损坏、磁头碰撞、操作体系潜在错误、瞬时强磁场干扰。一般须要装入介质故障前某个时间的数据副本,重做全部成功事件。
计算机病毒是人为故障或粉碎。
数据转储
一、静态转储和动态转储
在没有运行事件的时间,进行的就是
静态转储
。转储开始前数据库一致,并且期间不能对数据库进行存取和修改。这种方法实现简单,但是降低了数据库的可用性,因为新的事件必须等转储竣事。
如果将转出操作和用户事件并发执行,进行的就是
动态转储
。转储期间可以进行存取修改,这种方法无需等待正在运行的用户事件,也不会影响新事件运行。但是动态转储不能保证副本中数据的精确性。
因此,做动态转储须要把各事件的修改活动记下来,创建日记,用后备副本加上日记使得数据库恢复。
二、海量转储与增量转储
海量转储是每次转储全部数据库,增量转储是只转储前次转储后的数据。
从恢复角度来看,海量转储更方便,但是数据库很大的时间增量转储更有用。
日记
日记是记录事件对数据库更新操作的文件。
一、日记文件的格式和内容
一般来说,日记有记录为单元,也有以数据块为单元。
以记录为单元的日记内容包含:
事件开始标记
事件竣事标记
事件全部更新操作
这样的称为一个日记记录。每条日记记录又分成
事件标识(表明事件种类)
操作类型(插入、删除、修改)
操作对象(记录内部标识)
更新前数据的旧值(对插入操作来说是空)
更新后数据的新值(对删除操作来说是空)
以数据块为单元的日记文件,每条日记记录内容是
事件标识
被更新的数据块
二、日记文件的作用
日记文件可以进行事件故障恢复、体系故障恢复、帮忙后备副本进行介质故障恢复。
下面是一个用静态转储副本和日记文件进行恢复的例子。
在静态转储的根本上,得到一个一致性副本,然后发生故障。那么重新运行全部事件,就可以把数据库恢复到一致状态。
三、登记日记文件
登记日记的次序须要严格按照并行事件执行的时间次序。必须
先写日记文件,后写数据库
。
这是因为,如果在二者之间故障发生了,先写数据库,这个记录就无法恢复;如果先写日记,只须要做一次UNDO。
四、故障的恢复
(1)事件故障
恢复事件故障,起首反向扫描文件日记,然后查找事件的更新操作。接下来,对事件更新操作进行逆操作,把更新前的值重新写入。
继续扫描文件日记,查找事件别的操作,直到读到事件开始标记。
(2)体系故障
起首正向扫描日记,然后创建两个队列。第一个叫做REDO队列,第二个叫做UNDO队列。REDO队列存放故障发生前的已经COMMIT的事件,UNDO队列存放尚未发生的队列。
对UNDO队列的事件同一进行UNDO处置惩罚,也就是在数据库中储存更新前的值;对REDO队列的事件同一做REDO处置惩罚,把更新后的值写入数据库。
(3)介质故障
介质故障一般先重装数据库,然后重做已完成的事件。
一般来说,可以装入最新的后备数据库副本。静态副本可以直接装入,动态副本还须要装入转储时的日记文件副本。
介质故障恢复每每须要DBA的介入,重装最近转储的副本和各日记文件副本,执行体系提供的恢复命令。
查抄点
之前的日记恢复技术,搜刮日记须要大量时间,同时REDO也大量耗费了时间。因此,具有查抄点的恢复技术是常见的技术。
创建查抄点一般有两种,可以是按固定时间间隔定期创建,也可以按照某种规则,比如日记文件写满一半创建一个查抄点。查抄点实际上就是一个标记,事件TTT在查抄点之前提交,那么TTT已经写入了数据库,无需进行REDO。
T3、T5在故障发生时未完成,所以撤销;T2、T4在查抄点之后提交,须要REDO;T1则无需REDO。
用查抄点的恢复步调如下:
找到最后一个查抄点记录的地址
由查抄点记录得到正在执行的事件ACTIVE-LIST,创建UNDO和REDO LIST,并把ACTIVE LIST放入UNDO LIST
正向扫描日记文件,新开始的事件放入UNDO LIST,提交事件放到REDO LIST
UNDO LIST进行UNDO,REDO LIST进行REDO
数据库镜像
DBMS主动把整个数据库或其中关键数据复制到另一个磁盘上,由DBMS保证镜像数据和
主数据
库的一致性。在出现介质故障的时间,可以由镜像磁盘继续利用,同时DBMS利用磁盘数据进行恢复,而无需重装数据库副本。
同时,在没有出现故障的时间,数据库镜像也可以用于并发操作,如果一个用户对数据加排他锁,其他用户可以读镜像数据库的数据。
频仍的复制数据会降低效率,所以一般只对关键数据和日记进行镜像。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
回复
使用道具
举报
返回列表
浏览过的版块
分布式数据库
DevOps与敏捷开发
九天猎人
+ 我要发帖
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表