1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 达梦数据库之redo日志文件损坏修复方法

达梦数据库之redo日志文件损坏修复方法

时间:2020-09-24 03:31:03

相关推荐

达梦数据库之redo日志文件损坏修复方法

一、什么是redo日志?

redo日志即重做日志,重做日志是在DM数据库中添加、删除、修改对象,或者改变数据,DM都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中。重做日志文件以log为扩展名。每个DM数据库实例必须至少有2个重做日志文件,默认两个日志文件为DAMENG01.log、DAMENG02.log,这两个文件循环使用。 重做日志文件因为是数据库正在使用的日志文件,因此被称为联机日志文件。 重做日志文件主要用于数据库的备份与恢复。理想情况下,数据库系统不会用到重做日志文件中的信息。然而现实世界总是充满了各种意外,比如电源故障、系统故障、介质故障,或者数据库实例进程被强制终止等,数据库缓冲区中的数据页会来不及写入数据文件。这样,在重启DM实例时,通过重做日志文件中的信息,就可以将数据库的状态恢复到发生意外时的状态。

重做日志文件对于数据库是至关重要的。它们用于存储数据库的事务日志,以便系统在出现系统故障和介质故障时能够进行故障恢复。在 DM数据库运行过程中,任何修改数据库的操作都会产生重做日志,例如,当一条元组插入到一个表中的时候,插入的结果写入了重做日志,当删除一条元组时,删除该元组的事实也被写了进去,这样,当系统出现故障时,通过分析日志可以知道在故障发生前系统做了哪些动作,并可以重做这些动作使系统恢复到故障之前的状态。

二、redo日志坏了怎么办?

既然redo日志对于数据库来说如此重要,那么当redo日志损坏了,该如何修复呢,下面就让我们来通过实验回答一下这个问题。

故障模拟:

数据库为单机,直接将redo01.log删除,来模拟数据库的redo日志文件损坏。

正常情况下如果数据库重启后会报错

针对redo损坏有如下解决办法:

(1)、根据数据库文件夹下dminit+日期时间.log(例如:dminit0524112539.log)的文件查看数据库的各个参数,重新初始化数据库;

[dmdba@test DAMENG]$ more dminit0524112539.log start init database: V8, -05-24 11:25:39init params:db path: /home/dmdba/190data/DAMENGdb name: DAMENGauto overwrite: 0page size: 8192extent size: 16time zone: +08:00string case sensitive: 1charset: 0length in char: 0page check mode: 0priv flag: 0rlog enc flag: 0use new hash: 1blank pad mode: 0sec priv mode: 0huge with delta: 1rlog gen for huge: 0pseg_mgr_flag: 0log file path: /home/dmdba/190data/DAMENG/DAMENG01.loglog file path: /home/dmdba/190data/DAMENG/DAMENG02.logcreate ini file /home/dmdba/190data/DAMENG/dm.ini success.create rlog file /home/dmdba/190data/DAMENG/DAMENG01.log success.create rlog file /home/dmdba/190data/DAMENG/DAMENG02.log success.SYSTEM file : /home/dmdba/190data/DAMENG/SYSTEM.DBFMAIN file : /home/dmdba/190data/DAMENG/MAIN.DBFROLL file : /home/dmdba/190data/DAMENG/ROLL.DBFcreate dm database success. -05-24 11:25:42

(2)、使用该参数重新初始化数据库:

[dmdba@test bin]$ ./dminit path=/opt/dm8/data extent_size=32 page_size=32 port_num=5241initdb V8db version: 0x7000cfile dm.key not found, use default license!License will expire on -03-26Normal of FASTNormal of DEFAULTNormal of RECYCLENormal of KEEPNormal of ROLLlog file path: /opt/dm8/data/DAMENG/DAMENG01.loglog file path: /opt/dm8/data/DAMENG/DAMENG02.logwrite to dir [/opt/dm8/data/DAMENG].create dm database success. -05-31 14:37:47

(3)、将新初始化的数据库的redo日志拷贝到要修复数据库文件夹下(拷贝前对要修复数据库的原redo日志做好备份)

(4)、替换后,利用dmmdf 修改redo日志的db_magic的值:

dmmdf的使用方法如下:

