您的位置:首页 > 数据库 > Oracle

Oracle 备份 与 恢复 概述 .

2013-08-04 00:43 155 查看
一. 准备知识

先来看一些准备知识,了解Oracle的物理结构,有如下4种。

1. 数据文件和数据块

Oracle 数据库的存储空间是用表空间来表示的,表空间只是一个逻辑概念,而物理上每个表空间是由磁盘文件组成,这些文件叫做数据文件(Data file),每个表空间可以由一个到多个数据文件组成,每个数据文件被划分为若干个最小的存储单位: 数据块(data block)。

Oracle 的用户数据是写到数据块上的,Oracle 是在SGA上操作数据的,修改数据或者添加数据都是在内存中进行,这些被修改的内存不会立即写入磁盘,而是以特定的时间间隔被写入磁盘。 如果哦数据库正常关闭,则在关闭之前将内存中的数据同步到磁盘,这时数据状态是一致的。如果数据库不正常关闭(如宕机,shutdown abort),内存中的内容没有完全写回磁盘,这时数据文件是不一致的。 如果数据文件是从备份中恢复出来的,数据文件也是不一致的,不一致性的数据文件必须恢复到一致的状态。

 

2. 日志文件

Oracle 数据库日志文件包括 联机日志 和 归档日志, 这些文件都是用来记录数据库修改历史的。Oracle 数据库至少要有两组联机日志,联机日志循环使用,当一组联机日志写满后,就要切换到另一组联机日志,后者的内容就会被覆盖,这个过程叫作日志切换(Log Switch),在日志切换时会触发检查点(CheckPoint)。

 

数据库的修改操作要记录到日志文件中,并且这个记录动作是在修改数据之前进行的,正因为日志文件中记录了所有的修改历史,因此如果有过去某个时点的备份文件,并且有从那是到当前的所有日志文件,就可以通过在备份文件上“重演”这些日志的方式,把数据文件恢复到当前状态或者之间的任何时点的状态。

 

日志线程(Redo Thread):

每个实例用到的联机日志就是一个Redo Thread,单实例有且仅有一个Redo Thread。在RAC 环境下,每个实例都需要自己的联机日志,也就是每个实例都有自己的Redo Thread。 这种每实例一个Redo Thread的设计就是为了避免实例间共享Redo 文件引发的竞争,提高系统性能。 但是这也带了一个问题,就是用RMAN 备份RAC 的时候,需要所有的日志文件。 故需要在两个节点上互相把日志传送到另一个节点。

Thread 这个参数用来指定实例使用的Redo Thread 线程号。一般和该实例的INSTANCE_NUMBER 参数相同。 通过视图V$LOG的Thread#列可以确定日志组所属的线程。

 

注意: 因为RAC 环境下有多个日志线程,所以在添加日志时必须指定线程号。

SQL>alter database add logfile thread 1 group 5 ('/oracle/oradata/redo5') size 50m; 

 

在RAC 环境下,用户操作是分布在多个实例之间的,各实例都有自己的联机日志,恢复时必须把所有实例的联机日志都合并,把Redo Log Record 按照SCN 排序,才能整理出准确的用户操作记录,所以RAC的联机日志必须放在共享存储上,以保证实例都能访问其他实例的联机日志。

 

在看一个sql 的查询结果:

SQL> select * from v$log;

GROUP#  THREAD#  SEQUENCE#  BYTES   MEMBERS ARC STATUS       

----------   ----------   ----------    ----------     ---------- --- ---------------- ----

 1          1      24585     104857600      1  YES  ACTIVE          

 2          1      24583     104857600      1  YES  INACTIVE         

 3          1      24584     104857600      1  YES  INACTIVE         

 8          1      24586     104857600      1  NO   CURRENT          

 

从查询结果上,我们可以看到联机日志有3个状态。

INACTIVE: 表示DBWR 已经做完,该日志包含的数据修改已经写到数据文件

ACTIVE: DBWR 没有做完,数据还没有写到数据文件。

CURRENT:当前正在使用的日志。 没有DBWR 操作。

3. 控制文件

控制文件记录了数据库的物理结构和状态(比如数据文件名,每个数据文件的检查点号,联机状态),包括备份和恢复的信息也记录在控制文件中。 恢复过程要根据控制文件中的信息,比如数据库的检查点,当前联机日志,数据文件检查点等来进行恢复操作,如果控制文件丢失,则恢复的过程会很艰难。 

4. Undo Segment

        修改记录过程中,记录修改之前的状态会被记录到Undo Segment中, 这条记录叫作前镜像(before images)。 当需要撤销修改比如执行Rollback时,就用这条前镜像覆盖现有记录,对于Insert 操作,前镜像就是一个空记录,对于Undate,Delete 操作,前镜像就是修改之前的记录。

在数据库恢复过程中,日志和Undo Segment 共同起作用,二者保证了最终恢复的一致状态。二者也对应了恢复的两个阶段: 前滚(Roforware)和 回滚(Rollback)。在前滚阶段,在文件上重演日志内容,以把文件恢复到数据库关闭时的状态,但是数据库关闭时可能有很多修改操作没有提交,这些操作必须进行回滚,这就要利用Undo Segment的内容。

二.备份

 

备份是指数据的拷贝,这个拷贝可以用来重建数据库。 备份可以分为物理备份和逻辑备份。

 

物理备份: 指对数据文件,控制文件,联机日志文件等文件进行物理拷贝的方法,这种方法是在文件层进行的,通过冗余的文件备份来体统数据保护。物理备份又可分为联机备份(也叫作联机热备)和脱机备份(也称冷备)。

逻辑备份: 利用Oracle 提供的导出工具把重要数据导出到文件,以后恢复时在利用工具把数据重新导入到数据库中,这种保护是在数据层进行的。 该类工具有: exp/imp, expdp/impdp(10g 以后版本)。

 

物理备份是最强健的数据保护方也,也是备份策略中首选的方法,逻辑备份只能作为物理备份的补充手段,不足以保护数据丢失。

 

物理备份又可分为用户管理备份(User-Managed Backup)和RMAN备份(Recovery Manager)。 前者是联合使用SQL 命令和OS的cp 命来进行文件备份。 Rman 备份指利用RMAN 工具来进行备份。 

Rman 备份有几点好处:

1. 增量备份

2. 数据块恢复:可以在新进行数据块恢复,不必进行数据文件恢复,提高系统的可用性。

3. 压缩备份

4. 加密备份
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: