Oracle的恢复管理器及Oracle自动备份之总结学习3点

(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) 建立恢复目录并注册目标数据库。

SVRMGR> create tablespace rmanspace datafile 'rmandata' size 500m; SVRMGR> create user rman identified by rman default tablespace         Rmanspace temporary tablespace temp; SVRMGR> grant connect,resource,recovery_catalog_owner to rman;

以上为建立RMAN表空间和用户。

$ sqlplus rman/rman sql> start "/ora_01/app/oracle/product/8.0.5/rdbms/admin/catrman";

--执行创建恢复目录操作

$ rman target system/manager@host1 rcvcat rman/rman@host3;                            --连接目标数据库和恢复目录 rman> register database;   --将目标数据库注册到恢复目录中 rman> resync catalog;      --进行同步目录操作

#p#

2) 将目标数据库改为归档模式运行。

SVRMGR> connect internal SVRMGR> startup mount [dbname] SVRMGR> alter database [dbname] archivelog; --起用归档模式 SVRMGR> archive log start                   --启动自动归档模式 SVRMGR> alter database [dbname] open;       --打开数据库

修改数据库初始化参数文件init.ora,定义归档模式(自动)、归档日志文件保存路径、归档日志文件命名方法,重新启动数据库。

3)建立全备份脚本文件hotbackup.rcv。

connect target internal/oracle@host1 connect rcvcat rman/rman@host3 run { allocate channel t1 type 'SBT_TAPE'; backup     incremental level 0     skip inaccessible     tag hot_db_bk_level0     filesperset 5     format 'bk_%s_%p_%t' (database);

--备份全部数据库控制文件和数据文件

sql 'alter system archive log current'; backup     filesperset 20     format 'al_%s_%p_%t' (archivelog all delete input);

--备份归档日志,备份成功后删除归档日志。若不成功,则不做删除。 }

归档日志备份脚本hotarcbackup.rcv文件如下:

connect target internal/oracle@host1 connect rcvcat rman/rman@host3 run { allocate channel t1 type 'SBT_TAPE'; sql 'alter system archive log current'; backup           filesperset 20 format 'al_%s_%p_%t' (archivelog all delete input); }

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文件内容:

  0 23 * * 0 /oracle/rman/rman cmdfile ‘hotbackup.rcv’   # 星期天23点对数据库执行在线全备份   0 12,18 * * * /oracle/rman/rman cmdfile ‘hotarcbackup.rcv’   # 每天12点,18点执行归档文件备份

经过以上的操作后,系统每天自动产生两个归档日志备份,每个星期天产生一个数据库完全备份。DBA需要做的是,隔几天换一盘磁带(更换磁带的周期取决于备份文件的大小和磁带的容量)和用RMAN定期检查备份执行情况。

执行恢复操作的RMAN脚本文件restore.rcv如下(在host1上运行):

connect target connect rcvcat rman/rman@host3 run { allocate channel t1 type 'SBT_TAPE';       allocate channel t2 type 'SBT_TAPE';       restore controlfile;       sql 'alter database mount';       restore database;       recover database;       sql 'alter database open resetlogs';     }

4.2、存储过程定期自动执行的实例

以下为将Salary表数据定时转入Salary_history表的应用实例:

创建存储过程

SQL> create or replace procedure ProcEmp   IS   begin      insert into Salary_history (EmpId,EmpName,DptName,Salary,Month)

     select EmpId,EmpName,DptName,Salary,      to_char(sysdate,'yyyy-mm') from Salary;

   commit;    end ProcEmp; /

提交作业

SQL> variable jobno number; SQL> begin         DBMS_JOB.SUBMIT(:jobno,       'ProcEmp;',       SYSDATE, 'SYSDATE + 30'); --每30天运行一次        commit;      end;      /

运行作业

SQL>begin        dbms_job.run(:jobno);

    end;     /

五、结束语

Oracle实用工具RMAN的应用为DBA管理多个Oracle数据库提供了集中备份管理与恢复控制的机制,大大地减轻了DBA的工作压力,而DBMS_JOB包的使用增强了存储过程的应用功能,这样,他们就可以从备份数据及重复处理数据的繁琐中解脱出来,去做其它更有意义的工作。而数据库既实现了在线磁带备份,又实现了异机备份集中管理,相应提高了系统运行的安全性。


(2)Oracle 恢复管理器 (RMAN) 的功能

  • 摘要:Oracle 恢复管理( RMAN )有很多可以用来帮助备份和恢复进程的功能,该工具具有命令行和 GUI 两种版本。通常, RMAN 执行并标准化备份和恢复进程,并且通过其操作,减少 DBA 在此过程中犯的错误。
  • 标签:Oracle  功能

Oracle 恢复管理( RMAN )有很多可以用来帮助备份和恢复进程的功能,该工具具有命令行和 GUI 两种版本。通常, RMAN 执行并标准化备份和恢复进程,并且通过其操作,减少 DBA 在此过程中犯的错误。 RMAN 的主要功能如下所示:

