引言
寒区旱区特色数据库随着数据的日益增长和数据服务的全面开展,数据的安全问题日益突出,尽管数据管理采用WEB服务器与数据库管理后台的物理分离,将数据库后台置放于UNIX环境、设置防火墙等措施来提高数据的安全性,但数据由于计算机硬件以及突发灾难造成的数据损毁、数据丢失的风险依然存在,而且随着设备的性能的老化这种风险日益增加。因此数据的安全备份以及可能出现的数据库灾难的恢复已成为必须考虑和解决的问题。
数据备份,就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库拷贝的磁带或磁盘。恢复,就是把数据库由存在故障的状态转变为无故障状态的过程。灾难恢复就是在系统、数据库出现严重故障后如何尽快地恢复数据到故障前的正常状态以保证数据库的正常服务、数据的完整性、数据的可靠性。数据备份方法很多,其中Oracle就提供了如脱机备份、联机备份、和逻辑备份,其中备份的方法在Oracle数据库常用备份和恢复技术(冯家宏,2004第1期)中作了详细介绍。根据实际情况,我们采用了Oracle的RMAN ( Recovery Manager, 恢复管理器 ) 技术完成寒区旱区特色数据库数据在不同环境(Unix到windows环境、Unix到Linux环境、Linux 到Windows环境)的数据备份与灾难恢复的实验,目前已经完成了寒区旱区特色数据库的备份工作。
RMAN是从Oracle8开始提供的一套用于备份和恢复的有利工具,它有两种使用界面:GUI(图形用户界面)和CLI(命令行界面)。使用RMAN不但可以完成Oracle 数据库备份和恢复的各种任务,还具有相当全面的报表功能。RMAN备份工具有以下的优点:(1)支持在线热备份。(2)支持多级增量备份。(3)支持并行备份,恢复。(4)减小所需要备份量。(5)备份,恢复使用简单。
1、RMAN的配置
RMAN的配置包括配置CATALOG数据库,配置数据库与媒体管理软件的接口,制定RMAN的多级备份方案,写RMAN备份脚本。
1.1 CATALOG数据库
RMAN自动维护备份和恢复所需要的各种信息,并支持两种形式保存:数据库的控制文件或创建一个单独的数据库。RMAN的信息存储在控制文件时,如果当控制文件丢失时将导致备份不能恢复,所以若采用RMAN做备份,推荐采用RMAN CATALOG数据库来单独存放备份信息。这个单独的数据库(称为CATALOG数据库)只需要很小的空间,既可以和被备份的数据库放在同一主机上,也可以单独放在另一台主机上(如果条件允许,推荐放在一台单独的主机上来确保最大的可恢复性)。以下是配置CATALOG数据库的步骤:
1.用dbassist创建数据库。
2.在该数据库创建RMAN数据库用户:
create user rman identified by rman default tablespace ts_rman
temporary tablespace temp;
grant connect ,resource , RECOVERY_CATALOG_OWNER to rman.
3.连接到目标数据库和CATALOG数据库
rman target system/manager@target_tnsname rcvcat rman/rman@catalog_tnsname
4.创建CATALOG用户的表:
rman>create catalog
5.登记目标数据库:
rman>register database
这样就可以利用该RMAN数据库来备份目标数据库了。
1.2 磁带接口
当使用专用的磁带管理工具时,必须配置数据库与磁带的接口,一般是管理工具提供一个动态连接库与数据库进行连接。以下是一个测试的RMAN脚本:
run {
allocate channel 'dev1' type disk
resync catalog;
backup format ‘/archive/ctl%u_%p_%c‘ current controlfile;
release channel dev1;
}
1.3 多级备份策略
采用多级备份是为了减少恢复所需要的时间和减少每天备份所需要的时间,保证系统有很好的恢复性。但是在恢复时间和备份时间要有一个权衡。比如只要开始的一个全备份和备份所有产生的归档文件就可以保证把数据库恢复到最新的状态,但是一般来说实际上并不会这么进行(因为在恢复时将需要很长的时间),多级备份就是为了解决这样的问题。
以下是一种建议的方案:
每半年做一个数据库的全备份(包含只读表空间),每个月做一次零级备份(不包含只读表空间),每个星期做一次一级备份,每天做一个二级备份,任何表空间改成只读状态后做一个该表空间的备份。当需要时(如四个小时归档文件系统就要接近满了)备份归档文件
下面是数据库全备份的脚本:
run {
allocate channel 'dev1' type disk ;
allocate channel 'dev2' type disk ;
allocate channel 'dev3' type disk ;
backup full tag 'dbfull' format '/o9i/testrman/full%u_%p_%c' database ;
sql 'alter system archive log current' ;
backup filesperset 3 archivelog all delete input;
release channel dev1;
release channel dev2;
release channel dev3;
}
零级备份脚本(只读表空间除外)
run {
allocate channel 'dev1' type disk ;
allocate channel 'dev2' type disk ;
allocate channel 'dev3' type disk ;
backup incremental level 0 tag 'dbL0' format '/o9i/testrman/basic%u_%p_%c' database skip readonly;
sql 'alter system archive log current' ;
backup filesperset 3 archivelog all delete input;
release channel dev1;
release channel dev2;
release channel dev3;
}
一级备份脚本、二级备份脚本、表空间备份脚本、归档文件备份脚本与之类似。
按照该备份方案,每天所需要备份的数据量只有一天的改变量。而做恢复时最多只要恢复当月的一个零级备份+三个一级备份+6个二级备份+当天的归档文件。如果不能接受这样的恢复时间,就只能够减少零级备份之间的时间间隔(如可以每个星期做一个零级备份,这样恢复时最多只需要恢复一个星期的数据量)。
2、 维护RMAN
RMAN的维护工作主要是检查RMAN的备份信息,对RMAN信息进行同步等。
2.1.查看备份信息 列出已经过时的备份:
RMAN>report obsolete;
删除过时的备份信息:
RMAN> allocate channel for maintenance type disk;
RMAN> change backupset id delete;
RMAN> release channel;
2.2 RMAN信息同步 当手工删除了备份文件或归档文件时,需要把RMAN CATALOG数据库的信息与手工删除的信息同步。
同步归档文件的脚本:
RMAN> allocate channel for maintenance type disk;
RMAN> change archivelog all crosscheck;
RMAN> release channel;
同步RMAN备份文件的脚本:
RMAN> allocate channel for maintenance type disk;
RMAN> crosscheck backup;
RMAN> delete expired backup;
RMAN> release channel;
3 使用RMAN进行恢复
3.1 恢复整个数据库 在恢复整个数据库之前必须让数据库处于挂载的状态(mount状态)
svrmgrl>startup mount
rman>
run {
allocate channel 'dev1' type disk ;
allocate channel 'dev2' type disk ;
allocate channel 'dev3' type disk ;
restore database ;
recover database ;
release channel dev1 ;
release channel dev2 ;
release channel dev3 ;
}
3.2 恢复单个表空间 在恢复该表空间之前让该表空间处于脱机的状态(offline状态)
svrmgrl>alter tablespace users offline;
rman>
run {
allocate channel 'dev1' type disk ;
allocate channel 'dev2' type disk ;
allocate channel 'dev3' type disk ;
restore tablespace users ;
recover tablespace users ;
release channel dev1 ;
release channel dev2 ;
release channel dev3 ;
}
4、 寒区旱区特色数据库SDBP的RMAN备份策略与灾难恢复实验
4.1 SDBP的备份策略
中国寒区旱区特色数据库SDBP采用的是多级增量备份策略。多级增量备份是指第N级的备份只需要备份最后一次同级或N-1级备份以后发生了的改变数据。可以通过下图来说明:
上图是一个增量备份的例子,即在第一个星期天做一个增量的零级备份,然后在星期一,星期二做一个增量的二级备份,在星期三做一个增量的一级备份,然后在星期四,星期五,星期六做一个增量的二级备份。假设星期五SDBP数据库需要做恢复,则可以先恢复第一个星期天的零级备份,然后恢复星期三的一级备份,再恢复星期四和星期五的二级备份。
4.2 SDBP的灾难恢复实验 灾难恢复实验我们进行了两种实验。一种是利用RMAN来实现灾难数据的恢复,另一种是非常规灾难恢复方法。RMAN灾难恢复实验的过程与RMAN的备份过程类似,在此不作介绍。这里给出非常规灾难恢复技术路线。
ORACLE数据库系统灾难情景假定:正常运行的ORACLE数据库系统,若突然由于操作系统出现某些问题而导致数据库系统不能正常启动。如:Oracle9i系统的sqlplus管理程序不能启动运行,这样Oracle数据库系统的用户实例,数据库监听程序及实例、企业管理器,数据库备份程序imp/exp 都将不能启动和运行。假定用户在此之前没有备份数据,我们又不能用Oracle系统提供的常规数据备份/恢复方法进行此种情况下数据备份/恢复,这种情况下的ORACLE系统恢复我们称之为非常规灾难恢复,其主要实现思路如下:
虽然ORACLE数据库系统不能正常启动和运行,但位于操作系统之中的存放ORACLE数据库系统的磁盘文件系统并未受到损坏,即数据库系统在操作系统之中的文件形式数据保存完好,可以被拷贝出来,这样就存在将其中的ORACLE用户数据恢复出来的可能性。在另一台与原ORACLE数据库系统体系结构相同的机器上安装相同版本的Oracle数据库系统,并按照与原数据库系统创建用户数据库配置中相同DB_BLOCK_SIZE 创建一个同名数据库,即数据库用户实例相同。然后用从原故障机器上拷贝出来的ORACLE数据库系统的系统控制文件、用户控制文件、系统数据库文件、用户数据库文件覆盖本台机器上新建立的Oracle数据库系统中系统控制文件、用户控制文件、系统数据库文件、用户数据库文件。启动本台机器上的Oracle系统的管理程序:sqlplus并安装加载用户数据库,若不出现错误说明灾难恢复成功。用户可登陆各自的库进行验证,检查自己以前建立的数据表及其数据的准确性,若无问题,说明用户数据恢复成功。至此灾难恢复成功,系统管理人员可利用Oracle系统提供的一些工具进行常规的数据备份操作了。
上述非常规灾难恢复方法,简单可靠,快速有效,能实现数据库系统的完全恢复,并且不存在恢复过程中对用户或系统原数据得损失风险。非常规灾难恢复方法已在数据库系统管理的实际工作中得以应用,并成功地实现对Oracle 9i数据库系统的灾难恢复。
对由于UNIX操作系统引起文件系统不能mount,导致Oracle数据库数据灾难后果的情景我们正在进行实验,以后再进行介绍。
5、结束语
RMAN备份恢复工具现在已经应用于很多大型的Oracle数据库系统中。 RMAN的最新版本提供了一种易于配置的基础设施,并且去除了以前与执行备份或恢复相关的所有难以理解和令人迷惑的命令行语法。这种易用特性加上独特的RMAN独有的备份功能(如尝试性恢复、增量备份、块级恢复以及直接与企业磁带备份系统交互),使得RMAN变的更加简单和易用,不失为Oracle备份与恢复的比较理想的选择。尽管我们对假定的三种灾难出现的情景进行了实验并成功地恢复了数据库的数据,但从安全的角度考虑,应尽可能建立完备的数据库的管理策略,尽量避免数据灾难的出现。