成都网站建设设计

将想法与焦点和您一起共享

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

博主QQ:819594300

上杭网站建设公司创新互联公司,上杭网站设计制作,有大型网站制作公司丰富经验。已为上杭上1000+提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的上杭做网站的公司定做!

博客地址:http://zpf666.blog.51cto.com/

有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持!

数据库备份与恢复是数据库管理员必须掌握的。没有任何系统能免遭硬盘物理损坏、粗心用户的错误操作、或一些可能会威胁到存储数据的潜在灾难的侵袭。为了能够最大限度地恢复数据库数据,保证数据库的安全运行,应该选择最合理的备份方法来防止各种故障所导致的用户数据丢失,本次主要介绍三种备份恢复技术,即RMAN技术、数据泵技术及闪回技术。

一、备份与恢复概述

1、需要备份的原因

现实工作中有很多情况都可能造成数据丢失,造成数据丢失的主要因素如下。

介质故障:磁盘损坏、磁头碰撞,瞬时强磁场干扰

用户的错误操作

服务器的彻底崩溃

计算机病毒

不可预料的因素:自然灾害、电源故障、盗窃 

上面是一些可能的故障原因,根据原因可以将oracle中的故障分为以下4种类型。


oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

1)语句故障

语句故障时在执行sql语句过程中发生的逻辑故障。例如:向表中插入违反约束的无效数据,或者表空间没有空间了导致无法插入数据等。这时,应用人员或者DBA根据情况进行相应处理及可。

2)用户进程故障

当用户程序出错而无法访问oracle数据库时,就会发生用户进程故障,原因是异常断开连接或终止进程,如果网络不通,客户端计算机以外重新启动,这些故障会导致用户进程与服务器的连接意外终止。

用户进程故障只会导致当前用户无法正常操作数据库,但不会影响其他用户进程。当用户进程出现故障时,进程监控程序(PMON)会自动执行进程恢复。PMON是oracle的后台进程,用于检测与用户进程失去连接的服务器进程。PMON会通过回滚事务来处理故障,还将释放进程当前占用的资源。

3)实例故障

当oracle的数据库实例由于硬件故障或软件问题而无法继续运行时,就会发生实例故障。硬件问题包括意外断电,而软件问题可能是服务器操作系统崩溃。

当重新启动数据库时,如果发现实例故障,oracle会自动完成实例恢复。实例恢复将数据库恢复到与故障之前的事务一致的状态,oracle会自动回滚未提交的数据。

4)介质故障

介质故障是当一个数据库文件、文件的部分或磁盘不能读或不能写时出现的故障。例如:硬盘磁头损坏会导致而数据库文件完全损坏。要修复由于介质故障引起的数据库文件损坏,需要使用介质恢复。

 

二、备份与恢复的定义及分类

1、备份的定义及分类

备份就是把数据库复制到转储设备的过程。其中转储设备是指用于放置数据库副本的磁带或磁盘。从不同的角度分类如下:

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

1)从物理与逻辑角度分类

从物理与逻辑角度分,备份可以分为物理备份和逻辑备份。

① 物理备份:

对数据库操作系统的物理文件(如数据文件、控制文件和日志文件)的备份。物理备份又可以分为脱机备份(冷备份)和联机备份(热备份),前者是在关闭数据库的时候进行的,后者对正以归档日志方式运行的数据库进行备份。可以使用oracle的恢复管理器(RMAN)或操作系统命令进行数据库的物理备份。

② 逻辑备份:

对数据库逻辑组件(如表和存储过程等数据库对象)的备份。逻辑备份的手段很多,如传统的EXP、数据泵EXPDP、数据库闪回技术及第三方工具,都可以进行数据库的逻辑备份。

 

2)从数据库的备份策略角度分类

① 完全备份:

每次对数据进行完整的备份。当发生数据丢失的灾难情况时,完全备份无须依赖其他信息,即可实现100%数据恢复,其恢复时间最短且操作最方便。

② 增量备份:

