Oracle19C删除数据文件,oracle rm 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 <

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;

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

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

三.建议

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

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

你可能感兴趣的:(Oracle19C删除数据文件)