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;

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIxOTE2MDMxNzg2OS0xNDY4NjA0NTY4LnBuZw==

测试一下我先建一个表;

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;

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIxOTE2MTczOTU2Mi0xMjg3MzA4NDA2LnBuZw==

select name, open_mode from v$database;

col name for a55

select file#, name from v$datafile;

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIxOTE2Mjc1ODcyNy0xNTg5MjM2MzI2LnBuZw==

删除数据文件

! 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

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIxOTE2MzA0MzkyOS03NTYwMTQyMDIucG5n

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

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIxOTE3NDk0NzM5My0xOTI2NzgxNC5wbmc=

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

ps -fe|grep ora_dbw

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIxOTE3MTYwOTY2Ny0xNjI0NzQxODY5LnBuZw==

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIxOTE3MTUxMjQ5Mi0yMDExMDk2Ni5wbmc=

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIxOTE3MTcxMTgxMi0xMzUwNDU0OTA3LnBuZw==

chown -R oracle:oinstall o1_mf_example_hnz0crm9_.dbf

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIxOTE3NDMzNDk4My0xOTk5MDU5OTM0LnBuZw==

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

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

select file_name from dba_data_files;

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIyMjE0NTEyNTg0MC0xNDI4MjE1ODkxLnBuZw==

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

rm -fr *

ls -lh

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIyMjE0NTI0MTk2MS0xNTQ2MTc1MDg0LnBuZw==

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIyMjE0NTc1MTM0Mi0xOTEzNjE1MjYyLnBuZw==

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

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIyMjE0NTg1NDM4MS0xMjExOTU4MDQ4LnBuZw==

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

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIyMjE1MDExMTU2NC01MjIxNzE2MTkucG5n

select file#, checkpoint_change# from v$datafile;

select file#, checkpoint_change# from v$datafile_header;

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIyMjE0NTYzNDU5NC0xNTMzNzg0Nzg0LnBuZw==

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

进行在线恢复。

recover database until scn 2314719;

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIyMjE1MDIzODg2My0zODg2Mjg2MTcucG5n

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

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIyMjE1MTUxMDE3MS05NTM0Nzk1MDYucG5n

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIyMjE1MTUzNzY4Ny01NDMxMjUyNjYucG5n

img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTMzOTU2My8yMDIwMTIvMTMzOTU2My0yMDIwMTIyMjE1MTYwMDI0NS0zNzQ2MzI5MS5wbmc=

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

三.建议

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值