Oracle备份策略(1/2)
2008年04月29日 星期二 16:29
第一章. 概要
1、了解什么是备份 2、了解备份的重要性 3、理解数据库的两种运行方式 4、理解不同的备份方式及其区别 5、了解正确的备份策略及其好处 第二章. 了解备份的重要性
可以说,从计算机系统出世的那天起,就有了备份这个概念,计算机以其强大的速度处理能力,取代了很多人为的工作,但是,往往很多时候,它又是那么弱不禁风,主板上的芯片、主板电路、内存、电源等任何一项不能正常工作,都会导致计算机系统不能正常工作。当然,这些损坏可以修复,不会导致应用和数据的损坏。但是,如果计算机的硬盘损坏,将会导致数据丢失,此时必须用备份恢复数据。
其实,在我们的现实世界中,已经就存在很多备份策略,如RAID技术,双机热备,集群技术发展的不就是计算机系统的备份和高可用性吗?有很多时候,系统的备份的确就能解决数据库备份的问题,如磁盘介质的损坏,往往从镜相上面做简单的恢复,或简单的切换机器就可以了。
但是,上面所说的系统备份策略是从硬件的角度来考虑备份与恢复的问题,这是需要代价的。我们所能选择备份策略的依据是:丢是数据的代价与确保数据不丢失的代价之比。还有的时候,硬件的备份有时根本满足不了现实需要,假如你误删了一个表,但是你又想恢复的时候,数据库的备份就变的重要了。ORACLE本身就提供了强大的备份与恢复策略,这里我们只讨论ORACLE备份策略,以下的备份都是指ORACLE数据库备份,恢复将放到下一讲中。
所谓备份,就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库拷贝的磁带或磁盘。
能够进行什么样的恢复依赖于有什么样的备份。作为 DBA,有责任从以下三个方面维护数据库的可恢复性:
·使数据库的失效次数减到最少,从而使数据库保持最大的可用性;
·当数据库不可避免地失效后,要使恢复时间减到最少,从而使恢复的效率达到最高; ·当数据库失效后,要确保尽量少的数据丢失或根本不丢失,从而使数据具有最大的可恢复性。
灾难恢复的最重要的工作是设计充足频率的硬盘备份过程。备份过程应该满足系统要求的可恢复性。例如,如果数据库可有较长的关机时间,则可以每周进行一次冷备份,并归档重做日志,对于24*7的系统,或许我们考虑的只能是热备份。 如果每天都能备份当然会很理想,但要考虑其现实性。企业都在想办法降低维护成本,现实的方案才可能被采用。只要仔细计划,并想办法达到数据库可用性的底线,花少量的钱进行成功的备份与恢复也是可能的。 第三章. 了解ORACLE的运行方式
ORACLE数据库有两种运行方式:一是归档方式(ARCHIVELOG),归档方式的目的是当数据库发生故障时最大限度恢复数据库,可以保证不丢失任何已提交的数据;二是不归档方式(NOARCHIVELOG),只能恢复数据库到最近的回收点(冷备份或是逻辑备份)。我们根据数据库的
高可用性和用户可承受丢失的工作量的多少,对于生产数据库,强烈要求采用为归档方式;那些正在开发和调试的数据库可以采用不归档方式。
如何改变数据库的运行方式,在创建数据库时,作为创建数据库的一部分,就决定了数据库初始的存档方式。一般情况下为NOARCHIVELOG方式。当数据库创建好以后,根据我们的需要把需要运行在归档方式的数据库改成ARCHIVELOG方式。 3.1改变不归档方式为为归档方式
1.关闭数据库,备份已有的数据,改变数据库的运行方式是对数据库的重要改动,所以要对数据库做备份,对可能出现的问题作出保护。
2. 修改初试化参数,使能自动存档修改(添加)初始化文件init[SID].ora参数:
log_archive_start=true #启动自动归档 log_archive_format=ARC%T%S.arc #归档文件格式 log_archive_dest=/arch12/arch #归档路径
在8i中,可以最多有五个归档路径,并可以归档到其它服务器,如备用数据库(standby
database)服务器
3.启动Instance到Mount状态,即加载数据库但不打开数据库: $>SVRMGRL
SVRMGRL >connect internal SVRMGRL >startup mount 4.发出修改命令
SVRMGRL >alter database archivelog; SVRMGRL>alter database open; 3.2 改变归档状态为不归档状态
与以上步骤相同,但有些操作不一样,主要是在以上的b操作中,现在为删除或注释该参数,在d操作中,命令为
SVRMGRL >alter database noarchivelog;
注意,从归档方式转换到非归档方式后一定要做一次数据库的全冷备份,防止意外事件的发生。 4.3 RMAN(备份与恢复管理器) 4.3.1 使用RMAN进行备份 4.3.1.1 了解RMAN
Recovery manager(RMAN)是ORACLE提供的DBA工具,用语管理备份和恢复操作。RMAN只能用于ORACLE8或更高的版本中。它能够备份整个数据库或数据库部件,其中包括表空间、数据文件,控制文件和归档文件。RMAN可以按要求存取和执行备份和恢复。
RMAN备份有如下优点
☆ 支持在线热备份 ☆ 支持多级增量备份 ☆ 支持并行备份、恢复
☆ 减少所需要备份量 ☆ 备份、恢复使用简单
重要的是,使用恢复管理器允许您进行增量数据块级的备份(这个与导出/导入的增量截然不同)。增量RMAN备份是时间和空间有效的,因为他们只备份自上次备份以来有变化的那些数据块。另一个空间有效的RMAN特性是它只备份数据文件中使用的数据块,忽略空的,未用的数据块,这个对于预分配空间的表空间有很大的好处。
从9i开始,还增加了RMAN的数据块级别的恢复,可以进一步减少数据库恢复时间。 RMAN支持以下不同类型的备份 FULL 数据库全备份,包括所有的数据块
INCREMENTAL 增量备份,只备份自上次增量备份以来修改过的数据块。需要一个0级的增量作为增量的基础,可以支持7级增量。 OPEN 在数据库打开的时候使用
CLOSED 在数据库安装(MOUNT)但不打开的时候备份,关闭备份可以是CONSISTENT或IN CONSISTENT类型的。
CONSISTENT 在数据库安装,单不打开,并且在安装之前数据库被彻底关闭(而不是被破坏或异常退出)时使用。CONSISTENT备份可以简单的进行复原(RESTORE)而不是恢复(RECOVER) INCONSISTENT 在数据库打开或安装(但不打开)时使用。在该数据库正常关闭或崩溃后,INCONSISTENT备份需要恢复。
理解BACKUP,RESTORE,RECOVER命令,这是RMAN最基本的三个命令,可以进行数据库的备份,复原以及恢复操作。 4.3.1.2 了解恢复目录
理解恢复目录,RMAN可以在没有恢复目录(NOCATALOG)下运行,这个时候备份信息保存在控制文件。保存在控制文件的备份信息是很危险的,如果控制文件的破坏将导致备份信息的丢失与恢复的失败,而且,没有恢复目录,很多RMAN的命令将不被支持。所以对于重要的数据库,建议创建恢复目录,恢复目录也是一个数据库,只不过这个数据库用来保存备份信息,一个恢复目录可以用来备份多个数据库。
创建RMAN目录,以下步骤说明了在一个数据库中尽力RMAN目录的过程。 1.为目录创建一个单独的表空间
SQL>Create tablespace tools datafile ‘fielname’ size 50m; 2.创建RMAN用户
SQL>Create user RMAN identified by RMAN default tablespace tools temporary tablespace temp;
3.给RMAN授予权限
SQL>Grant connect , resource , recovery_catalog_owner to rman; 4.打开RMAN $>RMAN 5.连接数据库
RMAN>connect catalog rman/rman 6.创建恢复目录
RMAN>Create catalog tablespace tools
注册目标数据库,恢复目录创建成功后,就可以注册目标数据库了,目标数据库就是需要备份的数据库,一个恢复目录可以注册多个目标数据库,注册目标数据库的命令为:
$>RMAN target internal/password catalog rman/rman@rcdb;
RMAN>Register database;
数据库注册完成,就可以用RMAN来进行备份了,更多命令请参考ORACLE联机手册或
《ORACLE8i备份与恢复手册》。
注销数据库不是简单的在RMAN提示下反注册就可以了,需要运行一个程序包,过程如下: 1. 连接目标数据库,获得目标数据库ID
$> RMAN target internal/password catalog rman/rman@rcdb; RMAN-06005: connected to target database: RMAN (DBID=1231209694) 2. 查询恢复目录,得到更详细的信息
SQL> SELECT db_key, db_id FROM db WHERE db_id = 1231209694; DB_KEY DB_ID
---------- --------------- 1 1237603294 1 row selected.
3. 运行过程dbms_rcvcat.unregisterdatabase注销数据库,如 SQL> EXECUTE dbms_rcvcat.unregisterdatabase(1 , 1237603294) 4.3.1.3 采用RMAN进行备份
RMAN使用脚本来备份数据库,以下是RMAN进行备份的几个例子。 1.备份整个数据库
backup full tag ‘basicdb’ format ‘/bak/oradata/full_%u_%s_%p’ database; 2.备份一个表空间
backup tag ‘tsuser’ format ‘/bak/oradata/tsuser_%u_%s_%p’ tablespace users; 3.备份归档日志
backup tag ‘alog’ format ‘/bak/archivebak/arcbak_%u_%s_%p’ archivelog all delete input; 4.3.2 维护RMAN 4.3.2.1 查看RMAN的信息
检查现有备份 RMAN>list backup 列出过期备份 RMAN>report obsolete 删除过期的备份
RMAN>allocate channel for maintenance type disk; RMAN>change backupset id delete; RMAN>release channel; 4.3.2.2 同步或重置RMAN
如果目标数据库物理对象发生了变化,如添加了一个数据文件,需要用如下命令同步: RMAN>resync catalog;
如果目标数据库reset了数据库,需要用如下命令同步 RMAN>reset database;
当手工删除了数据库的归档文件后,要执行以下脚本同步 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 expire backup; RMAN>release channel; 第五章. 定制恰当的备份策略 5.1 定制正确的策略
正确的备份策略不仅能保证数据库服务器的24*7的高性能的运行,还能保证备份与恢复的快速性与可靠性。我们将以RMAN的多级增量备份作为一个备份策略的例子来讨论。采用多级备份就是为了减少每天备份所需要的时间,而又保证系统有良好的恢复性。恢复时间与备份时间要有一个权衡。比如只要进行一个数据库的全备份,然后就只备份归档也可以保证能把数据库恢复到最新的状态,但是这样的恢复时间将是不可容忍的。多级备份也正是 为了解决这种问题,以下就是一个多级备份的例子:
每半年做一个数据库的全备份(包括所有的数据和只读表空间) 每一个月做一次零级备份(不包含只读表空间) 每个星期做一次一级备份 每天做一次二级备份
任何数据库的更改需要重新同步CATALOG目录并重新备份(如添加数据文件)或重新备份(如修改表空间为只读)
每次备份后都可以备份归档日志或定期备份归档日志。 如果可能,可以直接备份到磁带上。 数据库全备份的脚本 run{
allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk;
backup full tag ‘dbfull’ format ‘/u01/oradata/backup/full%u_%s_%p’ database include current controlfile;
sql ‘alter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’ archivelog all delete input; #备份归档可选,可以单独定期备份 release channel c1; release channel c2; release channel c3; }