第二章:手工备份与恢复

2.1 手工备份

 

    1)数据库全备:备份database的所有数据块(datafile、controlfile)

    2)部分备份:只备份单个表空间或datafile(archivelog模式)

    3)一致性备份(冷备份):在数据库正常关闭情况下做备份,数据库处于一致性状态。

    4)非一致性备份(热备份):database在open状态下备份。

 

2.2 手工备份和恢复的命令

 

    1)备份和还原都使用OS命令,如linux中的cp

    2)恢复用sqlplus命令:recover(恢复)

 

2.3 备份前要对数据库进行检查:

检查有关的视图:(防止丢东西)

v$datafile\v$datafile_header\v$controlfile\v$logfile\dba_tablespaces\dba_data_files

   

 1) 检查需要备份的数据文件 

 

SQL>select name from v$datafile;      

SQL>select file_id,file_name,tablespace_name from dba_data_files;   

 

 2)检查要备份的控制文件

 

SQL>select name from v$controlfile;

 

 3)在线redo日志不需要做备份

 

2.4 手工非一致性备份(热备份)的执行方式及热备份的监控(v$backup)

 这个已经很少使用了。

注意:对只读的表空间不能做热备份,临时表空间不需要备份,特别强调:NOARCHIVE模式下不支持手工热备(考点)。

 

 1)在备份前要进入backupmode(backup模式),

    即:执行begin backup (在数据文件上生成检查点,写入scn ,将来恢复的时候以此scn为起点)

          

SQL>alter database begin backup;    //对整个库做热备份   

SQL>alter database end backup;

                        

SQL>alter tablespace users begin backup; //对表空间做备份

SQL>alter tablespace users end backup;

 

 2)备份期间利用v$backup 监控

       

例;

 

SQL>altertablespace test begin backup; 

 

SQL>select file#,checkpoint_change# from v$datafile_header;

 

     FILE# CHECKPOINT_CHANGE#

----------------------------

         1            2414314

         2            2414314

         3            2414314

         4            2414314

         5            2414314

         6            2430480          //在备份期间 ,scn被冻结,不发生变化。

         7            2414314

 

SQL> select * from v$backup;

 

     FILE# STATUS                CHANGE# TIME

---------------------------- ---------- -------------------

         1 NOT ACTIVE                  0

         2 NOT ACTIVE                  0

         3 NOT ACTIVE                  0

         4 NOT ACTIVE                  0

         5 NOT ACTIVE                  0

         6 ACTIVE                2430480 2012-07-3011:07:19     

         7 NOT ACTIVE                  0

 

STATUS 是ACTIVE,表示可以备份相应的数据文件。并且对于其中的数据块DBWN仍然可以刷新。

 

$cptest01.dbf test01.bak

 

备份完毕,执行end backup

 

SQL> altertablespace test end backup;                                                                               

 

SQL>select * from v$backup;

 

     FILE# STATUS                CHANGE# TIME

---------------------------- ---------- -------------------

         1 NOT ACTIVE                  0

         2 NOT ACTIVE                  0

         3 NOT ACTIVE                  0

         4 NOT ACTIVE                  0

         5 NOT ACTIVE                  0

         6 NOT ACTIVE            2430480 2012-07-30 11:07:19

         7 NOT ACTIVE                  0

 

如果在end backup之前发生数据库abort,那么可以在下次启动到mount时end backup,从而完成实例恢复。

 

关于 split block (分裂的块)

 

我们知道一个Oracle block一般包含多个OSblock,当手工热备时,OS的cp单位不是Oracle block而是OS block,而Oracle的DBWR又可能不时的从内存中刷新Oracle block(脏块)到磁盘上,如此,OS级的拷贝便可能造成:一个Oracle Block是由不同的版本组成,比如未被DBWR刷新Header block 加上另一部分被刷新的foot block,这样cp出来的Oracle blcok就是split block。

 

数据库的一致性是不允许oracleblock是split的, Oracle采取的办法是:在backup mode后,如果发现首次DBWR要写脏块,则将该块被刷新之前的镜像数据记录到redo buffer,这样,虽然cp后的文件里仍然含有split block,而当需要恢复时,日志会前滚该块的前镜像,以保证所有被恢复的oracle block是一个完整的版本。

 

这就是我们常常发现在热备时日志文件会急剧增大的原因。

 

*考点:手工热备不能备份临时表空间,甚至不能将它们置于备份模式。

 

2.5 dbv检查数据文件是否有坏块

 

在手工备份前,应该检查datafile 是否有坏块,备份完后对备份也做检查

         

[oracle@timranadmin]$ dbv  //相当于help信息

 

DBVERIFY:Release 11.1.0.6.0 - Production on Mon Jul 30 11:11:07 2012

 

Copyright(c) 1982, 2007, Oracle.  All rightsreserved.

 

Keyword     Description                    (Default)

----------------------------------------------------

FILE        File to Verify                 (NONE)

START       Start Block                    (First Block of File)

END         End Block                      (Last Block of File)

BLOCKSIZE   Logical Block Size             (8192)

LOGFILE     Output Log                     (NONE)

FEEDBACK    Display Progress               (0)

PARFILE     Parameter File                 (NONE)

USERID      Username/Password              (NONE)

SEGMENT_ID  Segment ID (tsn.relfile.block) (NONE)

HIGH_SCN    Highest Block SCN To Verify    (NONE)

            (scn_wrap.scn_base OR scn)           

[oracle@timranadmin]$ 

 

对某个datafile做坏块检查

 

[oracle@timranadmin]$ dbv file=/u01/oradata/timran11g/users01.dbf feedback=50

 

DBVERIFY- 开始验证: FILE = /u01/oradata/timran11g/users01.dbf

.......

 

DBVERIFY- 验证完成

 

检查的页总数: 640

处理的页总数 (数据): 107

失败的页总数 (数据): 0

处理的页总数 (索引): 36

失败的页总数 (索引): 0

处理的页总数 (其它): 478

处理的总页数 (段)  : 0

失败的总页数 (段)  : 0

空的页总数: 19

标记为损坏的总页数: 0

流入的页总数: 0

加密的总页数        : 0

最高块 SCN            : 695469 (0.695469) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

victoruu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值