一.数据库表数据误删除
情况一:之前没有做备份或者忘记做备份了,这种情况下不能恢复误删除的数据
情况二:做了备份并且也配置了归档,这种情况下可以通过备份文件恢复+还原归档日志的方式恢复到指定时间点
模拟测试:
1.查询归档是否开启,若没开启需要开启一下
或者
2.构造数据
3.手动备份,为了方便使用联机备份方式
4.插入数据,记录时间点
5.删除数据,记录时间点
6.恢复备份文件
注意:联机恢复仅支持表级的恢复,全库恢复必须脱机还原
6.1关闭数据库
6.2还原数据库
6.3利用归档日志恢复到删除数据之前的时间点
6.4恢复db_magic
7.启动数据库
8.连接数据库查看数据,确认是否恢复成功
二.ROLL.DBF损坏或者误删除
可以发现删除后还是可以正常操作的
但当重启数据库的时候会发现重启失败,切换到DM软件安装路径下的log目录中,通过日志文件内容查看,是因为ROLL.DBF文件不存在无法启动
此时如果希望能临时正常启动,可以尝试在配置文件中设置PSEG_RECV=0,这样在下次启动的时候会跳过回滚事务,看下是否可以正常启动起来。但就算正常启动了也会有风险,未提交的事务将无法回滚,此参数详细的介绍可以参考DM安装目录下的DBA手册
设置了跳过回滚事务后,不管有没有手动创建ROLL.DBF,数据库也无法正常启动
情况一:
有备份文件并且开启了归档日志,此时可以考虑按照误删除ROLL.DBF文件数据库的初始化参数来初始化一个新的数据库,并且把误删除的数据库的备份文件和归档日志文件拷贝到新的数据库下,通过还原备份+恢复归档日志的方式来恢复
测试:
1.查看之前旧实例的初始化参数
2.按照旧实例的参数初始化一个新的实例
3.在新实例下创建好备份文件和归档日志文件的目录
4.把旧实例的备份文件和归档日志文件分别拷贝到新实例下
5.利用拷贝的旧实例的备份文件和归档日志文件恢复数据
6.启动新实例,查看数据是否正常
可以看到恢复成功,数据文件都存在
情况二:
未备份或者备份文件有丢失、损坏,这种情况看网上说法可以以误删除的数据库的初始化参数为标准初始化一个新的实例,然后通过修改永久魔术值的方式来恢复,这种情况下很可能丢失数据(经多次测试恢复失败)
测试:
1.查看旧实例的初始化参数,以旧实例的初始化参数为标准初始化一个新实例
2.查看旧实例的db_magic
3.修改新初始化实例的SYSTEM.DBF文件中的db_magic为旧实例的db_magic,除了SYSTEM.DBF文件外,两个redo log(dmtest01.log和dmtest02.log)也需要修改
4.将新实例的ROLL.DBF文件、两个redo log(dmtest01.log和dmtest02.log)拷贝到旧实例上并覆盖,注意查看文件权限,若权限不对需要修改一下
5.启动旧实例,发现启动失败
三.redolog误删除或者损坏
情况一:有备份文件并且开启了归档日志文件,则初始化新的文件并且导入备份,并且利用归档文件还原恢复数据
情况二:没有备份文件,则可以考虑以误删除的数据库的初始化参数为标准初始化一个新的实例,然后通过修改永久魔术值的方式来恢复,这种情况下很可能丢失数据
测试:
1.构造测试数据
2.删除test02.log
3.重启数据库进程,会发现报错了
4.查看误删除的实例的初始化参数,以此参数为标准初始化一个新的实例
5.查看旧实例的db_magic
6.修改新实例的db_magic,test01.log和test02.log文件都需要修改
7.把新实例的test01.log和test02.log文件拷贝到旧实例中并且覆盖,注意查看文件权限,若权限不对需要修改一下
8.启动旧实例,查看是否正常
9.登录旧实例,查看数据是否正常
经验证,确认恢复成功
更多资讯请上达梦技术社区了解: