当前位置:首页 > 技术知识 > 正文内容

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

maynowei7个月前 (09-09)技术知识73


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

相关文章

高考一词多义考点! 30个高频词汇,完形填空再也不怕啦

1. address·/a'dres/ v.处理(问题)We must address the issue of climate change.·/'aedres/ n.地址Pleas...

C++ 原子操作与锁的深度解析:为什么原子操作并非万金油?

大噶好,我是henry,今天来和大家浅浅聊一下为啥C++原子操作并非万能钥匙,原因有三,且听我娓娓道来:一、原子操作的线程安全性C++11 的 std::atomic 确实为单个变量的线程安全操作提供...

C语言进阶教程:线程同步:互斥锁、条件变量与信号量

在多线程编程中,线程同步是确保数据一致性和程序正确性的关键。当多个线程需要访问共享资源时,如果缺乏适当的同步机制,就可能导致竞态条件(Race Condition)、死锁(Deadlock)等问题。本...

C++26中同步与原子操作新变化(c++ 同步)

引言随着多核处理器和并发编程的普及,C++26进一步增强了对同步与原子操作的支持,为开发者提供了更高效、更安全的工具来应对多线程编程中的数据竞争与同步挑战。自C++11引入原子操作以来,C++标准库在...

大量类加载器创建导致诡异FullGC(类的加载器有什么用)

“ 由 GC 问题带你全面了解 JDK8 Metaspace”01—现象最近接手了一个同事的项目,某一天接口的响应耗时突然增加了很多,由几十ms 增加到了几十秒。首先查看机器上的日志,有调用第三方接口...

Oracle 不是有效的导出文件,标头验证失败 解决方法

第一种:网上搜索到的大多解决方法是说导出文件时使用的Oracle版本不一致问题,需要修改dmp文件的版本号。如果确定版本号确实不一样,请自行搜索一下解决方法。第二种:备份dmp文件时,备份的语句可能使...