一个归档系统,收到要查询2013年的数据,启动应用程序,发现应用报错数据库文件有问题,我的天啊,这么个老系统,我备份还在不。。心慌但必须冷静
1. 启动应用程序报错:
ORA-00376: 此时无法读取文件 108
ORA-01110: 数据文件 108…
登录数据库,查询相关的数据也提示报错
2. 追查根源
(1) 查看物理文件
数据文件还在磁盘,更新时间显示6月26日凌晨,这个时间点,刚好是数据库正在做备份的时间,可能是当时断电导致
(2)查看文件的状态
select name, status from v$datafile order by file#;
PS: 查询发现除了系统表空间,其他文件都处于recover状态,需要进行介质恢复
3. 恢复数据
3.1 尝试恢复数据库文件108,遭遇ORA-00308
SQL> select file#,name,status from v$datafile where file#=108;
FILE# NAME STATUS
---------- -------------------------------------- -------
108 E:\ORADATA\XX\XXX_02.DBF RECOVER
> rman target /
RMAN > recover datafile 108;
ORA-00279: 更改 333025732781 (在 06/14/2024 05:20:42 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ARCHIVELOG\ARC68419_0805202371.001.ARC
ORA-00280: 更改 333025732781 (用于线程 1) 在序列 #68419 中
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00308: 无法打开归档日志 'D:\ARCHIVELOG\ARC68419_0805202371.001.ARC'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
PS: 告警,提示找不到相关规定文件,查看磁盘的物理文件确实不存在。查看归档的备份,有相关日期的,先恢复归档日志
3.2 恢复相关归档日志
(1)查看需要进行恢复的归档日志,有220个文件
select g.SEQUENCE#,g.NAME,g.FIRST_TIME,g.NEXT_TIME from v$archived_log g
where g.SEQUENCE#>=68419
(2)恢复归档日志,登录rman进行恢复,由于数据量大,按服务器配置,开启并行 (时间比较久,具体看归档的大小)
run
{
set archivelog destination to 'D:\archivelog';
allocate channel ch1 type disk;
allocate channel ch2 type disk;
allocate channel ch3 type disk;
allocate channel ch4 type disk;
allocate channel ch5 type disk;
allocate channel ch6 type disk;
allocate channel ch7 type disk;
allocate channel ch8 type disk;
restore archivelog from logseq 68421 until logseq 68636;
release channel ch1;
release channel ch2;
release channel ch3;
release channel ch4;
release channel ch5;
release channel ch6;
release channel ch7;
release channel ch8;
}
3.3 恢复数据文件
RMAN> recover datafile 108 ;
启动 recover 于 22-7月 -24
使用通道 ORA_DISK_1
正在开始介质的恢复
存档日志线程 1 序列 68419 已作为文件 D:\ARCHIVELOG\ARC68419_0805202371.001.ARC 存在于磁盘上
存档日志线程 1 序列 68420 已作为文件 D:\ARCHIVELOG\ARC68420_0805202371.001.ARC 存在于磁盘上
。。。省了一批
存档日志文件名 =D:\ARCHIVELOG\ARC68419_0805202371.001.ARC 线程 =1 序列 =68419
存档日志文件名 =D:\ARCHIVELOG\ARC68420_0805202371.001.ARC 线程 =1 序列 =68420
介质恢复完成, 用时: 00:00:02
完成 recover 于 22-7月 -24
3.4 online数据文件
SQL> alter database datafile 108 online ;
数据库已更改。
再次查询数据文件状态,都是online,已正常
SQL> select name, status from v$datafile order by file#;
到此,已经完成修复,应用正常启动。马上来一个全备(备份一定要有)