备份数据库、表空间、数据文件、控制文件和归档日志

RMAN 工具能以很多种方法备份 Oracle 数据库,给备份和恢复方法提供了很大的灵活性。

通过确定哪些块已经修改,并且仅备份修改过的块来压缩备份

RMAN 提高备份性能的方法之一就是压缩备份。 RMAN 能识别出哪些块被修改过,并且只备份这些修改过的块,不备份空块。

执行增量备份

RMAN 具有执行增量备份和完全备份的能力。增量备份仅备份从上次备份后修改了的内容,此方法允许你一周只有一天执行完全备份,而其它几天都执行增量备份,这样就提高了备份的性能。

提供多项任务合并执行的脚本功能

RMAN 提高你备份、还原和恢复操作的方法之一就是允许 RMAN 命令脚本化。该脚本可能饮食多个存储在恢复目录内的 RMAN 命令。可以重复调用、执行这些脚本来完成任务。

日志备份操作

随着时间发展, RMAN 具有记录所有备份状态的能力。该信息存储在日志和跟踪文件中。

可第三方磁带介质软件集成

RMAN 工具有到很多第三方磁带介质软件的 API ,这就允许 RMAN 在其它非 Oracle 的备份工具中运行,也可以被某机构集成到通用备份策略中。

提供目录信息报表和列表

可以使用 RMAN LIST 和 REPORT 命令查询存储在必得目录中有关备份的信息,这些命令提供显示信息的有效方法。

在 Oracle 数据库的目录中存储有关备份的信息

有关备份的信息存储在恢复目录中。日后任何时候都可以还原该信息。

提供性能好处,如并行处理备份和还原操作

备份和还原操作可以并行处理。它支持将工作负载分配到不同的磁带头和磁盘设备上,这样可以提高性能。

出于测试或开发目的创建数据库副本

可以从 RMAN 备份创建数据库副本,并可用于测试目的。

测试备份是否能成功还原

RMAN 提供的 VALID 命令可以检查备份是否有效的。

检测介质库中的备份是否依然可用

RMAN 提供的 CROSSCHECK 命令可以检测备份介质和目录信息是否匹配。


(3)用RMAN进行Oracle自动备份

-- 在正式备份之前,一定按如下要求去做。
-- 版权声明如下:
-- 读者可以任意拷贝、修改该备份脚本的内容,但不可以篡改作者。
-- 作者: 徐玉金

各文件的作用:
1.rman_db_all.sh :
备份整个oracle数据库,该文件会先后调用rman_db.sh,scp_rman_db_files.sh文件
2.rman_db.sh:
由rman_db_all.sh文件调用,实现用rman备份数据库.
该脚本会首先根据环境变量的设置:
a.生成一个rman脚本文件(rman_arch_cr_g.sh), 去检查归档日志的情况
b.生成一个rman脚本文件(rman_db_backup_g.sh), 备份整个数据库
3.scp_rman_db_files.sh:
由rman_db_all.sh文件调用,将用rman备份出的数据文件拷贝到另外一个机器上,用scp拷贝

4.OS_bak_arch.sh:
用操作系统拷贝方法只备份归档日志文件,该文件会先后调用OS_bak_arch.sh,
         scp_rman_arch_files.sh文件
5.OS_bak_arch.sh:
由OS_bak_arch.sh文件调用,实现将新产生的归档日志拷贝到指定的目录.
6.scp_rman_arch_files.sh
由OS_bak_arch.sh文件调用,将第5步的指定目录的归档日志用scp拷贝到另外一台机器上。

具体设置方法:

1.设置服务器,使之用ssh与scp密码登录时不用密码
2.在备份服务器上创建相应的备份目录, 为 BACKUP_SERVER_TARGET,
  BACKUP_SERVER_SCRIPT_TARGET 环境变量指定的值
3.在数据库服务器上创建相应的目录, 为 BACKUP_BASE, SCRIPT_FILE_TARGET 环境变量指定的值
3.修改所有文件中的相应环境变量的值,所有文件的环境变量都一样
4.运行前将rman_db_all.sh,rman_arch_all.sh文件前面有中文的行去掉
5.根据归档目录个数的不同,适当的修改脚本
6.将所有脚本拷贝到备份服务器的BACKUP_SERVER_SCRIPT_TARGET目录下,并使所有的脚本由可执行权限
10.将rman_db_all.sh文件加到cron中,每天运行一次。rman_arch_all.sh也加到cron中,每30分钟运行一次
11.根据需要修改,LOG_CHECKPOINT_TIMEOUT,使之在指定的时间内归档,
   这样可以保证在整个系统硬盘都崩溃的情况的,只损失指定时间的记录

备注:
1.在oracle9i下测试通过
2.每个scrip中都设置enviroment variable的原因是:用ssh时,环境变量传不过去。


你可能感兴趣的:(Oracle的恢复管理器及Oracle自动备份之总结学习3点)