oracle user-maneged recovery(二)(二)
-------------------------------- -------- ----------------------------
A NUMBER(38)
损坏的文件不是系统表空间和回滚表空间
7*24小时运行
未导致数据库关闭
SQL> alter tablespace TBS_SF begin backup;
SQL> !cp /database/oradata/skyread/sf01.dbf /home/oracle/sf01.dbf --进行热备
SQL> alter tablespace tbs_sf end backup;
rm -rf /database/oradata/skyread/sf01.dbf --模拟故障系统误删数据文件
SQL> drop table t1; --数据文件不可用
drop table t1
*
ERROR at line 1:
ORA-01116: error in opening database file 26
ORA-01110: data file 26: '/database/oradata/skyread/sf01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
SQL> col NAME for a50
SQL> SELECT d.file# f#, d.name, d.status, h.status
2 FROM v$datafile d, v$datafile_header h
3 WHERE d.file# = h.file#;
F# NAME STATUS STATUS
---------- -------------------------------------------------- ------- -------
1 /database/oradata/skyread/system01.dbf SYSTEM ONLINE
3 /database/oradata/skyread/sysaux01.dbf ONLINE ONLINE
4 /database/oradata/skyread/users01.dbf ONLINE ONLINE
18 /database2/oradata/skyread/TBS_MRPMUSIC01.dbf ONLINE ONLINE
26 /database/oradata/skyread/sf01.dbf ONLINE ONLINE
31 /database2/oradata/skyread/undotbs02 ONLINE ONLINE
SQL> ! cp /home/oracle/sf01.dbf /database/oradata/skyread/sf01.dbf --copy备份的数据文件
SQL> recover datafile 26; --进行恢复出错
ORA-00283: recovery session canceled due to errors
ORA-01124: cannot recover data file 26 - file is in use or recovery
ORA-01110: data file 26: '/database/oradata/skyread/sf01.dbf'
SQL> alter database datafile '/database/oradata/skyread/sf01.dbf' offline drop; --手工offline
Database altered.
SQL> SELECT d.file# f#, d.name, d.status, h.status
2 FROM v$datafile d, v$datafile_header h
3 WHERE d.file# = h.file#;
F# NAME STATUS STATUS
---------- -------------------------------------------------- ------- -------
1 /database/oradata/skyread/system01.dbf SYSTEM ONLINE
3 /database/oradata/skyread/sysaux01.dbf ONLINE ONLINE
4 /database/oradata/skyread/users01.dbf ONLINE ONLINE
18 /database2/oradata/skyread/TBS_MRPMUSIC01.dbf ONLINE ONLINE
26 /database/oradata/skyread/sf01.dbf RECOVER OFFLINE
31 /database2/oradata/skyread/undotbs02 ONLINE ONLINE
6 rows selected.
SQL> recover datafile 26; --再次进行介质恢复
Media recovery complete.
SQL> alter database datafile '/database/oradata/skyread/sf01.dbf' online; --数据文件online
Database altered.
SQL> drop table t1; --恢复正常
Table dropped
这里需要注意的是,在误删了数据文件后,数据并没有自动offline数据文件,有时候可能会自动offline文件,如果没有自动offline
需要手工去offline该文件,还有就是如果一个表空间含有多个数据文件,如果只有某一个数据文件损坏,不影响表空间使用,只是损坏
的数据文件里的数据无法使用。