注册
达梦数据库无法启动,利用归档日志进行修复
培训园地/ 文章详情 /

达梦数据库无法启动,利用归档日志进行修复

悉檀 2022/11/15 1863 0 0

在实际生产中,数据库一般都是进行了备份、且开了归档的,所以一旦数据库发生故障,我们就可以通过备份来进行恢复。而有归档,我们甚至可以让数据库恢复到发生故障前的一刻。在达梦数据库中,达梦的DMRMAN工具和达梦的DM控制台工具就可以让数据库恢复到任意的一个时间点或者最新状态。

下面我们模拟数据库发生故障如何修复。
首先,确保数据库的归档是打开的。必须要有归档日志,并且是完整的归档日志。

disql V8
用户名:
密码:


服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 150.150(ms)
SQL>alter DATABASE mount; --修改数据模式为MOUNT模式
SQL>alter database archivelog; --打开数据库归档模式
SQL>alter database add archivelog 'DEST=/dm8/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=0'; --设置归档路径 、文件初始大小64 空间不限制。
SQL>ALTER DATABASE OPEN;

然后对数据库进行备份,
SQL> BACKUP DATABASE BACKUPSET ‘bak_01’;
我们通过删除数据库的SYSTEM.dbf文件来模拟故障。
重启数据库,发现数据库无法启动。

[dmdba@localhost bin]$ ./DmServiceDMSERVER restart
Stopping DmServiceDMSERVER:                                [ OK ]
Starting DmServiceDMSERVER:                                [ FAILED ]
file dm.key not found, use default license!
version info: develop
/dm8/data/DAMENG/SYSTEM.DBF not exist
[dmdba@localhost bin]$


通过DMRMAN工具进行恢复 ,步骤如下
1、停机
2、还原

[dmdba@localhost bin]$ ./dmrman
dmrman V8
RMAN>
RMAN> restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/data/DAMENG/bak/bak_01'
restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/data/DAMENG/bak/bak_01'
file dm.key not found, use default license!
RESTORE DATABASE CHECK......
RESTORE DATABASE,data collect......
RESTORE DATABASE,database refresh ......
RESTORE BACKUPSET [/dm8/data/DAMENG/bak/bak_01] START......
total 5 packages processed...
total 9 packages processed...
RESTORE DATABASE,UPDATE ctl file......
RESTORE DATABASE,REBUILD key file......
RESTORE DATABASE,CHECK db info......
RESTORE DATABASE,UPDATE db info......
total 9 packages processed...
total 9 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 799.614(ms)
RMAN>


3、通过归档恢复

RMAN> recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/data/DAMENG/acrh'
recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/data/DAMENG/acrh'
file dm.key not found, use default license!
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[81610]
EP:0 total 3 pkgs applied, percent: 10%
EP:0 total 6 pkgs applied, percent: 21%
EP:0 total 9 pkgs applied, percent: 32%
EP:0 total 12 pkgs applied, percent: 42%
EP:0 total 15 pkgs applied, percent: 53%
EP:0 total 18 pkgs applied, percent: 64%
EP:0 total 21 pkgs applied, percent: 75%
EP:0 total 24 pkgs applied, percent: 85%
EP:0 total 27 pkgs applied, percent: 96%
EP:0 total 28 pkgs applied, percent: 100%
Recover from archive log finished, time used:0.312s.
EP[0]'s apply_lsn[84748] >= end_lsn[82882]
recover successfully!
time used: 549.972(ms)


4、更新DB_MAGIC

RMAN> recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[84748]
EP[0]'s apply_lsn[84748] >= end_lsn[82882]
recover successfully!
time used: 996.968(ms)
RMAN>

最后,启动数据库并查看之前的数据是否完整。

[dmdba@localhost bin]$ ./DmServiceDMSERVER start
Starting DmServiceDMSERVER:                                [ OK ]

至此,数据库恢复到故障发生的那一刻。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服