Oracle数据库RMAN备份与恢复技术

[Workdocuments]Oracle数据库RMAN备份与恢复技术



计算机是易坏的。主板上的芯片、主板电路、内存、电源等任何一项不能正常工作,都会导致计算机系统不能正常工作。当然,这些损坏可以修复,不会导致应用和数据的损坏或丢失。但是,如果计算机的硬盘损坏,将会导致应用和数据的损坏或丢失。而数据是关键,如果数据被破坏或者丢失,则会对应用系统能否正常运行起着决定性作用,所以数据必须要备份,然后用备份来恢复数据。

  备份,就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库拷贝的磁带或磁盘。恢复,就是把数据库由存在故障的状态转变为无故障状态的过程。

RMAN ( Recovery Manager, 恢复管理器 )是从Oracle8开始提供的一套用于备份和恢复的有利工具,它有两种使用界面:GUI(图形用户界面)和CLI(命令行界面)。使用RMAN不但可以完成Oracle 数据库备份和恢复的各种任务,还具有相当全面的报表功能。采用数据库提供的RMAN备份工具有以下的优点:

支持在线热备份
支持多级增量备份
支持并行备份,恢复
减小所需要备份量
备份,恢复使用简单


1、配置RMAN
配置RMAN包括配置CATALOG数据库,配置数据库与媒体管理软件的接口,制定RMAN的多级备份方案,写RMAN备份脚本
1.1 CATALOG数据库
因为RMAN自动维护备份和恢复所需要的各种信息,所以RMAN必须把这些以某种形式保存。RMAN支持两种形式保存这些信息,数据库的控制文件或创建一个单独的数据库来保存RMAN的信息。
当选择把RMAN的信息存储在控制文件时,控制文件的丢失时将导致备份将不能进行恢复。所以若采用RMAN做备份,推荐一定采用RMAN CATALOG数据库来单独存放备份信息。这个单独的数据库(称为CATALOG数据库)只需要很小的空间,既可以和被备份的数据库(E10K)放在同一主机上,也可以单独放在另一台主机上(如果条件允许,推荐放在一台单独的主机上来确保最大的可恢复性)。
备份CATALOG数据库:因为CATALOG数据库包含了所有的备份信息,所以该数据库本身也是需要通过某种方法进行备份,但因为该数据库很小(一年内可能才增加十几二十兆),所以既可以对它进行冷备份,也可以进行逻辑的输出(EXPORT)。
配置CATALOG数据库:
用dbassist创建数据库。
在该数据库创建RMAN数据库用户:
create user rman identified by rman default tablespace ts_rman

temporary tablespace temp;

grant connect ,resource , RECOVERY_CATALOG_OWNER to rman.

连接到目标数据库和CATALOG数据库
rman target system/manager@target_tnsname rcvcat rman/rman@catalog_tnsname
创建CATALOG用户的表:
rman>create catalog
登记目标数据库:
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;

}

一级备份脚本
run {

allocate channel 'dev1' type disk   ;

allocate channel 'dev2' type disk ;

allocate channel 'dev3' type disk ;

backup incremental level 1  tag 'dbL1' format '/o9i/testrman/basic%u_%p_%c' ddatabase skip readonly;

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 2  tag 'dbL2' format '/o9i/testrman/basic%u_%p_%c' ddatabase skip readonly;

sql 'alter system archive log current' ;

backup filesperset 3   archivelog all delete input;

release channel dev1;

release channel dev2;

release channel dev3;

}

表空间备份脚本(以users表空间为例)
run {

allocate channel 'dev1' type disk   ;

allocate channel 'dev2' type disk ;

allocate channel 'dev3' type disk ;

backup  tag 'tsusers' format '/o9i/testrman/basic%u_%p_%c' tablespace users;

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 filesperset 3   archivelog all delete input;

release channel dev1;

release channel dev2;

release channel dev3;

}

则每天所需要备份的数据量只有一天的改变量。而做恢复时最多只要恢复当月的一个零级备份+三个一级备份+6个二级备份+当天的归档文件。如果不能接受这样的恢复时间,就只能够减少零级备份之间的时间间隔(如可以每个星期做一个零级备份,这样恢复时最多只需要恢复一个星期的数据量)。
备份CATALOG数据库(数据库逻辑输出)
exp pafile=exp.dat
其中exp.dat如下
userid=rman/rman
file=rmanexp.dmp

2、维护RMAN
RMAN的维护工作主要是:
1.  查看备份信息
2.  因为手工删除了备份文件或归档文件需要把RMAN CATALOG数据库的信息与手工删除的信息同步。
2.1 检查RMAN备份信息
列出已经过时的备份:
RMAN>report obsolete;
删除过时的备份信息
RMAN> allocate channel for maintenance type disk;
RMAN> change backupset id delete;
RMAN> release channel;
2.2 RMAN信息同步
当手工删除了数据库的归档文件后,要执行以下脚本进行同步:
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;
2.3 使用RMAN进行恢复
数据库的的恢复比较复杂,有许多不同的情况必须在了解ORACLE数据库结构的条件下用不同的方法处理,RMAN的好处在于大部分情况不需要理解数据库的结构而使用一些最简单语句来进行恢复,这里只讨论了最常用最普通的恢复情况。
2.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 ;

}

2.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 ;

}

3、 结束语
RMAN备份数据库虽然相比其它的备份有很多优点,但是缺点也是不容忽视的。

你可能感兴趣的:(数据结构,oracle,sql,脚本,配置管理)