专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

一起来学习Oracle的备份恢复基础吧-1

ins518 2024-10-13 05:59:39 技术文章 17 ℃ 0 评论


Oracle备份和恢复

MTBF:平均故障间隔时间

MTTR:平均恢复时间

备份恢复概述

数据库故障的类型

user process failure 用户自动处理

instance failure smon自动处理

user errors 通过备份恢复解决

media failure 通过备份和日志恢复

备份恢复分类

逻辑备份恢复-面向对象

传统的导入导出:exp/imp

数据泵的导入导出:expdp/impdp

逻辑备份就是热备数据库对象的某一时刻状态,不能运用在media failure上,逻辑备份的恢复就是还原备份,没有recover的概念。

物理备份与恢复-面向media failure

1. 手工备份与恢复(用户管理的备份恢复)通过OS命令,完成备份还原,然后再使用日志进行恢复。

1. 自动备份恢复(rman或者其它备份软件)

物理备份从方式上可以分为一致性备份(冷备)和非一致性备份(热备);

完整的备份策略应以物理备份为主,逻辑备份为辅(备份一些重要的表)。

闪回技术-面向人为的逻辑错误

一种利用UNDO数据或者闪回日志的快速恢复技术。

完全恢复与不完全恢复

media failure后,需要运用日志进行recover。

1. 完全恢复

利用完整备份或者部分备份,将datafile恢复到failure前的最后一次commit,无数据丢失。

不完全恢复

需要运用完整备份和日志将database恢复到过去某个时间点(或SCN),有数据丢失。

非归档模式运行时必须备份:控制文件和整个数据文件,备份前需要关闭数据库(冷备)。

非归档时,在丢失数据文件后只能执行完整的数据库还原,不能进行恢复。

手工备份与恢复

手工备份和恢复命令

备份和还原都使用OS命令

恢复用sqlplus 命令:recover

备份前的检查操作

查询有关视图:v$datafile(控制文件中的信息)\v$datafile_header\v$controlfile\v$logfile\dba_tablespaces\dba_data_files

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

select name from v$datafile;

select file_id,file_name,tablespace_name from dba_data_files;

1. 检查要备份的控制文件

select name from v$controlfile;

1. 在线redo日志不需要备份

手工一致性备份(热备份)及热备的监控(v$backup)

对只读的表空间不能做热备份,临时表空间不需要备份,非归档模式下不支持手工热备。

1. 备份前进入backup mode

执行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;

备份期间利用v$backup监控

例:

SQL> select file_id,file_name,tablespace_name from dba_data_files;

SQL>alter tablespace test begin backup;

SQL> select FILE#,CHECKPOINT_CHANGE# from v$datafile_header;

SQL> select * from v$backup;

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

SQL> alter tablespace test end backup;

如果在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 block就是split block。

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

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

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

对某个datafile做坏块检查

[oracle@localhost test]$ dbv file=/opt/oracle/app/oradata/test/test01.dbf feedback=50

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表