• 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的一个底线,必须要有。

  • 相关阅读:
    Android -- junit测试框架,logcat获取log信息
    【Android】ADB常用指令与logcat日志
    Android -- UI布局管理,相对布局,线性布局,表格布局,绝对布局,帧布局
    Unicode的解救方案
    第一个程序
    Windows程序设计第五版
    愉快的开始
    图形用户界面入门:EasyGui
    丰富的else语句及简洁的with语句
    异常处理:你不可能总是对的2
  • 原文地址:https://www.cnblogs.com/hmwh/p/14159514.html
Copyright © 2020-2023  润新知