(1)Oracle的恢复管理器及DBMS_JOB包分析
一、引言
随着Oracle大型数据库系统在企业的广泛应用,系统数据量的快速增长,相信为数不少的Oracle DBA每天都在忙于做着重复的工作--对数据库进行备份。如果一旦哪一天疏忽了,而这一天系统又恰恰发生了故障,需要进行数据恢复,那么此时对 DBA来说可能就是一场灾难, 因为他可能无法完整地恢复数据库中的数据。此外,在数据库的应用中我们会经常碰到这样的需求:将一些重要数据表中的数据定期备份到另一些数据表中去。例如在企业员工工资管理系统中,每月工资报表打印完毕后,应将当月工资数据保存到工资历史库中去,以便今后查询及统计使用。通常我们采用存储过程来完成对数据的处理,这个过程由人工定期执行完成,操作起来很不方便。对于第一种情况,现在我们可利用Oracle据库实用工具恢复管理器来完成DBA每天必须做的备份工作,而且可设定一个固定的时间,让系统自动进行备份。对后一种情况,我们可以使用DBMS_JOB包结合存储过程来实现数据处理的自动执行。下面笔者结合实践经验,分别介绍其实现方法。
二、Oracle数据库备份与恢复方式及特点
ORACLE 数据库备份分为物理备份和逻辑备份。物理备份是数据库文件拷贝的备份,冷备份、热备份属于物理备份。 导出/导入(EXPORT/IMPORT)工具用于进行逻辑备份。
导出(EXPORT)备份可拷贝数据与数据库定义,并以Oracle的内部格式保存为二进制文件。相反,利用Import则可将数据从二进制文件放回到Oracle数据库中。但是导出(EXPORT)备份机制不能提供时间点恢复,而且不能和归档重做日志文件一起使用。
冷备份是在数据库被正常关闭之后进行的数据文件的物理备份。当数据库被关闭时,被数据库使用的每一个文件都被备份下来。这些文件因而保持着数据关闭时的完整的映象。
热备份是在数据库运行的情况下,采用archivelog mode方式备份数据的方法。这涉及到将每个表空间设置为备份状态,然后备份其数据文件,最后将表空间恢复成正常的状态。数据库可以从这个备份中完全地恢复过来,也可以通过归档的重做日志回滚到前面时间的任一个点上。
上述几种备份方法的特性比较:
方法 | 类型 | 恢复特性 |
Export导出 | 逻辑型 | 可以将任何数据库对象恢复到它被导出时的状态 |
冷备份 | 物理型 | 可将数据库恢复到它被关闭时的状态 |
热备份 | 物理型 | 可将数据库恢复到任一时间点的状态 |
以上几种备份方式都需要依赖DBA人工操作完成,从而增加了DBA维护系统的负担。当DBA需要维护多个Oracle数据库系统时,还容易导致操作失误,而且备份的数据不便于集中统一管理。
三、Oracle数据库恢复管理器及DBMS_JOB包概述
恢复管理器(RMAN)是一个使DBA能很方便地对数据库执行备份和恢复任务的Oracle应用工具,与以上介绍的几种方式不同,它能够提供DBA针对企业数据库备份与恢复操作的集中控制。RMAN可以将备份记录保存在恢复目录中,Oracle服务器保持对备份的跟踪。实际的物理备份拷贝将被存储在指定的存储系统上,可以是磁带或磁盘。RMAN将全部备份数据以Oracle特有的格式写入到"备份集"文件中,通过RMAN应用工具来读取。RMAN支持建立除逻辑备份以外的所有类型的备份。
RMAN的功能框图 |
利用RMAN进行备份恢复的条件是:
1.建立一个recovery_catalog,存放RMAN使用和维护着的目标数据库的信息,RMAN使用这些信息去决定如何执行备份和恢复的请求。通常是把它建在另一个Oracle数据库的一个模式里,即需要建立一个用户,该用户需要有recovery_catalog_owner权限。
2.目标数据库必须是在archivelog模式下运行,因为这样,日志才能归档,而RMAN正是利用归档日志进行数据恢复,所以这是一个必备条件。同时archivelog模式也是数据库在线备份的必备条件。
3.RMAN备份中,如果采用磁带机备份,需要安装第三方介质管理库(MML)。
恢复管理器保存在RMAN中注册的全部数据库的记录。当RMAN被用来启动备份或恢复数据库时,它将目标数据库与恢复目录中可用的数据库ID进行验证。如果条件一致,RMAN对目标数据库至少建立两个通道,其中一个通道只是对目标数据库的一个远程调用,使用PL/SQL接口来执行备份与恢复操作。RMAN使用它自己的PL/SQL引擎编译这些用户命令,并在目标数据库上执行这些命令。执行过程不需要用户干预,RMAN记录追踪在数据库上执行的全部备份与恢复操作,因而在很大程度上避免了DBA错误导致的危险。同时RMAN提供了多种命令用于检查和测试数据库备份集与拷贝,并确保备份文件完整无缺且能够用于实现恢复。由上述可见,采用恢复管理器做备份与恢复的管理与其他方式相比较具有明显的优势,可大大减少DBA做备份工作的工作量和操作失误。
DBMS_JOB包是Oracle提供的内部函数包,提供了管理和调度作业队列中的作业定时执行的控制机制。所有作业由SNP后台进程执行。 当SNP进程运行一个作业时,进程将首先创建会话,并恢复作业运行时的环境参数,再调度作业运行。DBMS_JOB包的主要功能有:提交Submit(),执行Run(),删除Remove()等。这样,我们就可以用这个包将创建的存储过程放入Oracle数据库系统的作业队列中去,由系统按时调度运行。
四、应用实例
4.1、RMAN做数据库在线备份应用实例
这里以某公司业务处理计算机中心数据库为例。用户系统配置为:两台HP9000小型机(host1、host2),操作系统为HP-UX11.0,Oracle数据库版本为8.0.5。两台机上各有一个Oracle数据库实例,分别运行不同的业务处理系统。用户要求设备7X24小时在线工作,原则上运行时不允许数据库关闭。这就使得我们只能采用在线备份方式解决问题。为安全起见,我们在另一台IBM服务器(host3)上安装Windows2000及一个独立的Oracle数据库,恢复目录就建在这个数据库中,这台服务器还配置了一台磁带加载机,备份数据存放在磁带上,这样即便哪台机器出现故障我们也能够实现数据库的完全恢复,不过DBA应注意定期做恢复目录数据库的备份。在备份策略上,我们采用了全备份与归档日志备份相结合的方式,既不占用过多的系统时间,也相应减少了备份的数据量。备份策略如下:
(1)每周日晚11:00做数据库在线全备份。
(2)每天12:00,18:00 做数据库归档日志文件的在线备份。
建立备份机制的操作如下(以host1机为例):
1) 建立恢复目录并注册目标数据库。
|
以上为建立RMAN表空间和用户。
|
#p#
2) 将目标数据库改为归档模式运行。
|
修改数据库初始化参数文件init.ora,定义归档模式(自动)、归档日志文件保存路径、归档日志文件命名方法,重新启动数据库。
3)建立全备份脚本文件hotbackup.rcv。
|
归档日志备份脚本hotarcbackup.rcv文件如下:
|
4)利用Unix的crontab命令定期自动执行备份脚本
Crontab命令用于指定一个文件,其行计划命令以固定时间间隔执行。Cron是一个永久进程,它由/etc/rc.local启动执行。Cron程序读取、解释并执行crontab文件。我们将需自动定期执行备份的脚本文件写成shell命令行方式存入crontab文件中,由系统定期调度执行。Crontab文件的每一行由六个域(minutes、hours、day of month、month、day of week、command)组成,域之间用空格或Tab分开。
现在,我们在目标机上编写一个文件,用以启动自动备份进程。文件名定为Oracle,文件将放在/var/spool/cron/crontabs 目录下。Oracle文件内容:
|
经过以上的操作后,系统每天自动产生两个归档日志备份,每个星期天产生一个数据库完全备份。DBA需要做的是,隔几天换一盘磁带(更换磁带的周期取决于备份文件的大小和磁带的容量)和用RMAN定期检查备份执行情况。
执行恢复操作的RMAN脚本文件restore.rcv如下(在host1上运行):
|
4.2、存储过程定期自动执行的实例
以下为将Salary表数据定时转入Salary_history表的应用实例:
创建存储过程
|
提交作业
|
运行作业
|
五、结束语
Oracle实用工具RMAN的应用为DBA管理多个Oracle数据库提供了集中备份管理与恢复控制的机制,大大地减轻了DBA的工作压力,而DBMS_JOB包的使用增强了存储过程的应用功能,这样,他们就可以从备份数据及重复处理数据的繁琐中解脱出来,去做其它更有意义的工作。而数据库既实现了在线磁带备份,又实现了异机备份集中管理,相应提高了系统运行的安全性。
(2)Oracle 恢复管理器 (RMAN) 的功能
Oracle 恢复管理( RMAN )有很多可以用来帮助备份和恢复进程的功能,该工具具有命令行和 GUI 两种版本。通常, RMAN 执行并标准化备份和恢复进程,并且通过其操作,减少 DBA 在此过程中犯的错误。 RMAN 的主要功能如下所示:
备份数据库、表空间、数据文件、控制文件和归档日志
RMAN 工具能以很多种方法备份 Oracle 数据库,给备份和恢复方法提供了很大的灵活性。
RMAN 提高备份性能的方法之一就是压缩备份。 RMAN 能识别出哪些块被修改过,并且只备份这些修改过的块,不备份空块。
RMAN 具有执行增量备份和完全备份的能力。增量备份仅备份从上次备份后修改了的内容,此方法允许你一周只有一天执行完全备份,而其它几天都执行增量备份,这样就提高了备份的性能。
RMAN 提高你备份、还原和恢复操作的方法之一就是允许 RMAN 命令脚本化。该脚本可能饮食多个存储在恢复目录内的 RMAN 命令。可以重复调用、执行这些脚本来完成任务。
随着时间发展, RMAN 具有记录所有备份状态的能力。该信息存储在日志和跟踪文件中。
RMAN 工具有到很多第三方磁带介质软件的 API ,这就允许 RMAN 在其它非 Oracle 的备份工具中运行,也可以被某机构集成到通用备份策略中。
可以使用 RMAN LIST 和 REPORT 命令查询存储在必得目录中有关备份的信息,这些命令提供显示信息的有效方法。
有关备份的信息存储在恢复目录中。日后任何时候都可以还原该信息。
备份和还原操作可以并行处理。它支持将工作负载分配到不同的磁带头和磁盘设备上,这样可以提高性能。
可以从 RMAN 备份创建数据库副本,并可用于测试目的。
RMAN 提供的 VALID 命令可以检查备份是否有效的。
RMAN 提供的 CROSSCHECK 命令可以检测备份介质和目录信息是否匹配。
(3)用RMAN进行Oracle自动备份