数据库oracle-----备份恢复(数据文件丢失恢复)

oracle数据文件丢失下的恢复

背景说明:
   我们经常遇到这样的问题,比如我建立一个表空间larmss 一个数据文件larmss.dbf ,空间里面有我们的系统用户和数据,忽然那天不知道撒原因,数据文件
larmss.dbf丢失了,而我没有这个文件的备份,我们当如何把数据找回来的问题。
      很幸运,oracle数据的恢复机制,可以帮你完成这样功能。不过,做这样一件事是有前提的。
前提就是,必须是你先把数据库设置为归档模式,再建立的表空间和用户。这里就不在描述归档模式是撒了,先说说为啥先建立了对象,后归档,
这种情况是不能恢复。
这个道理很简单:比如你现在在写一部小说,每天写完后,都会在一个备份文件夹里面做今天的小说备份,也只有这样,你才可能那天你的小说感染病毒后才能从
你的备份文件中找到恢复,如果你是写了一个月后,才想起建个文件夹来备份每天的写作数据,忽然那天你小说不见了,你想恢复到目前的状态,你能从你的备份
文件夹里找到全部数据吗?答案是否定的,应为你有一个月没有备份,那一个月的数据时找不会来的。数据库的归档原理大概也是如此。
   现在为了测试恢复效果,来模拟下恢复环境,为此我们要做下面几件事
   1.将数据库设置成为归档模式
   2.建立表空间,数据文件,用户和一张表。
   3.删除表空间的数据文件。
   4.恢复数据文件
   5.检查恢复是否完成。

任务1: 设置归档
        大概说下,设置归档一般分两步:1.设置归档路径(数据库参数log_archive_dest_1="location='E;\oracle\arhcive'",归档格式参数 log_archive_format)
 2.参数设置好后,启动数据库为归档方式
         具体过程:
         a.查看归档是否启动的方法  命令方式:SQL》archive log list;
                                   视图查看: select dbid,name,log_mode from v$database
                                              select * from v$archive_dest//可是设置10个归档路径
         b 设置归档,要修改数据库参数文件,修改两个参数
                      1.ARCHIVE DEST(归档目的地)
                      log_archive_dest_1="location=E:\applicationTool\oracle\product\oradata\PRACTICE\archive";设置归档文件放置的位置
                                
        其中location意味归档将拷贝到本地磁盘位置
                      2.ARCHIVE MODE(归档格式)
                       log_archive_format=%s.arc 其中%s是序列号


       SQL> alter system set log_archive_dest_1="location=E:\applicationTool\oracle\product\oradata\PRACTICE\archive" scope=spfile;
            alter system set log_archive_format="ARC%S_%R.%T" scope=spfile;
       SQL >shutdown immediate
       SQL > startup mount;
       SQL > alter database archivelog;
       SQL > alter database open;
       SQL > archive log list;//查看是否成功
    
      为了查看效果,可以强制数据库日志切换 SQL》alter system switch logfile;多切换几次,去归档目录下,看看是否有文件生成

任务2: 建立表空间,数据文件,用户和表
        SQL》create tablespace larmss datafile 'E:\oracle\data\larmss.dbf' size 20M;
        SQL> create user larmss identified by oracle default tablespace larmss;
        SQl> grant resource,connect to larmss;
        SQL> conn larmss/oracle
        SQL> create table loan(loanno number,loanamt number(10,2));

       向里面插入一些测试数据

任务3: 删除表空间数据文件,模拟坏的环境

        先关闭数据库SQL》shutdown immdeidate;
        再在系统中删除文件E:\oracle\data\larmss.dbf
       
        当你再启动数据库,就会报找不到文件的错误
        SQL》startup
        你可以查看视图select * from v$recover_file 查看错误文件号,在查询select * from v$datafile where FILE#=fileno查看具体那个文件错误。

任务4: 恢复数据文件
      
        一般步骤,先在相应位置从新建立数据文件,再通过修复机制修复数据文件,修复后,挂载数据文件,最后打开数据库
        SQL》startup mount;
        SQL>alter database create datafile 'E:\oracle\data\larmss.dbf'
        SQL>set autorecovery on;
        SQL>recover datafile 'E:\oracle\data\larmss.dbf';
        SQL>alter database datafile 'E:\oracle\data\larmss.dbf' online;
        SQL>alter database open;
      这样数据库就恢复打开了

任务5  检查是否恢复成功
       用用户larmss/oracle 联接,进去看看数据还在没有,在说明恢复成功。

扫描二维码关注公众号,回复: 52076 查看本文章

猜你喜欢

转载自www.cnblogs.com/computech/p/8921558.html