达梦数据库有很多文件日志,数据日志,运行日志,重做日志,归档日志等,其中,重做日志和归档日志是特别重要的两种日志,在备份还原中,误删数据文件,可以选择rman工具直接利用备份集还原,但是误删重做日志,在用rman备份还原时,在restore备份集LSN码时,会报错,不能通过rman工具还原,现在小编介绍下误删重做日志时,还原数据库的方法。
1.重做日志重做日志,又叫 REDO 日志,忠实记录了所有物理页的修改,基本信息包括操作类型、表空间号、文件号、页号、页内偏移、实际数据等。数据库中 INSERT、DELETE、UPDATE等 DML 操作以及 CREATE TABLE 等 DDL 操作最终都会转化为对某些数据文件、某些数据页的修改。因此,在系统故障重启时,通过重做 REDO 日志,可以将数据库恢复到故障时的状态。
DM 数据库默认包含两个扩展名为 log 的日志文件,用来保存 REDO 日志,称为联机重做日志文件。这两个文件循环使用。任何数据页从内存缓冲区写入磁盘之前,必须保证其对应的 REDO 日志已经写入到联机日志文件。
Redo 日志包(RLOG_PKG)是 DM 数据库保存 Redo 日志的数据单元,一个日志包内可保存一个或多个 PTX 产生的 Redo 日志。日志包具有自描述的特性,日志包大小不固定,采用固定包头和可变包头结合的方式,包头记录日志的控制信息,包括类型、长度、包序号、LSN 信息、产生日志的节点号、加密压缩信息、日志并行数等内容。
日志包生成时按照序号连续递增,相邻日志包的 LSN 顺序是总体递增的,但是在 DMDSC集群环境下不一定连续。如果未开启并行日志,RLOG_PKG 包内日志的 LSN 是递增的。如果开启并行日志,一个 RLOG_PKG 包内包含多路并行产生的日志,每一路并行日志的 LSN是递增的,但是各路之间的 LSN 并不能保证 LSN 有序,因此并行日志包内 LSN 具有局部有序,整体无序的特点。
如果有备份文件,可以重新初始化一个新的数据库(初始化参数要和原库一样,比如页大小、大小写敏感、字符集等,这些可以在 DM 数据库安装路径,…/data/DAMENG 目录下以 dminit+日期时间.log 命名的文件中查询),然后将备份文件和归档日志文件拷贝到新的环境,然后再进行备份+归档的还原操作。
具体还原方式可以参考博主另一篇博客:
如果有备份文件,可以重新初始化一个新的数据库(初始化参数要和原库一样,比如页大小、大小写敏感、字符集等,这些可以在 DM 数据库安装路径,…/data/DAMENG 目录下以 dminit+日期时间.log 命名的文件中查询),然后将备份文件和归档日志文件拷贝到新的环境,然后再进行备份+归档的还原操作。
该方式需要备份还原,如果环境允许,可以安装达梦控制台工具进行还原,不需要重新初始化库。
先备份好数据库
删除重做日志文件DAMENG01.LOG
重启数据库失败:
现在开始用达梦控制台工具还原,按照下图1-5顺序进行还原,1是备份集目录,2获取目录后选择该数据库的备份集,然后进行3,4,5顺序还原
点击3还原后输入dm.ini的路径
5,DB_Magic恢复成功
现在去开启数据库,验证是否备份成功
可以看到,数据库恢复成功!
如果没有备份,可以通过修改永久魔术值的方式来恢复,但是这种情况下有可能丢失数据。方法如下:
重新初始化一个新的数据库,(初始化参数要和原库一样,比如页大小、大小写敏感、字符集等,这些可以在 DM 数据库安装路径,…/data/DAMENG 目录下以 dminit+日期时间.log 命名的文件中查询)。
将 中重新初始化的数据库中 DAMENG01.log、DAMENG02.log 文件拷贝到当前丢失 REDO 日志的库目录下。
使用 dmmdf 工具获取 SYSTEM.DBF 的 db_magic,并记录下来。
dmmdf工具在bin目录下
./dmmdf /data/DAMENG/SYSTEM.DBF
使用 dmmdf 工具设置 DAMENG01.log 文件的 db_magic,设置为上个步骤查询到的值。
重新启动库即可。
更多资讯请上达梦技术社区了解: https://eco.dameng.com