只有那些在上次完全备份或者增量备份后被修改的文件才会备份。优点是备份数据量小,需要的时间短,缺点是恢复的时候需要依赖之前的备份记录,出问题的风险较大。

③ 差异备份:

备份那些自从上次完全备份之后被修改过的文件。从差异备份中恢复数据库时间较短,因此只需要两份数据(最后一次完全备份和最后一次差异备份),缺点是每次备份需要的时间较长。

 

2、恢复的定义及分类

恢复就是发生故障后,利用已备份的数据或控制文件,重新建立一个完整的数据库。恢复分为以下两种类型。

1)实例恢复:当oracle实例出现失败后,oracle自动进行的恢复。

2)介质恢复:当存放数据库的介质出现故障时所做的恢复。介质恢复又分为完全恢复和不完全恢复。

完全恢复:将数据库恢复到数据库失败时的状态。这种恢复是通过装载数据库备份,并用全部的重做日志做到的。

不完全恢复:将数据库恢复到数据库失败前的某一时刻的状态。这种恢复是通过装载数据库备份并应用部分的重做日志做到的。进行不完全恢复后,必须在启动数据库时用resetlogs选型重设联机重做日志。

 

 

三、使用RMAN工具

RMAN(recovery  manager)是oracle的一个重要工具,用于备份和恢复数据库文件、归档日志和控制文件。也可以用来执行完全或不完全的数据库恢复。RMAN有3种不同的用户接口:命令行方式,GUI方式(集成在OEM中的备份管理器)、api方式(用于集成到第三方的备份软件中)。它具有如下优点:

1)支持在线热备份

2)支持多级增量备份

3)支持并行备份、恢复

4)减少所需要的备份量

5)备份、恢复使用简单

RMAN有丰富的特性集。随着oracle新版本的发布,RMAN特性也不断增强,使得RMAN几乎在任何情况下都可以备份和恢复数据库。其中很多的新特性都是针对日常工作中所遇到的问题和困难开发的。

1、RMAN组件

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

1)target database(目标数据库)

目标数据库就是需要RMAN对其进行备份与恢复的数据库。RMAN可以备份数据文件、控制文件、归档日志文件、spfile。

 

2)server  session(服务器会话)

RMAN启动数据库上的oracle服务器进程,并建立一个与目标数据库的会话。由目标数据库上的服务器进程进行备份、还原、恢复的实际操作。

 

3)RMAN repository(RMAN资料库)

RMAN使用过程中会用到的控制信息,是一些关于备份、归档日志及RMAN活动的元数据。

 

4)recovery  catalog(恢复目录)

恢复目录是建立在RMAN恢复目录数据库上的一种schema对象,用于保存RMAN资料库数据。

恢复目录是一个可选的组件。RMAN会将资料库数据记录在目标数据库的控制文件中,但这样不够安全,因为一旦目标数据库的控制文件损坏就意味着所有的RMAN备份失效。所以建议在单独的一个数据中建立恢复目录另外保存一份资料库数据。

对于

对于大部分中等环境的企业环境,将RMAN备份信息存储在恢复目录数据库中,而不是存储在目标数据库的控制文件中,这样能够发挥RMAN工具的全部功能,此外,RMAN的很多高级功能也只有在创建了恢复目录的环境下才被支持。

 

5)MML(媒体管理库)

MML(media management layer)是第三方工具或软件,用于管理对磁带的读写与文件的跟踪管理,如果你要想直接通过RMAN备份到磁带上,就必须配置媒体管理层,媒体管理层的工具和RMAN共同完成备份与恢复。

 

6)快闪恢复区

快闪恢复区是oracle数据库用于保存所有与恢复相关的文件的默认磁盘位置。这些相关文件包括归档日志、RMAN备份、控制文件自动备份、复用的控制文件和重做日志副本及闪回日志文件。

 

7)辅助数据库

在正常使用时,RMAN会与目标数据库一起使用,如果创建了恢复目录数据库,那么也会与恢复目录数据库一起使用。在某些情况下,希望创建辅助数据库,辅助数据库是使用RMAN从目标数据库的备份中创建新的数据库。辅助数据库能被创建作为备用数据库使用。在产品数据库发生灾难时,能够在不丢失任何数据及停机时间最短的情况下切换至备用数据库。

 

2、创建恢复目录

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

恢复目录存在于RMAN的目录数据库中,类似于标准的数据库目录,主要包含如下几个部分的信息:

1)备份和恢复信息,可以是多个目标数据库

2)RMAN脚本,可以存储供重复使用

3)关于数据文件和日志文件的本分信息

4)关于目标数据库的表空间和数据文件的信息

创建恢复目录

1)创建恢复目录数据库(在oracl数据库中创建恢复目录所用的表空间benet)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

2)在恢复目录数据库中创建RMAN 用户并授权

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

3)在恢复目录数据库中创建恢复目录

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

3、注册目标数据库到恢复目录

登录目标数据库,如果要对目标数据库进行注册,可以按照以下操作。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

至此,完成了目标数据库在恢复目录中的注册操作,此时就可以使用RMAN的恢复目录对目标数据库进行备份和恢复操作。

4、通道分配

使用RMAN进行备份和恢复操作时,必须进行通道的分配,一个通道是RMAN和目标数据库之间的一个连接,通道指定了某种类型的设备用于备份和恢复,RMAN可以使用的通道设备包括磁盘与磁带两种。

1)自动通道配置

使用CONFIGURE命令配置自动通道。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

2)还可以手动通道配置

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

3)显示通道配置参数

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

5、备份与恢复的相关概念与操作

1)备份集与备份片

备份集:备份集是第一次备份的集合,它包含本次备份的所有备份片,以oracle专有的格式保存,是一个逻辑数据的集合。

备份片:一个备份集由若干个备份片组成,每个备份片是一个单独的输出文件,一个备份片的大小是有限制的,它的大小不能大于文件系统所支持的文件长度的最大值。

2)配置备份集文件的格式

使用BACKUP命令进行备份时,需要明确备份文件的存储路径及文件名称格式。其路径和格式可以使用FORMAT参数进行统一设置。FORMAT格式由两部分组合,即存储路径和文件名称。

如果没有使用FORMAT指定存储路径和文件名称格式,则默认情况下BACKUP所产生的备份集将存储在快闪恢复区中,RMAN自动使用%U来确保文件名称不会重复。

FORMAT命令格式如下:

FORMAT ‘格式字符串’

其中格式字符串的文件名称部分可以使用替换变量,例如:FORMAT  ‘/backup/rmanback/%U’

常用的替换变量如下:

%c:备份片的拷贝数

%d:数据库名称

%D:位于该月中的第几天(DD)

%M:位于该年中的第几月(MM)

%F:一个基于DBID的唯一的名称,它的形式为C-||||||-YYYYMMDD-QQ。其中||||||为该数据库的DBID,YYYYMMDD为日期,QQ是一个1-256的序列。

%n:数据库名称,向右填补到最大8个字符

%u:一个8个字符的名称,它是根据备份集个数与创建时间信息成成的。

%p:该备份集的备份片号,从1开始到创建的文件数

%U:系统生成的一个唯一文件名,对于备份片来说,它的含义相当于%u_%p_%c。

%s:备份集的号

%t:备份集时间戳

%T:年月日格式(YYYYMMDD)

3)备份与恢复命令

① BACKUP命令用于备份数据库文件,可以将多个文件、表空间,整个数据库以备份集形式备份到磁盘或磁带上。在RUN命令外使用BACKUP命令,会自动使用自动通道;在RUN命令内使用BACKUP命令,如果定义了手动通道,则优先使用手动定义通道。

② 使用RMAN备份的数据库也只能使用RMAN提供的恢复命令进行恢复。RMAN的恢复目录中存储了目标数据库的备份信息。RMAN根据恢复目录中存储的信息,自动将数据库同步恢复到某一个数据一致的状态。

