1、 Oracle database 备份与恢复 摘要:随着信息化的发展,数据对我们日常生活中有着举足轻重的影响。生活不能缺少数据,因此数据的备份和恢复在当前至关重要。它能保证数据的完整性、安全性、一致性。它也使数据在非正常情况下丢失后,还能恢复到事故前的状态,确保损失最少,风险最少。 本文主要介绍在Linux服务器端,通过oracle数据库的SQL*plus工具,对oracle数据库进行冷备份恢复(脱机备份)和热备份恢复(联机备份),分别对数据库的参数文件,控制文件,数据文件,日志文件进行备份与恢复。通过模拟不同情况下,数据库文件丢失的情况下,对数据库进行完全恢复和不完全恢复。本文主要
2、详细阐述了不完全恢复时需要注意的要点和不完全恢复的特点。通过本文对备份恢复情况的研究,可以编写相关的数据库备份恢复脚本,简化备份步骤,希望能实现Linux操作系统下,数据库自动备份与恢复。 关键词:oracle;备份;恢复 第一章 绪论 1.1 国内外研究动态 当今的信息时代,数据在现代企业中占有重要的地位,数据安全性就显得尤为重要。随着企业规模的扩展,用户早已认识到保证信息系统的安全不间断工作成为各个行业信息化建设的重要关注点。而且近年来频繁出现的自然灾害或者突发事件也让人们越来越多的注意到,原有意识中的
3、数据备份已经无法满足关键业务对系统的可用性、实时性、安全性的需要。这时,异地容灾解决方案的出现则可通过在不同地点建立备份系统,从而进一步提数据抵抗各种可能安全因素的容灾能力。 美国是一个信息技术非常发达的国家,因此很早就有了很高的灾备意识,像美国政府就发布规定:要求所有政府、金融和医疗等机构都必须建立备份数据中心,以确保在遭受恐怖主义攻击、军事打击或自然灾害之后,能够实现快速重建。 我国是一个信息产业发展比较晚的国家,但也一直在学习国外的先进经验,颁布了一系列法律法规来规范灾备市场的发展,例如像信息系统灾难恢复规范中就将灾备划分为6个等级。 1.2 容灾备份系统的现状分析 伴随着IT信
4、息化的推进,组织运营对IT系统的依赖度越来越高,IT系统的可持续化运行,以及IT系统中数据的安全性,已经是对组织运营风险控制产生重大影响。而容灾正是这样一门技术和方案,它可提供一个防止IT系统遭受各种灾难影响破坏的保护系统,为IT系统的可持续化运行和数据安全提供一道保护屏障。而且近年来频繁出现的自然灾害或者突发事件也让人们越来越多的注意到,原有意识中的数据备份已经无法满足关键业务对系统的可用性、实时性、安全性的需要。这时,异地容灾解决方案的出现则可通过在不同地点建立备份系统,从而进一步提数据抵抗各种可能安全因素的容灾能力。 针对这一应用需求,市场上纷纷推出基于SAN的异地容灾软、硬件产
5、品,希望能够为用户提供整套以SAN网络环境和异地实时备份为基础的,高效、可靠的异地容灾解决方案,并且能够为用户提供支持各种操作系统平台、数据库应用和网络应用的系统容灾服务。而本文主要介绍的是Oracle公司的容灾技术。随着Oracle数据库的逐步发展,Oracle数据库被使用于各行各业,使用Oracle数据库的大型公司也随之不断的增加,因而对于Oracle数据库的安全性,人们也有了新的担忧和考虑,因此Oracle数据库备份和恢复技术的研究在国内外如雨后春笋,迅速的不断发展。但是,如果这时发生不可预测的自然灾害以及突发事件,导致整个数据保护体系崩溃时,将给企业带来毁灭性打击。如果企业对数据安全要
6、求很高,就应该搭建容灾系统。 第二章 数据库备份方案 2.1 备份文件 2.1.1 定义 参数文件:记录数据库的系统配置文件,每当数据库启动,Oracle自动地从参数文件中读取系统参数设置来配置启动数据库。如内存池的分配,允许打开的进程数和会话数等。 控制文件:控制文件是二进制文件,数据库的结构、数据文件和日志文件的一些信息都包含在其中。控制文件并不大,但是它在数据空中最重要的文件,只有数据库进程才可以对控制文件的内容进行更新,控制文件内容主要包括数据库的名称(sid),位置,联机、脱机的状态,Redo Log File的名称和位置,每个表空间名称, 归档日志文件的信息,检查点(Ch
7、eckPoint)信息,重做信息,rman备份信息等等。 数据文件:用来存放数据的文件,每个数据库一定是至少含有一个数据文件(system01.dbf),若存在多个数据文件,应该分别存放于不同的磁盘上,这样做不仅能提高数据的存取速度,有利于提高数据库的性能,而且还能高度容灾。 重做日志文件:数据库日志文件包括归档的日志和在线的日志, 当数据库被修改是,就会记录在这些文件当中。Oracle数据库必须至少包含两组在线日志,在线日志可以循环使用,当正在写的在线日志被写满后,就会切换到另一组在线日志,后者的内容会被覆盖,这个过程叫作日志切换(Log Switch),在日志切换时会自动触发检查点(C
8、heckPoint),使内存中的数据写到数据文件当中。 如果数据库执行了DML语句,就会被记录到日志文件中,并且记录动作是在改变数据前进行的,正是因为日志文件记录了数据库所有的修改操作,因此假如有过去某时间点的备份文件,并且有从备份时间点到现在时间点的所有日志文件,就可以通过在备份文件上“重做”这些日志的方式,把数据文件恢复到当前状态或者当中的任何时点的状态。 为了达到防止日志组文件失效的目的,应该对每一个日志组中的每一个日志文件做一份或多份镜像,每个日志组文件和它的备份镜像文件称为其日志组的成员。两个相同的成员应该分别存在不相同的磁盘上,这样做的目的是,可以避免磁盘因外部原因失效时,相同
9、日志组的镜像日志一起失效。
2.1.2 主要的内容
Pfile:系统的参数文件,可用vim,vi等编辑器进行修改,其文件名一般是init
10、m01.dbf文件的辅助文件,存放数据库系统活动的工具,例如LogMiner。
Undotbs01.dbf:存放系统运行时的回退信息,即DML操作后的旧数据信息。
Users01.dbf:新建用户未指定存储空间时,默认数据存放的文件。
Example01.dbf:存放事例数据信息。
2.1.3 优先级别
Oracle 启动读取参数文件的顺序,如果个文件都不存在,则Oracle会报错:
spfile
11、file ,执行完毕后,pfile将$ORACLE_HOME/dbs/init$ORACLE_SID.ora也可以指定pfile 的路径:create pfile = ‘
12、的工具,可以分为EXP/IMP备份、操作系统备份RMAN、第三方工具备份,如VERITAS等。 2.2.2 备份方案的介绍 逻辑备份是指只备份数据库中的数据但不记录数据物理位置的一种备份。导出为数据库作一个二进制的备份,并且这个备份只能由其姐妹程序imp来读取 操作系统备份包括冷备份和热备份。操作系统备份和上面的逻辑备份有本质的区别,它将拷贝整个的数据文件。冷备份在文件级备份开始前数据库必须彻底关闭。热备份是当数据库打开时的操作系统备份。 Recovery Manager(RMAN)是一个使DBA能很方便地对数据库执行备份和恢复任务的oracle应用工具,能够提供DBA对企业数据库备份
13、与恢复操作的集中控制。 2.3 数据库的备份策略 2.3.1 概述 争取的备份策略不仅能保证数据库服务器的7*24小时的高性能的运行,还能保证备份与恢复的快速性与可靠性。采用多级备份就是为了减少每天备份所需要的时间,而保证系统有良好的恢复性。恢复时间与备份时间要有一个权衡。比如只要进行一个数据库的全备份,然后就只备份归档也可以保证能把数据库恢复到最新的状态,但是这样的恢复时间将是不可容忍的。 第三章 备份与恢复功能设计与实现 3.1 冷备份(脱机备份) 3.1.1 定义 冷备份(脱机备份)是当数据库的一切可以被读取和写入的数据库物理文件(参数文件、控制文件,数据文件等)具有一样的
14、系统改变号(SCN)时才能进行的数据库的一致性备份,数据库保持在同一状态的唯一方法是将数据库正常关闭,因此只在数据库正常关闭情况下的备份才算是一致性备份。 冷备份既适用于archivelog模式,也适用于noarchivelog模式。 3.1.2 优点与缺点 优点: 快速并且相对简单的备份方法(因为仅仅需要拷贝文件)。 容易恢复至某个时间点上(仅需将文件拷贝回去)。 低度维护,高度安全。 缺点: 单独使用时,只能提供到“某一时间点上”的恢复。 在冷备份过程中,数据库必须是关闭状态。 3.1.3 步骤 (1) 、查看数据库文件物理位置。 图 2.1 数
15、据文件 图2.2 控制文件 图2.3 日志文件 图2.4 参数文件 (2) 关闭运行的数据库。 (3) 备份参数文件,控制文件,数据文件,日志文件到指定目录下。 3.1.4 备份恢复功能设计与实现 (1)建立测试表test,并且插入数据‘1’,恢复后,数据应该还是存在的 图2.5 创建测试表 图2.6 (2)关闭数据库,执行备份 图2.7 执行冷备份 (3)插入另外一条数据‘2’,恢复时应该丢失的数据 图2.8 插入验证信息 (4)关闭数据库,删除所有的文件:数据文件,控制文件,参数文件,日志文件 图2.9 删除文件
16、 (5)启动数据库 图2.10 启动数据库 (6)恢复冷备份的文件到各自的文件夹 图2.11 冷备份的恢复 (7)验证冷备份的恢复,数据‘2’丢失,只有数据‘1’,备份后插入的数据不存在。 图2.12 验证恢复 3.2 热备份恢复(联机备份恢复) 3.2.1定义 数据库热备份是指数据库在启动运行的状态下,对数据库的控制文件、参数文件、数据文件等进行备份操作。热备份是用户管理备份恢复的一种方式,也是除了RMAN备份之外比较经常使用的一种备份方式。 热备份仅仅适用于archivelog状态。 3.2.2 优点与缺点 优点: 可以在表空间或数据文件级备份,备
17、份的时间短。 备份时数据库仍可以使用。 可达到秒级恢复(恢复到某一时间点上) 缺点: 不能出错,否则备份数据不可用。 备份方法相对复杂,难于维护。 3.2.3 备份设计与实现 冻结块头-->控制SCN在备份时不发生变化 进行物理拷贝 解冻块头-->让SCN可以变化(当对SCN解冻后,系统会自动更新SCN至最新的状态) 查看是否在自动归档模式: 图2.13 非归档模式 如果不是则启动自动归档模式: 图2.14 启动归档模式 图2.15 在线备份数据文件 图2.16 在线备份控制文件 图2.17 备份参数文件和重做日志归档
18、文件 完全恢复: (1)用户表空间数据文件受损 A、查看数据库是否运行在归档模式,确保能把数据完全恢复,如果不是,则设置为自动归档模式 图2.18 归档模式 B、在用户表空间创建测试表,并且插入测试数据 图2.19 插入验证数据 C、对users表空间数据文件进行热备份 图2.20 备份用户空间 D、插入热备份后的另外一条数据,验证热备份完全恢复 图2.21 插入测试数据 E、关闭数据库,删除用户表空间文件,模拟出错 图2.22 模拟故障 查表v$recover_file,用户数据文件需要恢复 图2.23 查看需要回复的数
19、据文件 如果实际中,数据库需要对外服务,但是用户数据文件尚未修复,可以选择先把数据文件离线再进行修复。 图2.24 离线数据文件 图2.25 恢复离线的数据文件 F、查看验证热备份的数据,确认是否完全恢复,重做数据文件到当前的时间点,确保备份后的数据还在,前提是要处于归档模式,切归档重做文件都没被删除 图2.26 查看热备份的效果 (2)用户表空间数据文件受损且无备份的恢复 第一种情况,先删除数据文件,在触发检查点 A、创建用户表空间做测试 图2.27 创建测试数据 B、删除用户表空间,模拟故障,表格还在的原因是因为数据已经缓存到
20、内存了,查找内容实际是在内存找 图2.28 模拟故障 C、当触发检查点,内存数据会写盘,然而查找数据的话,没改变数据内容,写盘的时候不需要修改内容,故数据文件test.dbf不存在也不会报错,但是再查找表的内容的时候,要从磁盘读,因此发现了数据文件不存在 图2.29 数据文件故障 D、关闭系统,然后启动后发现,数据文件处于recover状态 图2.30 recover状态的数据文件 E、创建丢失的数据文件,恢复文件的内容 图2.31 创建需要的文件 图2.32 查看数据文件状态 F、验证数据是否还是存在,数据还在的条件是,归档
21、日志文件存在的时间要比表空间创建的时间要久远,才有重做日志文件支持完全恢复。 图2.33 验证恢复 第二种情况:先触发检查点,在删除数据文件 图2.34 情况二 图2.34 数据文件需要恢复 图2.35 恢复后的数据 (3)System表空间数据文件或者大量数据文件受损 A、对system表空间进行热备份 图2.35 热备份 B、删除system数据文件,模拟数据文件损坏 图2.36 删除数据文件 C、把热备份的数据文件重新拷回去,恢复系统数据文件 图2.37 恢复数据文件 (4)回滚文件损坏的恢复 A、查看回
22、滚表空间的相关信息(回滚文件可以在线删除) 图2.38 回滚表空间信息 B、删除undo数据文件,启动数据库 图2.39 模拟故障 图2.40 故障 C、把回滚数据文件离线,启动数据库 图2.41 离线数据文件 D、创建一个新的回滚表空间,并修改参数undo_tablespace,使undotbs1能成功删除 图2.42 创建回滚表空间 图2.43 创建修改回滚表空间 E、创建测试表test 图2.44 创建测试数据 F、关闭数据库,发现数据库一直关闭不了,挂起了,查看警告文件 图2.45 关机挂起
23、图2.46 查看跟踪文件 G、启动数据库 图2.47 故障 H、修改参数文件pfile,增加一行 图2.48 修改SPFILE 图2.48 启动数据库 (5)临时文件损坏的修复 A、当控制文件不需要重建的时候 图2.49 模拟故障 B、控制文件重建的时候,因为控制文件的创建不包含temp的路径,若创建时指定会报错,故在启动数据库后要手工绑定。 图2.50 模拟故障2 图2.51 查看临时表空间 图2.52 大查询 图2.53 手工创建临时表空间 不完全恢复 (1)基于time时间的恢复 基于时间的恢复能将数据库通过不完全恢复,
24、到过去的某一时间点,经常被用在误操作导致的删除数据,在备机上将数据库恢复至被删除时间点之前的状态,然后把该表导出到正式环境,以挽回丢失数据。 A、建立测试表test,插入测试数据 图2.54 创建测试数据表 B、热备份除temp表空间以外所有的数据文件,虽然恢复的数据在users表空间,但是不完全恢复基于时间的恢复,所有的表空间数据文件都应该恢复到同一个时间点上,因此,需要备份所有数据文件。 图2.55 热备份所有文件 C、继续插入测试数据,热备份后的数据,如果仅仅恢复备份,数据应该不存在,查看数据丢失之前的时间点,用于不完全恢
25、复的时间参考。 图2.54 继续创建测试数据 D、删除测试数据表,关闭数据库,拷回热备份,启动到mount状态,根据时间点恢复。 图2.55 E、重新以resetlogs方式打开数据库,查看丢失数据是否存在。 图2.56 验证 (2)基于改变scn的恢复 基于改变scn号(system change number)的恢复可以将数据库不完全恢复到过去的某一个scm改变点,也常用于在误操作删除数据后,在备用机上将数据库恢复到删除scn之前,然后把表导出到正式的环境,挽回丢失的数据。 图2.57 图2.58 图2.59 (3)控制文件损坏的恢
26、复 *单个控制文件被破坏 由于数据库的三个控制文件都是相互备份的,因此,当损坏一个数据文件的时候,可以从另外的两个数据文件拷贝创建新的数据文件,名字相同即可。或者把pfile中控制文件的数量改变为两个,重新以pfile启动数据库 图2.60 图2.61 *多个控制文件被破坏 在很多个控制文件都被破坏的情况下,如果没有对控制文件做备份,那么只能通过重建控制文件生成。在创建控制文件的时候,应该很清楚的了解到每一个数据文件,日志文件的具体位置,确保在重建数据文件之后,数据库的正确性,并且,在重建控制文件的时,是不包含temp01.dbf数据文件的,只能在打开数据库后,进行temp
27、表空间的重新建立,以达到temp表空间的使用。 图2.62 图2.63 (4)日志文件损坏的恢复 *正常关机情况下非当前联机日志文件被破坏 正常关闭DB时缓存均已写盘,且logfile已归档,故仅需clear logfile 重新生成丢失的非当前日志文件即可,无数据丢失;若日志未归档,必须加unarchived参数,才会允许重新生成日志文件,并标志所有备份失效,应该重做全备份。 图2.64 图2.65 *正常关机情况下当前联机(或所有)日志文件被破坏 正常关闭DB时缓存均已写盘,且logfil
28、e已归档,因此仅需until cancel 取消系统查找当前联机日志,并且resetlogs重新生成对视的当前联机日志文件即可,无数据丢失。 图2.66 图2.67 *DB运行时或非正常关机的情况下已归档active日志文件被破坏 图2.68 系统suggestion提示文件正确即可回车确认使用该文件进行重做,提示错误则可手工输入filename使用指定文件进行重做,这两种重做都是单步进行的,重做完本归档或者日志文件后,又会继续提示指定用来重做的下一个归档或日志文件,而auto则自动寻找所有归档或日志文件进行重做,非单步进行,后续归档或日志文件的重做无提示等待确认
29、图2.69 前一个归档或日志文件已经完成恢复重做,不再需要,且再次提示的用于后续恢复的归档文件是错误的而应该使用当前日志文件进行恢复,因此手工输入当前日志文件名进行恢复。 因active日志已经被归档,因此oracle数据库可以到归档文件或者current日志文件中找到需要的数据,以进行实例恢复,次过程没有数据丢失,最后resetlogs用来重新生成已经丢失的归档active的日志文件。 *DB运行时或非正常关机情况下未归档active或current日志文件被破坏 图2.70 图2.71 图2.72 因active/current日志并没有被归档,所以数据库没办法到
30、归档日志中找到需要数据进行数据库的实例恢复,数据文件在没有归档active或current日志文件上不一致,并且没办法使用已经丢失的没有归档文档active或当前日志文件把数据文件重做到一致的时间点上,只可以通过全备份进行不完全恢复,将所有数据文件时间点重做到最后一个可用日志文件中的最后一条重做记录处,其后丢失的未归档active或当前日志文件通过resetlogs重新生成而未进行重做,故有数据丢失,但数据仍一致的,所有数据文件均处于最后一个日志文件中最后一条重做记录所对应的时间点处。 *DB运行时或非正常关机情况下未归档active或current日志文件被破坏(无
31、备份) 图2.73 图2.74 图2.75 图2.76 因current/active日志并没有归档,因此数据库没办法到归档日子文件中找到需要的数据进行实例恢复,数据文件在没有归档active或current当前日志文件上是不一致的,并且没有全备份重做恢复到相同的时间点上面,只能通过设置_allow_resetlogs_corruption=true隐含参数,并resetlogs重新生成丢失的未归档active或current日志文件,使数据库在不一致情况下启动以便备出数据,这种操作会有数据丢失。 第四章 总结 保证oracle数据库的安全是系统安全的重要组成部分
32、必须要设计完善的数据库备份和恢复方案。Oracle提供的各种工具结合起来使用能够使数据库的备份和恢复变得简单。在实际的oracle数据库的备份和恢复中,会有许多不同的和复杂的情况出现,针对不同的情况,要本着使数据具有最大的可恢复性和恢复时间最短的原则去进行数据库的恢复,这需要大量的实验和经验积累。 参考文献 [1] Thomas Kyte.Expert One-on-One[M].Apress,2003.8 [2] Benjamin Rosenzweig ,Elena Silvestrova Rakhimov.
33、Oracle PLSQL实例精解第4版[M].Prentice Hall PTR,2009.6 [3] Thomas Kyte.Expert Oracle Database Architecture 2nd Edition[M].Apress,2010.7 [4] Administrator's Guide.oracle公司 [5] Backup and Recovery Advanced User's Guide.oracle公司 [6] Backup and Recovery Basics.oracle公司 [7] 李丙洋.涂抹oracle--三思笔记之一步一步学oracle[M
34、]中国水利水电出版社,2010.1 [8] Karen Morton.Oracle SQL高级编程[M].人民邮电出版社,2011.11 [9] 梁敬彬,梁敬弘.收获不止oracle[M].电子工业出版社,2013.5 [10] 盖国强.循序渐进oracle数据库管理、优化与备份恢复[M].人民邮电出版社,2011.8 [11] Lan Abramson,Micheael Abbey,Michael J.Corey,窦朝辉.oracle database 11g:初学者指南[M].清华大学出版社,2010-01 [12] 盖国强.oracle dba手记3:数据库性能优化与内部原理解
35、析[M].电子工业出版社,2011.9 [13] K Gopalakrishnan,贾洪峰,梁涛,郭绍明.oracle database 11g Rac手册[M].清华大学出版社,2012.6 [14] John Beresniewicz,Adrian Billington,Martin Buchi.oracle PL/SQL实战[M].人民邮电出版社,2012.11 [15] 蒙邵良,oracle dba高效入职指南[M].清华大学出版社,2012.1 [16] 郭郑州,陈军红.oracle 完全学习手册[M].清华大学出版社,2011.1 [17] 包光磊.临危不惧:oracle 11g 数据库恢复技术[M].电子工业出版社,2012.7 [18] Robert G.Freeman,Matthew Hart,王念滨,陈子阳.oracle database 11g Rman备份与恢复[M].清华大学出版社,2011.4 [19] Edward Whalen,陈曙晖.基于Linux平台的oracle database 10g管理[M].清华大学出版社,2007.1 [20] 林树泽,历铁帅,何会军.oracle 数据库管理之道[M].清华大学出版社,2012.7






