用RMAN做了一次全备后,我往一张表tmp中出入3条数据。然后通过
RMAN恢复后,这3条数据仍然在。我理解的是这样的:
1、之前的做的全备份,应该没有那3条数据啊!恢复的时候怎么会有呢!
2、如果可以有,那做一次备份不就可以了吗?要是数据库坏了,直接恢复就行了
   为什么还要不停的备份呢?

解决方案 »

  1.   

    你写了数据到数据库有没有commit啊??
      

  2.   


    你是怎么用RMAN恢复的,估计你是做的全恢复,当然会恢复到最新的状态呀,所以当然有最新的数据呀。数据库恢复的话,依赖数据文件,控制文件,日志文件和归档文件,如果全备份,应该对这些文件都做备份,如果你只做一次备份的话,那么恢复
    只能基于你这次备份来做,备份后发生的数据改动将会丢失,所以需要定期做备份,当然也可以做增量备份。
      

  3.   

    我用的是全恢复!备份后发生的数据改动将会丢失?
    用RMAN做了一次全备后,我往一张表tmp中出入3条数据。然后通过 
    RMAN恢复后,这3条数据仍然在。我理解的是这样的:
     (这描述的也是备份后的数据啊,不是没有丢失吗)
      

  4.   


    说的有道理,既然楼主是用的rman,那么把你的备份脚本以及recover过程贴出来吧,大家可以参考分析下问题出在哪里!
      

  5.   


    1、做了一次全备份RUN {
     CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
     CONFIGURE CONTROLFILE AUTOBACKUP ON;
     CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'd:/backup/%F';
     ALLOCATE CHANNEL CH1 DEVICE TYPE DISK FORMAT 'd:/backup/%U';
     BACKUP DATABASE SKIP INACCESSIBLE FILESPERSET 10
       PLUS ARCHIVELOG FILESPERSET 20
       DELETE ALL INPUT;
     RELEASE CHANNEL CH1;
     }
     ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK;
     CROSSCHECK BACKUPSET;
     DELETE NOPROMPT OBSOLETE;然后SQL> conn user/jky_rfid;
    已连接。
    SQL> select * from personuser;USERNAME   PASSWORD
    ---------- --------------------
    ybg        1235
    lqh        1232
    zsw        cxlove
    qcx        cxloveSQL> insert into personuser values('xin','xinjiaru');已创建 1 行。SQL> commit;提交完成。SQL> select * from personuser;USERNAME   PASSWORD
    ---------- --------------------
    xin        xinjiaru
    ybg        1235
    lqh        1232
    zsw        cxlove
    qcx        cxloveSQL>
    ==========================SQL> conn /as sysdba;
    已连接。
    SQL> SHUTDOWN IMMEDIATE ;
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    SQL> host del F:\oracle\product\10.2.0\oradata\rfid\rfid;SQL> startup;
    ORACLE 例程已经启动。Total System Global Area  285212672 bytes
    Fixed Size                  1248552 bytes
    Variable Size             100664024 bytes
    Database Buffers          176160768 bytes
    Redo Buffers                7139328 bytes
    数据库装载完毕。
    ORA-01157: 无法标识/锁定数据文件 5 - 请参阅 DBWR 跟踪文件
    ORA-01110: 数据文件 5: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\RFID\RFID'
    Microsoft Windows XP [版本 5.1.2600]
    (C) 版权所有 1985-2001 Microsoft Corp.C:\Documents and Settings\thunder>rman target/恢复管理器: Release 10.2.0.1.0 - Production on 星期一 5月 18 11:27:26 2009Copyright (c) 1982, 2005, Oracle.  All rights reserved.已连接到目标数据库: RFID (DBID=2471066363, 未打开)RMAN> restore datafile 'F:\oracle\product\10.2.0\oradata\rfid\rfid';启动 restore 于 18-5月 -09
    使用目标数据库控制文件替代恢复目录
    分配的通道: ORA_DISK_1
    通道 ORA_DISK_1: sid=155 devtype=DISK通道 ORA_DISK_1: 正在开始恢复数据文件备份集
    通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
    正将数据文件00005恢复到F:\ORACLE\PRODUCT\10.2.0\ORADATA\RFID\RFID
    通道 ORA_DISK_1: 正在读取备份段 D:\BACKUP\1RKFB1F4_1_1
    通道 ORA_DISK_1: 已恢复备份段 1
    段句柄 = D:\BACKUP\1RKFB1F4_1_1 标记 = TAG20090518T110716
    通道 ORA_DISK_1: 恢复完成, 用时: 00:00:26
    完成 restore 于 18-5月 -09RMAN> recover datafile 'F:\oracle\product\10.2.0\oradata\rfid\rfid';启动 recover 于 18-5月 -09
    使用通道 ORA_DISK_1正在开始介质的恢复
    介质恢复完成, 用时: 00:00:04完成 recover 于 18-5月 -09RMAN> alter database open;数据库已打开RMAN>  host;Microsoft Windows XP [版本 5.1.2600]
    (C) 版权所有 1985-2001 Microsoft Corp.C:\Documents and Settings\thunder>sqlplus user/jky_rfid;SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 5月 18 11:29:26 2009Copyright (c) 1982, 2005, Oracle.  All rights reserved.ERROR:
    ORA-01017: invalid username/password; logon denied
    请输入用户名:  rfiduser
    输入口令:连接到:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining optionsSQL> select * from personuser;USERNAME   PASSWORD
    ---------- --------------------
    xin        xinjiaru
    ybg        1235
    lqh        1232
    zsw        cxlove
    qcx        cxlove
    到这时这条数据
    xin        xinjiaru
    不是在备份后才插入的数据吗?怎么恢复时还有呢?
      

  6.   

    根据你实验的场景,你现在是丢失了数据文件,而control文件,联机日志文件及归档文件都存在当做restore命令的时候,会还原已经丢失的datafile 5文件,当做recover的时候,会通过你现在完整的联机日志以及归档文件来做全恢复。这里你已经是归档模式了,所以可以recover,如果你是非归档模式,意味这没有归档文件,而且当前的redo file已经被覆盖的话,你这是的recover是不会成功的。不过,所幸的是,你要么已经是归档模式要么就是幸运的redolog file还是当前的,并没有被覆盖,否则要加上until cancel才能recover叻
      

  7.   

    oracle 恢复概念:
    1、完全恢复 -- 恢复到出现故障的时间点,即执行恢复的前一刻;直接使用recove database/tablespace/datafile
    2、不完全恢复;-- 恢复到过去的某个时间点;
        需指定要恢复到的时间点:recove database/tablespace/datafile until scn/time/seq
    以楼主的例子:
    1、如恢复到插入语句之后,则为完全恢复;
    2、恢复到备份时,则为不完全恢复。
    因此,楼主遗漏了recover命令的until部分,肯定得到最新的数据,即插入后的
      

  8.   


    现在我有0级和1级备份:BACKUP INCREMENTAL LEVEL=0 DATABASE FORMAT 'D:\BACKUP\%U'; 
    1级备份 
    BACKUP INCREMENTAL LEVEL=1 TABLESPACE rfiduser DATAFILE 'F:\oracle\product\10.2.0\oradata\rfid\RFID' FORMAT 'D:\BACKUP\%U' ; 
    恢复的语句怎么写呢
    先恢复0级的,然后恢复1级的。怎么写脚本呢?
      

  9.   

    RMAN恢复后,这3条数据仍然在。
    ==================================
    对的,如果不指定时间点,rman 会自动使用 bakcup + archived log + online log 恢复到数据库最近的状态。
    如果想恢复到之前的某一点,可以指定恢复点。
      

  10.   

    谢谢,那如果有0级备份和1级备份的话,是不是都会自动恢复起来啊!那这样不是备份了一次就行了啊!以后恢复直接用
    restore database;
    recover database;

    就行了。
    怎么还要每周都备份一次呢
      

  11.   


    你实验的情况仅是data file丢失,但是生产的情况很复杂,会有其他的一些故障导致归档,contorl file或者redo file的损坏,这样我们就需要更加不同的情况来使用不同的备份来做不同的恢复。
      

  12.   


    每个备份都有不同的时间基点,比如你的这个实验,如果是10天以后,还用这个备份的datafile来做恢复好还是用1天前做好备份的来恢复的好呢?这个答案是肯定,有最新的做更好,不过,我想你这里关注的还有另一个问题,就是我备份一次就可以了,还需要以后不段的备份吗,对于这个疑问,你可以看看上面的回复,之所以你的3条记录能够恢复过来,不是本省备份的datafile 5的单一功劳,这个是restore,是恢复的基本,这里的恢复是依赖与你的完整的日志和归档文件的功劳,对于大的生产系统,日志和归档的增长也是很巨大的,那么我们是不是需要所有的恢复都要依赖从建库到最新点之间的日志了。这个也是一种备份的策略问题了所以这里所说的每周备份,增量备份是个策略问题,而不是一个本质上这样才行或者不行的问题,毕竟对于一个有经验的DBA来说,RMAN不是唯一的备份和恢复途径。不过我们能够比较好的了解到本质上的东西,能对我的知识的掌握有更全面的帮助。==================================================================
    Inthirties关注Oracle数据库 维护 优化,安全,备份,恢复,迁移,故障处理如果你需要帮助或想和我一起学习的请联系
    联系方式QQ:370140387
    QQ群:  85837884(注明:数据库)
    电子邮件:[email protected]
    网站: http://www.inthirties.com
      

  13.   


    没有经历需求,就无法理解备份的必要性. 
    如果你的数据很少,只需要经常0级全备就可以了;如果数据量很大,容量TB以上,每日增量数百GB以上的环境,你就无法通过
    简单的0级备份完成,备份状态会影响系统的性能.为什么要每周备份? 如果你1月备份一次, 在系统完全崩溃的状况下,1月之内的数据,包含DATA FILE, ARCHIVE LOG, ONLINE LOG,CONTROL FILE全部丢失.你的系统只能够恢复到1月之前的情况, 你的企业能够承受丢失1月数据的风险吗?很多情况,是每日备份的,甚至是即时备份, 备份就是假设目前的系统不可使用的情况下(可能是所有的磁盘),如何恢复系统到最小损失,及恢复系统运作.
      

  14.   


    上面的人都说的很好!我也重新温习了一遍,呵呵!1,rman备份很重要。2,楼主的restore等操作是全恢复,可以根据归档日志来恢复最新的数据库更新记录。3,至于0级备份之后是否需要设立1级备份,还是只需要0级备份就可以了,这依赖于数据量的大小以及业务的需要,不是一层不变的。随意说了些,不当之处请斧正!
      

  15.   

    12楼是正解,
    不停的备份的原因是你的数据库会不停的产生归档日志,如果不备份,平时数据库没出问题当然也没关系。
    如果数据库出现问题:
    若你的生产系统的归档没有删除,(假设你的生产系统空间很足的情况,这种情况在大的应用中几乎不可能)
    而且是正常的,当然一切OK。
    rman restore, recover直接用生产库的 归档就能恢复。如果你生产系统的归档丢失或损坏了,(大的生产系统里一般会被定时删除掉)
    那么就无法通过RECOVER来恢复到最新状态了。