RMAN恢复数据库时用到两个命令,即RESTORE和RECOVER。RESOTRE命令将备份数据恢复到指定的目录,RECOVER命令对数据库实施同步恢复。

RESOTRE命令:由于备份集中的备份片是以专有的RMAN格式存储的,需要使用RESTORE命令进行重建,重建的结果是自动产生目标数据库的物理文件结构。

RECOVER命令:负责把归档日志文件用于重建的数据文件,来完成数据库的同步恢复。在执行RECOVER命令时,RMAN需要读取归档日志,如果没有归档日志,或者数据库运行在非归档模式下,则恢复过程会报错。

案例:在归档方式下备份与恢复

要用RMAN进行联机备份操作。数据库就必须位于归档模式。恢复目录必须打开,目标数据库进程必须启动,数据库已经加载或者打开。

1)备份和恢复整个数据库

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

备份和恢复整个数据库,自动分配通道,FORMAT默认使用%U,备份集存储在数据库快闪恢复区内,备份文件包括数据文件,控制文件,重做日志文件和参数文件。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

查看快闪恢复区,发现备份成功了:

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

如果还要包含归档日志文件,则要加上plus archivelog关键字,delete input的意思是在备份完成后,删除archivelog(归档日志)文件。但是事实是我们一般不会删除归档日志文件,所以我们一般不加delete input。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

下面的一种方法是我们自己创存储备份集的目录,不在使用快闪恢复区:

通过自动分配通道,通过FORMAT制定具体的路径和格式

首先建立备份目录:

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

接着设置目录权限并备份

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

最后查看备份目录下是否有备份文件存在

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

当然也可以手动分配通道,备份数据库。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

恢复整个数据库(数据库要在mount状态下执行)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

删除system01.dbf

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

再次开启数据库实例

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

使用sys连接RMAN

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

打开数据库

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

可以看见system01.dbf表空间已经被恢复了

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

2)备份和恢复表空间

对表空间users做备份:

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

备份多个表空间:

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

在RUN命令中备份表空间

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

如果只丢失了特定的表空间的数据文件,那么可以选择只恢复这个表空间,而不是恢复整个数据库,表空间恢复可以在不关闭数据库的情况下进行,只需要将需要恢复的表空间offline。

 

现在模拟删除表空间

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

恢复表空间

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

查看表空间文件已经恢复了

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

3)数据文件的备份与恢复

查看数据文件

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

备份数据文件users01.dbf(备份和恢复的时候可以指定文件号,也可以指定文件名)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

查看数据文件

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

删除数据文件user01.dbf

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

对数据文件或表空间做恢复的时候数据文件和表空间一定要处于offline状态, 数据文件丢失了,但数据库实例还可以用。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

此时数据文件4的状态为recover

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

恢复数据文件

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

将数据文件datafile 4处于online状态

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

查看数据文件的状态,已经变成online状态了

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

或者使用run命令恢复,命令如下:

先删除user01.dbf

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

开始恢复:

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

查看文件已经恢复:

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

补充自动备份:

 1)生成脚本文件,如backup.rcv

 假定文件内容如下:

 $>cat backup.rcv

 connect target sys/password rcvcatrman/rman@localname;

 run{

 allocate channel c1 type disk;

 allocate channel c2 type disk;

 allocate channel c3 type disk;

 backup fileaperset 3 format‘/u01/oradata/backup/arch%u_%s_%p’

 archivelog all delete input;

 release channel c1;

 release channel c2;

 release channel c3;

 }

 2)生成执行文件

 在windows上生成backup_archive.bat,内容包括

 rman cmdfile = backup.rcv

 在unix下生成backup_archive.sh,内容包括

 /oracle/ramn/rman cmdfile = backup.rcv

 3)加入调度

 在windows中用任务计划向导即可,或使用at命令。

 在unix中,在目标机器上编写一个文件,用以启动自动备份进程。假定文件名为ORACLE,文件将放在/var/spool/cron/crontabs目录下

 $>cat oracle

 0 23 * * 0 backup_archive.sh

 #表示星期天23点对数据库备份

 0 12,18 * * * backup_archive.sh

 #表示每天12点,18点备份