[dmdba@test bin]$ ./dmmdf helpFormat: ./dmmdf KEYWORD=valueExample: ./dmmdf TYPE=1 FILE=/opt/data/DAMENG/SYSTEM.DBFKeyword Explanation--------------------------------------------------------------------------------TYPEtype1: for dbf2: for rlog3: for original bak4: for bakset meta5: for bakset bkp6: for bakset7: for database degradesscope=1: Only supports from 0x0007000A to 0x00070009, file is dm.ctl pathscope=2: Only supports from 0x0007000B to 0x0007000A, file is dm.ini pathscope=3: Only supports from 0x0007000C to 0x0007000B for single node database, file is dm.ini path8: for rlog degrades (Only supports from 0x7006 to 0x7005)9: for specified database upgrade(Only supports from V8.1.1.88(V7.1.7.88) to V8.1.1.100(V7.1.7.100)FILEfile pathDCR_INI dmdcr.ini pathDFS_INI dmdfs.ini pathSCOPEscope for database degrades when type=7HELPshow this help info--------------------------------------------------Example: ./dmmdf TYPE=1 FILE=/opt/data/DAMENG/SYSTEM.dbf./dmmdf TYPE=2 FILE=/opt/data/DAMENG/DAMENG01.log./dmmdf TYPE=3 FILE=/opt/data/DAMENG/bak/dmdb.bak./dmmdf TYPE=4 FILE=/opt/data/DAMENG/bak/bset/nbak.meta./dmmdf TYPE=5 FILE=/opt/data/DAMENG/bak/bset/nbak.bak./dmmdf TYPE=6 FILE=/opt/data/DAMENG/bak/bset./dmmdf TYPE=7 SCOPE=1 FILE=/opt/data/DAMENG/dm.ctl./dmmdf TYPE=7 SCOPE=2 FILE=/opt/data/DAMENG/dm.ini./dmmdf TYPE=7 SCOPE=3 FILE=/opt/data/DAMENG/dm.ini./dmmdf TYPE=8 FILE=/opt/data/DAMENG/dm.ini./dmmdf TYPE=9 FILE=/opt/data/DAMENG/dm.ini

通过dmmdf查看原库的db_magic值:

[dmdba@test bin]$ ./dmmdf type=1 file=/home/dmdba/190data/DAMENG/SYSTEM.DBFdmmdf V8**********************************************************1 db_magic=8711940122 next_trxid=172613 pemnt_magic=354364976**********************************************************Please input which parameter you want to change(1-3), q to quit: q

(4)、修改DAMENG01.log的db_magic值

[dmdba@test bin]$ ./dmmdf type=2 file=/home/dmdba/190data/DAMENG/DAMENG01.logdmmdf V8**********************************************************1 sig = DMRLOG2 ver = 70063 chksum = 923561954 sta = 15 n_magic = 76 db_magic = 9412857 len = 2684354568 free = 54609929 clsn = 3078210 clsn_fil = 011 clsn_off = 546099212 pemnt_magic = 35436497613 fil_id = 015 next_seq = 346916 g_next_seq = 346917 arch_lsn = 018 arch_seq = 019 dbversion = 0x7000c20 min_exec_version = V8.1.1.121 min_dct_version = 422 p_db_magic = 023 n_apply_ep = 024 apply_info_lsn = 0pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)25 recv_p_db_magic = 026 recv_n_apply_ep = 0recv_pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)recv_apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)**********************************************************You can only reset sta(4) or db_magic (6) or clsn (9) or clsn_fil(10) or clsn_off(11) or pemnt_magic(12) or fil_id(13) or next_seq(15) or g_next_seq(16) or p_db_magic(20) or n_apply_ep(21).Please input the num which one you want to change, q to quit: 6Input the new value: 871194012**********************************************************1 sig = DMRLOG2 ver = 70063 chksum = 13092598664 sta = 15 n_magic = 76 db_magic = 8711940127 len = 2684354568 free = 54609929 clsn = 3078210 clsn_fil = 011 clsn_off = 546099212 pemnt_magic = 35436497613 fil_id = 015 next_seq = 346916 g_next_seq = 346917 arch_lsn = 018 arch_seq = 019 dbversion = 0x7000c20 min_exec_version = V8.1.1.121 min_dct_version = 422 p_db_magic = 023 n_apply_ep = 024 apply_info_lsn = 0pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)25 recv_p_db_magic = 026 recv_n_apply_ep = 0recv_pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)recv_apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)**********************************************************Do you want to quit and save the change to file (y/n): ySave to file success!

同理DAMENG02.log也按照此方法修改。

(5)、正常重启数据库。

[dmdba@test bin]$ ./DmServiceDM_5240 startStarting DmServiceDM_5240: [ OK ][dmdba@test bin]$

(6)、此情况重启的数据库可能无法进行正常的写操作,所以必须重新建新库,尽快将数据迁移到新库中再使用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。