在实际生产中,数据库一般都是进行了备份、且开了归档的,所以一旦数据库发生故障,我们就可以通过备份来进行恢复。而有归档,我们甚至可以让数据库恢复到发生故障前的一刻。在达梦数据库中,达梦的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 ]
至此,数据库恢复到故障发生的那一刻。
文章
阅读量
获赞