Oracle备份恢复概览

📢📢📢📣📣📣

作者:IT邦德

中国DBA联盟(ACDU)成员,15年DBA工作经验

Oracle、PostgreSQL ACE

CSDN博客专家及B站知名UP主,全网粉丝15万+

擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,

安装迁移,性能优化、故障应急处理

文章目录

1.概念

DBA的工作任务是确保数据库处于打开状态,实时给用户提供服务,要实现这个目标,就应尽量避免数据库出现故障。

努力延长平均故障间隔时间,简称 MTBF。MTBF指数据库出现失败的频繁度,应尽可能增大该值。

通过以下方式增大MTBF:

1) 通过冗余方式保护关键组件,确保硬件尽量可靠;

2) 定期执行操作系统维护;

3) Oracle 数据库提供了高级配置选项,可用于延长MTBF,其中包括:

1、RAC集群技术:位于多台计算机上的多个实例打开一个物理数据库,降低因一个或多实例失败导致的风险;

2、Data Guard技术:一个主数据库,多个备用数据库,备用数据库是主数据库在事务上一致的副本,可是在主数据宕机的情况下由备用服务器来继续提供服务。

缩短平均恢复时间,简称MTTR。MTTR指数据失败后出现的停机时间,应尽可能减小该值

通过以下方式减少MTTR:

1)配置备份;

2)通过配置最佳数据库方案,达到最大程度地保护数据不丢失,如归档日志文件、闪回和Data Guard;

3)确定恢复过程方案,减少MTTR

2.故障类别

2.1 语句故障

单个数据库操作失败(选择、插入、更新或删除),如:

1.在表中输入无效的数据,解决方法:可与用户合作来验证并更正数据;

  1. 执行操作,但权限不足,解决方法:提供适当的对象或系统权限;

3.分配空间失败,解决方法:启用可恢复的空间分配,增加所有者限额,增加表空间的空间;

4.应用程序存在逻辑错误,解决方法:与开发人员合作来更正程序错误。

2.2 用户进程故障

1.用户执行了异常断开连接操作

2.用户会话已异常终止

3.用户遇到了程序错误并终止了会话

解决方法:通常不需要DBA执行任何操作就可解决用户进程故障。实例的后台进程会回退未提交的更改并解除锁定

知识点回顾:进程监视程序(PMON) :PMON定期轮询服务器进程,如果发现某个服务器进程的用户不再处于连

接状态,会进行恢复,并回退未提交的更改并解除失败会话持有的任何锁定

2.3 网络的故障

网络故障最好为网络连接提供冗余路径,通过备份监听程序、网络连接和网络接口等方法降低网络故障,如:

1.监听程序失败,解决方法:配置备份监听程序和连接时故障转移;

2.网络接口卡故障,解决方法:配置多个网卡;

3.网络连接失败,解决方法:配置备份网络连接

2.4 用户错误

用户可能会无意中删除或修改数据,这时,DBA需要帮助用户从错误中进行恢复

1.用户尚未提交,则进行回退操作;

2.用户提交了更改,可以使用闪回查询来确定以前的值是什么,再进行相应的恢复。

如因超出了还原保留期而无法使用闪回的,可通过使用LogMiner 来恢复原始信息;

3.如果通过将表闪回到删除前的状态;

4.用户删除表后可从回收站中恢复表,如果清空了回收站,或者用户使用PURGE 选项删除了表,仍可通过使用

时间点恢复(PITR) 来恢复删除的表。

2.5 实例故障

如果在同步所有数据库文件之前关闭了数据库实例,就会发生实例错误,如

1.软硬件故障,导致实例错误,只要重新启动实例即可;

2.使用SHUTDOWN ABORT 和STARTUP FORCE 紧急关闭命令,导致实例错误,只要重新启动实例即可;

3.断电,导致实例错误,只要重新启动实例即可

4.后台进程出现故障,导致实例错误,只要重新启动实例即可

实例恢复过程包括前滚重做日志中的更改和回退任何未提交的事务处理

2.6.介质故障

导致一个或多个数据库文件(数据文件、控制文件或重做日志文件)丢失或损坏的任何故障。

要从介质故障进行恢复,需要还原并恢复缺失的文件。 可能导致介质故障的原因

1.磁盘驱动器故障

2.磁盘控制器故障

  1. 删除或损坏了数据库文件

解决办法:

1.从备份中还原受影响的文件

2.通知数据库关于新文件的位置

3.通过应用重做信息来恢复文件

3.规划策略

1 、多路复用控制文件

与数据库关联的所有控制文件是完全相同的。丢失一个控制文件后进行恢复并不难。但是丢失了所有控制文件后进行恢复则很困难。为了避免丢失所有控制文件,至少要有二至三个副本,建议使用RMAN定期自动备份。

2 、多路复用重做日志组

实例故障或介质故障进行恢复,可使用重做日志信息将数据文件前滚到最后一个提交的事务处理。如果重做日志组依赖于一个重做日志文件,那么这个文件丢失了很可能意味着数据也丢失了。重做日志组由一个或多个重做日志文件组成,组中的每个日志文件都是其它日志文件的副本。Oracle 建议每个重做日志组至少包含两个文件,两个文件要分布在不同的磁盘或控制器上。所以,当单个设备出现故障时就不会损坏整个日志组。丢失了整个日志组可以算是一种最严重的介质故障,因为这会导致丢失数据

3 、保留重做日志的归档副本

