人工手动冷备与热备

来源:互联网 发布:小智的淘宝店 编辑:程序博客网 时间:2024/05/16 23:55
1.1 手工备份和恢复的命令


    1)备份和还原都使用OS命令,如linux中的cp
    2)恢复用sqlplus命令:recover




1.2手工一致性备份(冷备份) 


备份前要对数据库进行检查: 有关的视图:v$datafile\v$datafile_header\v$controlfile\v$logfile\dba_tablespaces\dba_data_files
   
完全备份冷备步骤:


 1) 生成要备份的控制文件的命令


SQL> select 'ho cp ' || name || ' /home/oracle/coldbak' from v$controlfile;


'HOCP'||NAME||'/HOME/ORACLE/COLDBAK'
------------------------------------------------------------------------------------
ho cp /home/oracle/app/oradata/orcl/control01.ctl /home/oracle/coldbak
ho cp /home/oracle/app/flash_recovery_area/orcl/control02.ctl /home/oracle/coldbak
  


2)生成要备份的数据文件的命令
 
SQL> select 'ho cp ' || name || ' /home/oracle/coldbak' from v$datafile;


'HOCP'||NAME||'/HOME/ORACLE/COLDBAK'
------------------------------------------------------------------------------------
ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/catalog01.dbf /home/oracle/coldbak


7 rows selected.


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


4)先关闭数据库实例


SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.


5)执行冷备

SQL> ho cp /home/oracle/app/oradata/orcl/control01.ctl /home/oracle/coldbak
ho cp /home/oracle/app/flash_recovery_area/orcl/control02.ctl /home/oracle/coldbak
SQL> ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak





2.1 手工非一致性备份(热备份):不建议这种备份方式
手工非一致性备份(热备份)的执行方式及热备份的监控(v$backup):


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




下面是人工热备份数据库示范:


1)备份前要进入backup mode(backup模式),
    即:执行begin backup (在数据文件上生成检查点,写入scn ,将来恢复的时候以此scn为起点)




SQL> alter database begin backup;     //对数据库做热备份,若对表空间做热备份,则database换成tablespace        






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




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


     FILE# CHECKPOINT_CHANGE#
---------- ------------------
1      1497364
2      1497364
3      1497364
4      1497364          //在备份期间 ,scn被冻结,不发生变化。
5      1497364
6      1497364
7      1497364


7 rows selected.






SQL> select * from v$backup;


     FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ---------
1 ACTIVE 1497364 06-DEC-14
2 ACTIVE 1497364 06-DEC-14
3 ACTIVE 1497364 06-DEC-14
4 ACTIVE 1497364 06-DEC-14
5 ACTIVE 1497364 06-DEC-14
6 ACTIVE 1497364 06-DEC-14
7 ACTIVE 1497364 06-DEC-14


7 rows selected.


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


3) 生成要备份的数据文件的命令


SQL> select 'ho cp ' || name || ' /home/oracle/coldbak ;' from v$controlfile;




ho cp /home/oracle/app/oradata/orcl/control01.ctl /home/oracle/coldbak ;
ho cp /home/oracle/app/flash_recovery_area/orcl/control02.ctl /home/oracle/coldbak ;




'HOCP'||NAME||'/HOME/ORACLE/COLDBAK'
------------------------------------------------------------------------------------
ho cp /home/oracle/app/oradata/orcl/control01.ctl /home/oracle/coldbak
ho cp /home/oracle/app/flash_recovery_area/orcl/control02.ctl /home/oracle/coldbak
  


4)生成要备份的控制文件的命令
 
SQL> select 'ho cp ' || name || ' /home/oracle/coldbak' from v$datafile;


'HOCP'||NAME||'/HOME/ORACLE/COLDBAK'
------------------------------------------------------------------------------------
ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/catalog01.dbf /home/oracle/coldbak


7 rows selected.


备份完毕,执行end backup


5)执行手动热备


SQL> ho cp /home/oracle/app/oradata/orcl/control01.ctl /home/oracle/coldbak
SQL> ho cp /home/oracle/app/flash_recovery_area/orcl/control02.ctl /home/oracle/coldbak
SQL> ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
SQL> ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/catalog01.dbf /home/oracle/coldbak


6)检查手动热备
[oracle@11g coldbak]$ ll
total 3682980
-rw-r-----. 1 oracle oinstall   52436992 Dec  6 14:37 catalog01.dbf
-rw-r-----. 1 oracle oinstall    9748480 Dec  6 14:31 control01.ctl
-rw-r-----. 1 oracle oinstall    9748480 Dec  6 14:32 control02.ctl
-rw-r-----. 1 oracle oinstall 2147491840 Dec  6 14:37 ogg01.dbf
-rw-r-----. 1 oracle oinstall  587210752 Dec  6 14:34 sysaux01.dbf
-rw-r-----. 1 oracle oinstall  754982912 Dec  6 14:33 system01.dbf
-rw-r-----. 1 oracle oinstall  104865792 Dec  6 14:34 tbtb01.dbf
-rw-r-----. 1 oracle oinstall   99622912 Dec  6 14:34 undotbs01.dbf
-rw-r-----. 1 oracle oinstall    5251072 Dec  6 14:34 users01.dbf
[oracle@11g coldbak]$ pwd
/home/oracle/coldbak


7)备份后要结束backup mode(backup模式)


SQL> alter database end backup;                                                                               


SQL> select * from v$backup;


     FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ---------
1 NOT ACTIVE 1497364 06-DEC-14
2 NOT ACTIVE 1497364 06-DEC-14
3 NOT ACTIVE 1497364 06-DEC-14
4 NOT ACTIVE 1497364 06-DEC-14
5 NOT ACTIVE 1497364 06-DEC-14
6 NOT ACTIVE 1497364 06-DEC-14
7 NOT ACTIVE 1497364 06-DEC-14


7 rows selected.




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




关于 split block


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


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



















0 0