oracle rm -fr datafile 数据文件被误删的场景恢复(没有rman备份)

环境:

Linux release 7.5

oracle19c (无pdb,从11.2.0.4升级上去的)

一:单个非系统表空间的数据文件被删除

我先备份一下,虽然是测试环境。

[oracle@19c ~]$ cat full_backup.sh
source /home/oracle/.bash_profile
dir=$(date +%Y%m%d)
mkdir -p /u01/backup/$dir
rman target / log /u01/backup/rman_fullbackup_`date +%Y%m%d`.log <<EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate channel c5 type disk;
allocate channel c6 type disk;
crosscheck backup ;
delete noprompt expired backup;
backup spfile format '/u01/backup/$dir/spfile_%t_%U.ora';
backup as COMPRESSED BACKUPSET database format '/u01/backup/$dir/full_%t_%U.dbf';
backup current controlfile format '/u01/backup/$dir/cont_%t_%U.ctl';
backup as COMPRESSED BACKUPSET archivelog until time 'sysdate-1/24' format '/u01/backup/$dir/arch_%t_%U.arc';
}
EOF
find /u01/backup/ -type d -name `date +"%Y%m%d" -d "-4 day"`| xargs rm -rf
exit;

 

 

 测试一下我先建一个表;

create table test(id int ,name varchar(100)) tablespace EXAMPLE;

 insert into test select rownum, dbms_random.string('x',20) from dual connect by rownum <=10000;

commit;

select count(*) from test;

 

 

 select name, open_mode from v$database;

col name for a55

 

select file#, name from v$datafile;

 

 

 

 删除数据文件

! rm -fr /u01/app/oracle/oradata/TEST19C/datafile/o1_mf_example_hnz0crm9_.dbf

! ls -h /u01/app/oracle/oradata/TEST19C/datafile/o1_mf_example_hnz0crm9_.dbf

 此时数据库尚未关闭,服务器当然是不能重启了,也就是对应句柄存在,需要linux知识了;删除后,数据文件不要执行OFFLINE语句,因为执行了句柄没有了,跟你关闭操作系统和数据库一样,都不会有了。

 

 

 此时查询操作仍然可以进行,但是写入操作就会报错了。

 ps -fe|grep ora_dbw

 

 

 

 

 

chown -R oracle:oinstall o1_mf_example_hnz0crm9_.dbf 

 

 生产是哪个如果发生了这种情况,需要立马的进行恢复,因为很多业务数据不能够进行更新会报一大堆错误提示。本次测试不需要进行recover操作。

 

二:多个数据文件或者系统表空间数据文件被删

  select file_name from dba_data_files;

 

 

 

 cd /u01/app/oracle/oradata/ORCL/datafile/

rm -fr *

ls -lh

 

同样利用句柄进行删除文件恢, 数据库已经删懵逼了,报警日志有报错,千万不能关闭数据库和操作系统。

 

 

 

 

 

 

 

cp 258 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_hxz2d3nx_.dbf
cp 259 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_hxz2dwqb_.dbf
cp 260 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_hxz2fcs4_.dbf
cp 261 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_hxz2fdtt_.dbf
cp 262 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_temp_hxz2gy96_.tmp

 

 

 select file#, checkpoint_change# from v$datafile;

select file#, checkpoint_change# from v$datafile_header;

 

 

 

 查看数据库数据文件以及数据文件头SCN不一致,需要进行数据库恢复:

进行在线恢复。

recover database until scn 2314719;

 

 

 进行数据库重启,查看是否异常。

   

 由于数据文件头部scn 都一致了,所以直接open就可以了。

 

 

 

 

 经过recover重启后,数据文件SCN一致,进行数据插入没有问题。

 

 

三.建议 

1.其实全库数据文件删除这种情况要是可以把删除的文件恢复回来后,建议立马把数据库中的业务数据导出来,另外重新建一个数据库,导入数据。

 2.rman进行全库备份或者expdp备份是DBA的一个底线,必须要有。

posted @ 2020-12-22 15:30  翰墨文海  阅读(623)  评论(0编辑  收藏  举报