Crontab文件的每一行由六个域(minutes,hours,day ofmonth,month,day of week,command)组成,域之间用空格或Tab分隔开来。

  

二、使用数据泵技术实现逻辑备份

逻辑备份是创建数据库对象的逻辑副本,并存入一个二进制转储文件的过程。从本质上说,逻辑备份与恢复实际就是对数据库实施数据的导入和导出。

 

导出:

导出即数据库的逻辑备份,实质是读取一个数据库集并将这个数据集写入一个文件(扩展名通常是dmp),这些记录的导出与物理位置无关。

导入:

导入及数据库的逻辑恢复,实质是读取被导出的二进制转储文件并将其恢复到数据库。

 

1、使用数据泵技术导入/导出

数据泵(data pump)是一种在数据库之间或在数据库与操作系统之前高速传输的技术。数据泵工具运行在服务器上,数据库管理员需要指定数据库目录来保存转储的数据。

基于命令行的数据泵导出步骤如下

1)创建数据泵备份用的目录,并把属主和属组赋予给oracle用户

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

2)连接oracle数据库

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

3)创建一个操作目录

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

4)授予用户scott操作mulu目录的权限

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

5)查询目录是否建立好

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

6)创建测试用户zpf并授权

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

7)导出scott用户下的表

说明:使用expdp命令导出数据(可以按照表导出,按照用户模式导出,按照表空间导出和全库导出),使用impdp命令导入数据(可以按照表导入,按照用户模式导入,按照表空间导入和全库导入)。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

8)删除emp表

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

9)导入emp表

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

10)查看emp表已经还原

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

11)将导出的scott用户下的dept和emp表导入zpf用户下

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

12)使用zpf用户登录查看表

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

或者

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

13)导出scott用户模式

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

14)导入scott用户模式

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

15)将scott中所有的对象导入zpf中

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

16)查看zpf用户的表,发现scott的表全部出现在了用户zpf这里

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

17)导出表空间

导出benet表空间(提前创建一个benet表空间)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

在表空间benet创建一个表bdqn

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

18)导入表空间

导入之前删除表空间,相关的表也会删除

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

导入表空间之前,需要创建一个benet表空间

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

开始导入表空间

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

查看表已经恢复回来了

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

19)导出整个数据库

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

20)导入整个数据库

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

三、使用闪回技术

1、闪回技术概述

为了使数据库能够从任何逻辑误操作中迅速恢复,oracle退出了闪回技术。采用该技术,可以对行级和事务级的数据变化进行恢复,减少了数据恢复的时间,而且操作简单,通过sql语句就可以实现数据的恢复,大大提高了数据库恢复的效率。闪回技术是数据库恢复技术历史上一次重大的进步,从根本上改变了数据恢复。

闪回技术包括以下各项:

1)闪回查询(flashback query):查询过去某个时间点或某个SCN(system  change  number,系统更改号)值时表中的数据信息。

2)闪回版本查询(flashback version  query):查询过去某个时间段或某个SCN段内表中数据的变化情况。

3)闪回事务查询(flashback  transaction query):查看某个事务或所有事务在过去一段时间对数据进行的修改。

4)闪回数据库(flashback  database):将数据库恢复到过去某个时间点或某个SCN值时的状态。

5)闪回删除(flashback  drop):将已经删除的表及相关联的对象恢复到删除前的状态。

6)闪回表(flashback  table):将表恢复到过去的某个时间点或某个SCN值时的状态。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

说明:SCN:scn是当Oracle数据库更新后,有dbms自动维护而累积递增的一个数字,可以通过查询数据字典v$database中的current_scn获得当前的SCN号。

2、闪回恢复区

1)闪回恢复区的含义

