
静态转储。
日志文件的具体作用为:
①事务故障恢复和系统故障恢复必须使用日志文件
②在动态转储方式中必须建立日志文件
③在静态转储方式中,也可以建立日志文件。为保证数据库是可恢复的。
登记日志文件必须遵循两条原则:
①登记的次序严格按并行事务执行的时间次序
②必须先写日志文件,后写数据库。
扩展资料
系统故障恢复的步骤:正向扫描日志文件,找出在故障发生前已提交的事务,将其事务标识记入REDO队列;找出在故障发生时尚未完成的事务,将其事务标识记入UNDO队列;对UNDO 队列中的事务进行UNDO处理,即反向扫描日志文件。
对每一个需要UNDO的事务的更新 *** 作执行逆 *** 作;对REDO队列中的事务进行REDO处理,即正向扫描日志文件,对每一个需要 REDO的事务的更新重新执行日志记录登记的 *** 作。
本文主要介绍了如何从一个不能正常打开的数据库(由于一个/多个数据库文件与其他文件不一致)中提取数据的具体示例 详细内容请大家参考下文
具体案例
一个磁盘损坏了并且丢失了一个数据库文件 从一周前的热备转储数据文件 可是丢失了几个归档日志文件 但是有问题的数据文件包含了最重要的表 采用什么办法才能挽救数据呢
解决方法
每个数据库管理员都知道这是有问题的 一定会丢失数据 因为某些事务丢失了 问题是会丢失多少数据Oracle使用硬线路位置并且由于存在完整性约束问题 因此不允许正常打开数据 但是如果使用非常规的方法让Oracle删除其硬线路属性 那么应该能够提取尽可能多的数据 而通常这会比损失全部数据要好很多
通常假如仅仅丢失了堆表的索引 或者某些能够很容易重建的数据 那么最好的方法应该是删除表空间并重建这些对象然后重新输入 但是如果丢失的数据文件包含了重要数据并且很难恢复 而且只有前一次的备份却又丢失了某些归档日志 那么用户可能希望能够尽可能多的从有问题的表空间恢复数据并且删除和重建表空间
具体步骤如下
对当前拥有的数据进行一个冷备;
转储丢失的数据库文件备份并应用可以应用的日志;
设置未文档化的初始化参数 其允许你在当前状态打开数据库;
执行exp并提取全部可以从有问题的表空间提取的数据;
从先前的冷备转储数据库;
使毁坏的数据文件offline;
执行exp并提取第 步没有提取的额外数据;
在一次从冷备转储;
删除有问题的表空间;
重建有问题的表空间;
使用第四步和第七步提取的数据重建数据;
使用案例描述 ORDTAB表空间的一个数据文件ordtab dbf毁坏 其包含很多
ORDERS表的分区 数据文件热备于July July —至今的某些归档日志丢失
第 步 备份数据库
第 步的任务是冷备当前拥有的任何数据文件 在线重做日志 和控制文件 如果丢失了一个/多个数据文件但是数据库仍然是open的 那么对每个剩余的数据文件进行热备并确保备份期间/之后的归档被安全保存
创建备份后 在关闭数据库之前 备份一下控制文件
ALTER DATABASE BACKUP CONTROLFILE TO TRACE RESETLOGS;
然后打开备份的控制文件 删除第一个#之上的所有行 并删除 RECOVER DATABASE… 到文件结尾的全部
第 步 转储丢失的数据库文件备份并应用日志;
这一步应该转储备份 并应用日志到直到无法在前向滚动 此时如果尝试正常打开数据库 将会得到ORA : must use RESETLOGS or NORESETLOGS option for database open错误
如果尝试执行ALTER DATABASE OPEN RESETLOGS 将会得到ORA 错误 ORA : online backup of file %s needs more recovery to be consistent
lishixinzhi/Article/program/SQL/201311/16189
恢复数据库到之前的某个时间点,必须要有日志备份。
下面是一个使用日志的示例:
create database db1
go
alter database db1 set recovery full
go
backup database db1 to disk='db1bak' with init--首先要对数据库进行全备份,否则checkpoint会阶段inactive的日志(类似于simple recovery)
go
use db1
go
create table t(col int)
go
---一些数据库 *** 作
---一些数据库 *** 作
---一些数据库 *** 作
--假设你在15点15分以后删除了这个表
drop table t
--如果想恢复这个表,需要对数据库进行日志备份
use master
go
backup log db1 to disk='db1trn' with norecovery
go
---然后执行以下 *** 作
use master
go
restore database db1 from disk='db1bak' with norecovery
go
restore log db1 from disk='db1trn' with recovery,stopat='2009-03-08 15:15:00'--这时,数据库恢复到15:15的状态。
1 新建数据库(同名)
2 停掉数据库
3 删除新建数据库的日志文件,用要恢复的覆盖mdf文件
4 启动数据库服务器
5 设置数据库允许直接 *** 作系统表
6 设置数据库为紧急修复模式
update sysdatabases set status=-32768 where dbid=DB_ID('dbDataHome')
7 重建数据库日志文件
dbcc rebuild_log('dbDataHome','D:\Data\dbData_DataLDF')
8 验证数据库一致性(可省略)
dbcc checkdb('dbDataHome')
9.设置数据库为正常状态
exec sp_dboption 'dbDataHome','dbo use only','false'
10 最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。
恢复sqlserver数据库表数据步骤如下:
一、心态:
1、务必冷静,事情已经发生不可慌乱。
2、立即查看当前时间,最好能够精确到秒,并做记录。
3、应立即向直接上级反映此事,不可隐瞒,防止事态扩大。
4、如果权限允许,应当立即停止相关应用,防止有新的数据写入数据库。
二、恢复:
1、构建新数据库以及写入一些数据
2、做一次完整备份,这个是前提,没有一份完整备份文件是无法进行接下来的 *** 作的。
注意:如上图所示,恢复模式一定要说完整,如果是其他类型那恐怕就没有下文了。一般来讲新建数据库的时候,默认不要去改恢复模式这个属性。
3、写入一条新数据。
4、记住此时要记录时间点。
此刻最好看一下系统时间。接下来就要演示如何进行数据恢复。
5、做事务日志备份,做事务日志备份需要注意一下一点,如图所示。
备份模式请选择事务日志,备份路径自行决定
进入选项,将可靠性第1、2勾选,事务日志选择第二个,压缩属性可以不选择点击确定备份成功,此时数据库将显示为正在还原状态
注意:如果备份失败,请检查该数据库是否正在被占用,如果是请kill。
6、还原完整备份。
数据库处于正在还原状态,右键数据库--任务--还原--文件和文件组,选择最近的一次完整备份。此时,需要在“选项”中选择第二种还原方式,具体如下图。
如上图,勾选完整数据备份文件。
如上图,恢复状态选择第二种,从字面意思就知道为什么要选择这种。
7、接着还原备份的事务日志。
完整备份还原完毕,接着要对事务日志进行还原,右键数据库--任务--还原--事务日志,如下图:
还原事务日志的时候需要特别注意“时间点”这个设置,其他不需要设置。
时间点选择为误删数据的时间点之前就可以恢复出误删的数据,所以之前强调要查看一下时间。如下图所示
点击确定,在确定等待还原成功,数据库变成可用状态。如下图。
如果查询发现数据不是你想要的,那么可以重复上述的 *** 作,从备份事务日志开始,然后最后选择时间点的时候在缩小范围。
以上就是关于1 在下列的数据恢复过程中,()是不一定需要日志文件的 A 事物故障恢复B系统故障恢复C动态转储 D静态转储全部的内容,包括:1 在下列的数据恢复过程中,()是不一定需要日志文件的 A 事物故障恢复B系统故障恢复C动态转储 D静态转储、丢失归档日志文件后数据库应当如何恢复[1]、如何恢复数据库到某一时间点的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)