目录
之前的几篇文档,主要讲述了数据库的安装和目录层次的调整。有了前期的基础知识的铺垫以后,本篇文档重点记录当遇到数据库无法启动或者启动报错的处理方案。
1、对备份的层级个人理解
全库备份:指对全库进行备份,包括:数据文件、控制文件、参数文件等备份。
增量备份-0级:是指对全库进行level 0级别的备份。
增量备份-1级:在增量备份0级基础之上,对全库进行level 1级别的备份。
同理,下一个增量1级备份是在前一个1级增量1级备份基础之上,备份其发生变化的数据块。
使用RMAN进行0级备份和1级备份,语句如下:
backup as compressed backupset incremental level=0 database format '/home/oracle/backup/inc0_%d_%I_%s_%p_%T.bak';
backup as compressed backupset incremental level 1 database format '/home/oracle/backup/inc1_%d_%I_%s_%p_%T.bak';
2、数据库无法启动问题恢复
2.1、CDB级别的数据文件丢失
首先使用rman命令进行0级和1级的增量备份
本次模拟将system01.dbf改成system01.dbf.bk
打开数据库的时候报错,数据库无法启动。
处理方案:
1、关闭数据库并启动到mount状态(shutdown immediate&& startup mount)
2、使用rman着手恢复数据库
run {
restore database;
recover database;
}
从上图可以清晰的看到:先进行0级的恢复,在进行1级的恢复,最后恢复日志信息。
验证是否恢复:
本次数据恢复成功,数据库启动无报错。
2.2、PDB级别的数据库文件丢失
我们将整个pdb01文件命名为pdb01bk
从上图可以看到,pdb01已经无法打开,同理先关闭数据库,开启到mount状态进行修复。
本次恢复报错:
报错的原因也很简单:我们的pdb是由我们自行管理采用非OMF模式的,oracle不会帮助我们创建目录,所以这里需要手动创建pdb01目录,授权,在进行恢复。
本次pdb级别的数据文件丢失恢复成功。
2.3、参数文件丢失
首先,参数文件记录的是整个cdb的启动信息,开启到nomount状态需要读取。在做备份的时候可以直接cp到别的目录。
2.4、控制文件丢失
控制文件记录的是数据库的名称、数据文件的位置等信息,一旦丢失,数据库将宕机。可以做一个控制文件的多路复用,本来只有1份,可以复制N份,我这里存了2份。
# 测试控制文件丢失,无法关闭数据库,无法rman。。。
# 重启服务器或者kill掉进程,在进行rman恢复就报错了。理由很简单,该命令是恢复数据库数据文件的,即使其在备份的时候自动备份了控制文件,但没有控制文件就无法找到数据文件,就无法恢复!
问题处理:
1、通过多路复用机制,重新拷贝一个过来使用
2、通过backup命令当数据库启动到nomoun状态的时候进行rman恢复
backup current controlfile format '/home/oracle/backup/control_%d_%I_%T_%t_%s_%p.ctl';
restore controlfile from '/home/oracle/backup/control_CDB_2297602219_20241001_1181194326_48_1.ctl';
本次数据恢复成功!
2.5、测试小结
1、恢复数据文件的时候,把数据库开到mount状态;
2、进行PDB恢复的时候,先检查目录情况,确认目录存在,权限正常,即可着手恢复。
3、参数文件可以通过物理备份,直接复制到其他磁盘。
4、控制文件可以做多路复用,文件丢失可以从其他的路径拷贝,也可以在做0级1级备份的时候通过backup命令备份,将数据库启动到nomount状态进行恢复。