Oracle推荐指定一个闪回恢复区(flash recovery  area)作为存放备份与恢复相关文件的默认位置,这样oracle就可以实现自动的基于磁盘的备份与恢复(automatic  disk-based backup and recovery)。那么,什么是闪回恢复区?简单地说,闪回恢复区是一块用以存储恢复相关的文件的存储空间,允许用户集中存储所有恢复相关的文件。如下集中文件可以放到闪回恢复区中。

控制文件

归档的日志文件

闪回日志

控制文件和SPFILE自动备份

RMAN备份集

数据文件拷贝

2)闪回恢复区的优点

闪回恢复区提供了一个集中化的存储区域,很大程度上减少了管理开销,这是其最主要的优点,另外,与RMAN结合使用可以进行快速恢复。

3)设置闪回恢复区

如果使用dbca创建的数据库,在安装时可以设定闪回恢复区的位置及大小。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

4)闪回恢复区主要通过以下3个初始化参数来设置和管理。

Db_recovery_file_dest:指定闪回恢复区的位置

Db_recovery_file_dest_size:指定闪回恢复区的可用空间大小

Db_flashback_retention_target:该参数用来控制闪回日志中数据保留的时间,或者说,希望闪回数据库能够恢复到的最早的时间点。单位为MIN,默认为1440min,也就是一天。当然,实际上可退回的时间还取决于闪回恢复区的大小,因为里面保存了回退所需要的闪回日志,所以这个参数要和db_recovery_file_dest_size配合修改。

如果要撤销闪回恢复区,把初始化参数DB_RECOVERY_FILE_DEST的值清空即可。

 

注意:db_recovery_file_dest_size只有在db_recovery_file_dest清空之后才可以清空。(即删除闪回恢复区的空间大小之前必须先删除闪回恢复区的位置)

5)设置闪回数据库

设置可闪回恢复区之后,要启用闪回数据库的功能,还需要进一步配置。数据库必须已经处于归档模式,再设置闪回数据库。

设置闪回数据库的步骤如下:

1)启用归档模式(闪回数据库只能处于归档模式)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

2)数据库未设置闪回数据库

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

3)建立闪回区,容量大小为3G(其他都是固定写法,就容量大小可以更换)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

设置闪回数据库的数据保留周期为一天以min为单位

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

启用闪回日志

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

查询是否成功启用闪回恢复区

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

查询是否成功启用闪回数据库

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

6)取消闪回恢复区

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

7)查看一下是否取消闪回恢复区

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

3、闪回错误操作技术

1)闪回数据库

闪回数据库能够使数据迅速回滚到以前的某个时间点或者某个SCN上,这对于数据库从逻辑错误中恢复特别有用,而且也是大多数发生逻辑损害时恢复数据库的最佳选择。

作用类似于数据库的倒带按钮。

可以在用户造成了逻辑数据损坏的情况下使用。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

案例:使用SCN闪回数据库

1)查询数据库当前的SCN

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

2)改变数据库的当前状态,模拟创建表bxjg,并插入一条数据。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

3)进行闪回数据库恢复,将数据库恢复到创建表之前的状态,即SCN为1033421

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

4)用resetlogs选项打开数据库

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

5)验证数据库的状态(bxjg表应该不存在)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

6)可以通过查询数据字典视图v$flashback_database_log来获得能够闪回的最早的scn号,及闪回时值最早不能小于该值。同理,如果通过时间点闪回,则闪回时间也不能小于查询得到的最早时间。

设置显示时间格式:

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

查询数据库中当前最早的闪回SCN和时间

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

7)按照指定时间闪回数据库

首先查询数据系统当前时间

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

改变数据库当前状态,模拟创建表test,并插入一条数据

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

进行闪回数据库恢复,将数据库恢复到创建表之前的状态。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

使用resetlogs打开数据库

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

验证数据库的状态test表是否存在

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

2)闪回表

闪回表是将表恢复到过去的某个时间点或者指定的SCN而不用恢复数据文件,为DBA提供了一种在线、快读、便捷的恢复方式,可以恢复对标进行的修改、删除、插入等错误的操作。