如果某个文件丢失后通过备份已还原,实例就必须应用重做信息,以便将该文件返回到控制文件中包含的最新SCN。所以,为保证数据恢复,可将数据库置于ARCHIVELOG 模式。

4 、配置快速恢复区

快速恢复区是为保存归档日志、备份、闪回日志、镜像控制文件和镜像重做日志而在磁盘上专门留出的空间。快速恢复区在磁盘上的保留位置应不同于数据库文件的工作区所在的位置。否则,磁盘将成为数据库的单点故障。

理想情况下,快速恢复区应足够大,可存放数据文件和控制文件副本,以及基于保留策略从保留的备份恢复数据库所需的闪回日志、联机重做日志和归档日志。

5 、计划常规备份

大多数介质故障需要从备份还原丢失或损坏的文件。

4.物理备份与逻辑备份

1 、物理备份:

指所有物理文件的一个副本,比如数据文件,控制文件,归档日志等。物理备份是备份或恢复的基础,包括冷备

份(非归档模式)或热备份(归档模式)

2 、逻辑备份:

将表等数据使用导出exp、expdp工具,导出二进制文件,后续根据需要再使用导入 imp ipmdp工具导入数据库。因此,逻辑备份文件只能用来对数据库进行逻辑恢复。

5.备份恢复工具

1、RMAN工具进行备份恢复,支持备份数据库、表空间、数据文件、控制文件、归档日志等,支持增量备份等。

2、操作系统命令和SQL*plus完成相关的备份与恢复。

3、第三方软件的备份与恢复

6.备份分类

前面提到了逻辑备份与物理备份的概念,下面根据备份的内容、大小、性质等再分类.

1 、全部备份与部分备份

全部备份包含所有的数据文件及至少一个控制文件、参数文件、密码文件等。

部分备份包含零个或多个表空间,零个或多个数据文件,可能包含控制文件等。

2 、完整备份与增量备份

完整备份指一个或多个数据文件的一个完整副本。

增量备份指包含从最近一次次备份以来被修改或添加的数据块。

增量备份又分为:

差异增量:备份上级及同级备份以来所有变化的数据块,默认方式

累计增量:备份上级备份以来所有变化的块

增量备份又分0级、1级、2级、3级、4级备份,其中,0级增量备份是所有备份的基础,是一个完整备份,包含所有的数据块 。

3 、脱机备份与联机备份

脱机备份: 在数据库关闭(shutdown)阶段发生的备份,在一致性关闭数据库后,控制文件SCN与数据文件头部SCN一致,所以,又称为一致性备份或冷备份。

联机备份: 在数据库使用(open)阶段发生的备份,又称为非一致性备份或热备份。

联机备份一个数据文件不与任何特定的SCN以及控制文件同步,可以是全部备份,也可以是部分备份,能够使用RMAN或操作系统命令完成,仅仅在archivelog模式下

4 、映像副本与备份集

映像副本:cp 某个文件的完整拷贝,未经过任何压缩处理,每个字节都与源文件相同。不支持增量备份也不能备份到磁带。

备份集:rman由一个或多个称为piece的物理文件组成的逻辑结构。备份片中可以是数据文件,控制文件以及归档日志文件。 备份集支持数据的压缩,支持增量备份。可以备份到磁盘,也可以备份到磁带。

7.还原与恢复

数据库恢复是使用最近的一次备份来实现数据库的还原,然后使用归档日志和联机日志将数据库恢复到最新或特定状态。

还原:从最近的备份文件中检索所需要的内容,并将其拷回到原来位置的过程称为还原。

恢复:在还原的基础上,使用归档日志和联机日志将数据库刷新到最新的SCN,使数据库保持一致性

8.恢复的类型

实例恢复:使用联机日志来前滚已提交的事务,撤销未提交的事务并释放锁。

介质恢复:在还原的基础上,使用归档日志和联机日志将数据库刷新到最新的SCN,使数据库保持一致性。

完全恢复:在还原的基础上,使用归档日志和联机日志将数据库刷新到最新的时间点,使数据库保持一致性。

不完全恢复:在还原的基础上,使用归档日志和联机日志将数据库更新至过去的某个时间点或SCN。

不完全恢复,可以:

基于时间的不完全恢复;

基于取消的不完全恢复,即恢复到执行CANCEL 命令为止。

基于日志序列的不完全恢复;

人为错误的恢复:使用闪回特性从人为的错误中进行数据恢复。

相关推荐
User_芊芊君子2 小时前
别再乱用 ArrayList 了!这 4 个隐藏坑,90% 的 Java 开发者都踩过
android·java·数据库
xcLeigh2 小时前
IoTDB Java 原生 API 实战:SessionPool 从入门到精通
java·开发语言·数据库·api·iotdb·sessionpool
必胜刻2 小时前
Redis分布式锁讲解
数据库·redis·分布式
gjc5922 小时前
零基础OceanBase数据库入门(6):连接OB集群
数据库·oceanbase
2601_954023662 小时前
Review and Installation Guide: Meminz - Download Software Landing Page Theme
数据库·seo·wordpress·gpl
slarymusic2 小时前
redis的下载和安装详解
数据库·redis·缓存
sR916Mecz3 小时前
Netty 线程模型
java·数据库·oracle
kjmkq3 小时前
2026移动应用跨平台开发框架从技术到业务的创新
数据库·代码
EFCY1MJ903 小时前
MYSQL ID耗尽应急恢复方案
java·数据库·mysql