目录
1 简介 1
2 REDO的整体流程 1
3 REDO日志损坏后如何修复 2
3.1 数据库有备份时(有备份) 2
3.2 数据库无备份时(可能会造成数据丢失) 4
3.2.1 修改dm.ini参数 4
3.2.2 初始化实例 4
3.2.3 REDO日志拷贝 4
3.2.4 查看源实例魔术值 5
3.2.5 修改REDO魔术值 5
4 总结 7
简介
REDO日志即重做日志,重做日志是在DM数据库中添加、删除、修改对象,或者改变数据,DM都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中。重做日志文件以log为扩展名。每个DM数据库实例必须至少有2个重做日志文件,默认两个日志文件为DAMENG01.log、DAMENG02.log,这两个文件循环使用。重做日志文件因为是数据库正在使用的日志文件,因此被称为联机日志文件。重做日志文件主要用于数据库的备份与恢复。理想情况下,数据库系统不会用到重做日志文件中的信息。在发生不可控因素时,需要重启DM实例,数据库会通过重做日志文件中的信息,将数据库的状态恢复到发生意外时的状态。
REDO的整体流程
先将原始数据从磁盘中读入内存中来,修改数据的内存拷贝。
生成一条重做日志并写入redo log buffer,记录的是数据被修改后的值。
当事务commit时,将redo log buffer中的内容刷新到 redo log file,对 redo log file采用追加写的方式。
定期将内存中修改的数据刷新到磁盘中。
图2-1 REDO整体流程
REDO日志损坏后如何修复
数据库有备份时(有备份)
当数据库存在一个或多个全量备份的时候,我们可以DMRMAN脱机备份还原工具进行对数据库的备份进行恢复,恢复后可再通过每日增量备份及归档文件使数据库恢复到最新的数据。
./dmrman //进入脱机备份还原工具
CHECK BACKUPSET '/dmdata/fullbak'; //检验备份是否有效
RESTORE DATABASE '/dmdata/dmdb/dm.ini' FROM BACKUPSET '/dmdata/fullbak'; //通过全备文件还原数据库数据
RECOVER DATABASE '/dmdata/dmdb/dm.ini' WITH ARCHIVEDIR '/dmdata/arch'; //通过归档使数据库还原最新状态
RECOVER DATABASE '/dmdata/dmdb/dm.ini' UPDATE DB_MAGIC; //更新数据库魔术值,每次还原后都需要更新,但是更新后原备份将无法使用,建议每次还原完成之后再做一次全量备份 |
图3-1 数据库无法启动
图3-2 数据库恢复成功
图3-3 数据库启动成功
数据库无备份时(可能会造成数据丢失)
修改dm.ini参数
在dm.ini文件中将PSEG_RECV参数修改为 0,(PSEG_RECV)系统故障重启时,对活动事务和已提交事务的处理方式。0:跳过回滚活动事务和PURGE已经提交事务的步骤。在回滚表空间出现异常、损坏、系统无法正常启动时,可将PSEG_RECV设置为0,让系统启动;但存在一定风险,未提交事务的修改将无法回滚,破坏事务的原子性;另外,已提交未 PURGE的事务,将导致部分存储空间无法回收;1:回滚活动事务并PURGE已经提交事务;2:延迟PURGE已提交事务,延迟回滚活动事务;3:回滚活动事务,延迟PURGE 已提交事务。
图3-4 修改参数成功
初始化实例
查看源库的初始化参数(在数据库实例所在目录下查看dminit+日期时间.log文件),并新初始化一个库,初始化参数(页大小、簇大小、大小写敏感、字符集等)和原库一样
图3-5 初始化另外一个实例
REDO日志拷贝
将新初始化库的DAMENG01.log、DAMENG02.log文件拷贝到原来的环境中。
图3-6 REDO日志的拷贝
查看源实例魔术值
使用dmmdf工具获取db_magic并记录下来,工具位于DM安装目录下的bin目录。
./dmmdf TYPE=1 FILE=/dmdata/dmdb/SYSTEM.DBF |
图3-7 查看魔术值
修改REDO魔术值
使用dmmdf工具设置DAMENG01.log的db_magic(通过序号进行确认修改选项,修改成功后输入"y"保存后便可启动数据库,REDO01与02的均要修改,且REDO魔术值必须一致)
./dmmdf TYPE=2 FILE=/dmdata/dmdb/DAMENG01.log |
图3-8 修改成功
图3-9 启动实例成功