利用闪回表技术恢复表中数据的过程,实际上是对表进行DML操作的过程。Oracle自动维护与表相关联的索引、触发器、约束等。

为了使用数据库闪回表功能,必须满足下列条件

用户具有flashback  any table系统权限,或者具有所操作表的flashback对象权限。

用户具有所操作表的select、insert、delete、alter对象权限

启动被操作表的row movement特性,可以采用下列方式进行。

Alter  table表名  enable  row movement;

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

案例:使用SCN闪回表

1)使用scott用户登录

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

2)改变数据库的当前状态,模拟创建表it,并插入3条数据

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

3)查询当前SCN号,如果当前用户没有权限查询v$database,则以sys用户登录,授予当前用户访问数据字典的权限。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

4)更新数据(把id=1的名字改成batianhu,删除id=3的数据),并且提交

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

5)启动it表的row movement特性

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

6)将it表恢复到2016-12-14 20:08:34

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

7)查询

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

8)将表it恢复到scn为1036263的状态

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

3)闪回删除

闪回删除可以恢复使用drop  table语句删除的表,是一种对意外删除的表的恢复机制。

闪回删除功能的实现主要是通过oracle数据库中的“回收站”技术实现的。在oracle数据库中,当执行drop table 操作时,并不立即回收表及、及其关联的对象的空间,而是将它们重命名后放入一个称为“回收站”的逻辑容器中保存,直到用户决定永久删除它们或存储该表的表空间存储空间不足时,表才能真正被删除。为了使用闪回删除技术,必须开启数据库的“回收站”。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

1)启动回收站,将参数recyclebin设置为ON,在默认情况下“回收站”已启动。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

2)查看“回收站”。当执行drop table操作时,表及其关联对象被命名后保存在“回收站”中,可以通过查询user_recyclebin,dba_recyclebin视图获得被删除的表及其关联对象信息。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

注意:不支持sys用户,system表空间下的对象也不能从回收站里拿到,故使用sys或者system用户登录时,查询为空。

3)如果在删除表时使用了PURGE短语,则表及其关联对象被直接释放,空间被回收,相关信息不会进入“回收站”中。

建立表,并且使用purge短语删除

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

查看在回收站里面没有

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

4)清空回收站

由于被删除表及其关联对象的信息保存在“回收站”中,其存储空间并没有释放,因此需要定期清空“回收站”,或清楚“回收站”中没有用的对象(表、索引、表空间),释放其所占的磁盘空间。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

5)闪回删除操作

FLASHBACK TABLE [schema.]table TO BEFOREDROP [RENAME TO table]

注意:只有本地管理的,非系统表空间中的表可以使用闪回删除操作。

案例:闪回删除示例

1)新建表,插入数据并提交

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

2)删除表

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

3)闪回表

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

或者闪回表之后重新命名

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

4)闪回查询技术

闪回查询:允许根据时间点或SCN查看旧的数据。除了可以查看旧数据,需要时可以通过检索旧数据来撤销错误的更改。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

案例:闪回查询实例

1)使用scott用户登录,对emp表基于as of timestamp的闪回查询

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

2)更新员工号为7844的工资,更新为2000,并提交事物

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

第一个事务提交,自动开启第二个事物。

3)再次更新员工号为7844的工资,更新两次,提交事物。

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

第二个事物提交,自动开启第三个事务。

4)再次更新员工号为7844的工资,更新为3500,并提交事物

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

第三个事务提交,自动开启第四个事务

5)查询7844号员工的当前工资

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

6)查询7844号员工前一个小时的工资

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

7)查询第一个事务提交,第二个事物还没有提交时7844号员工的工资

(2016-12-1421:46:26之前即可)

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

8)如果需要,可以将数据恢复到过去某个时刻的状态

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)


文章标题:oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)
标题URL:http://chengdu.cdxwcx.cn/article/igjjcj.html