ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 数据库备份方案

数据库备份方案

原创 Linux操作系统 作者:zhengbao_jun 时间:2009-04-28 10:05:49 0 删除 编辑

 

 

是我写的一篇使用RMAN进行数据库备份的方案,只要按照文档配置正确,9I通过windows的定时任务,10G通过Schedule,修改一下存放的路径就可以使用。

写的比较简单,属于入门级,更多RMAN请参考ORACLE相关官方文档请大家踊跃提出建议。

我还会陆续把总结的一些文档发上来和大家共享和讨论。

参考了许多文档,如:《Oracle 10g OCP SG》、eygle大侠网站上的《RMAN简明参考手册》、三思的《[三思笔记]一步一步学rman》还有李楚良的《数据库备份方案》。

 


数据库备份方案


文档变更记录

日期        版本号        作者        备注
2009-4-18        v1.0        Caleble        创建
        
目录
数据库备份方案        1
文档控制        1
目录        2
一 前言        3
二 备份恢复工具简介        3
1,常用的imp/exp工具        3
2,恢复管理器(RMAN)        3
三 配置RMAN        4
1,配置归档(ARCHIVELOG)模式        4
2,配置控制文件自动备份        4
3,配置控制文件记录保持时间        4
4,配置保留策略的恢复窗口        4
5,设定默认保存备份文件的路径        4
6,启用快速增量备份        4
7,配置RMAN使用优化(OPTIMIZATION)模式        4
8,配置RMAN使用压缩备份集        4
四 多级备份策略        5
1,零级备份脚本        5
2,一级增量备份脚本        5
3,一级差异备份脚本        6
4,归档文件备份脚本        6
五 管理RMAN        7
1,如果手动删除了备份文件的话,需要执行交叉检验让RMAN进行同步。        7
2,报告已不用(OBSOLETE)和过期(EXPIRED)的备份文件。        7
3,删除已不用(OBSOLETE)和过期(EXPIRED)的备份文件。        7
六 使用RMAN进行恢复        7
1,完全恢复        7
1.1,恢复整个数据库        7
1.2,恢复指定表空间或数据文件        8
2,不完全恢复        8
3,块级别的恢复        8
七 使用FLASHBACK进行快速恢复        9
1,9i中的FLASHBACK:        9
2,10g中的FLASHBACK:        9
八 其他高可用性方案(High Availability)简介        10



一 前言
如同社会总会有不公平、人总会犯错误、程序总会有BUG一样,数据库出现问题是不
可避免的,好的备份是项目成功应用的关键。
从独立的硬盘保存备份文件、主机与从机同步(DATA GUARD)到多实例单数据库的
负载平衡(RAC),按照不同的需求对应不同级别的技术,但其根本就是数据的冗余,用人力和物力来提高数据可用性。

强烈推荐备份到其他物理存储设备上,如另一块硬盘,以保证出现介质故障时可以顺利恢复。


二 备份恢复工具简介
1,常用的imp/exp工具

我们常用的imp/exp工具是由Oracle提供的用于在客户端把数据导出到dmp文件,进行数据转移和保存的方法,是逻辑备份。在11gR2中已经废弃exp,保留imp,相关操作由数据汞(Data Pump)的impdp/expdp代替。
优点为:
1,        使用简单。
2,        可以指定导出某个逻辑对象(整个数据库或用户或表)
缺点为:
1,        不能进行完全恢复(Complete Recovery)
2,        只能备份数据文件(Data File)
3,        全库导出对数据库压力较大
4,        占用空间较大

2,恢复管理器(RMAN)

由Oracle提供的专业的备份与恢复工具,是物理备份。
        优点为:
1,        可以进行完全恢复与不完全恢复
2,        可以备份所有数据库文件(控制文件,服务器参数文件,归档日志文件,数据文件)
3,        具有功能强大的控制能力和脚本编写语言
4,        支持在线热备份
5,        支持多级增量备份
6,        支持并行备份,恢复
7,        减少备份数据量(压缩、块级备份)
8,        可将文件备份到磁盘或磁带
9,        支持在线块级别恢复
10,可以限制速率,减少备份中对系统的造成的影响
11,等等。。。

三 配置RMAN

1,配置归档(ARCHIVELOG)模式
        数据库在装载(MOUNT)模式下执行下列操作开启归档模式
        SQL> ALTER DATABASE ARCHIVELOG;
        将数据库置于归档模式可防止重做日志在归档之前被覆盖。
如果处于非归档(NOARCHIVELOG)模式,数据库只能恢复到上一次备份的时间,到当前时间的之间的数据变更都会丢失。

2,配置控制文件自动备份
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN的相关信息保存在控制文件中(非CATALOG模式),如果控制文件丢失而又没有备份的话,会给数据库的恢复造成很大困难

3,配置控制文件记录保持时间
        SQL> ALTER SYSTEM SET CONTROL_FILE_RECORD_KEEP_TIME=45;
        设置RMAN备份信息保存在控制文件中的时间,要大于等于保留策略的恢复窗口。

4,配置保留策略的恢复窗口
        RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 31 DAYS;
        备份文件超过这个日期时RMAN会标记为已不用(OBSOLETE):
                RMAN> REPORT OBSOLETE;
数据库中的文件超过这个日期时RMAN会报告需要备份:
        RMAN> REPORT NEED BACKUP;

5,设定默认保存备份文件的路径
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'D: /BACKUP/%U'

6,启用快速增量备份
在9i中,RMAN进行增量备份要扫描所有数据文件,找出发生变更的数据块,然后进行备份。
在10g中,增加了一个新特性---块更改跟踪(Block Change Tracking),会把发生变更的数据块记录在一个跟踪文件内,这样就避免了增量备份时对数据库的全面扫描。
SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE 'D:/BACKUP/BLOCK_CHANGE_TRACKING.TRC';

7,配置RMAN使用优化(OPTIMIZATION)模式
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
开启优化模式RMAN会自动跳过满足某些条件的文件,实验表明,优化模式可以提高10%左右的性能

8,配置RMAN使用压缩备份集
RMAN> CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 1;
在10g中RMAN增加了一个新特性---压缩备份集,能够使备份集减少到原来的1/5或1/6,代价是增加10%左右的CPU消耗,可以根据实际情况选择使用。
条件允许的话(多物理硬盘、多CPU)还可以用上面命令设定并行备份


四 多级备份策略
        采用多级备份是为了减少了恢复所需要的时间和减少每天备份所需要的时间,而又保证系统有很好的恢复性。但是在恢复时间和备份时间要有一个权衡。比如只要开始的一个全备份和备份所有产生的归档文件就可以保证把数据库恢复到最新的状态,但是一般来说实际上并不会这么进行(因为在恢复时将需要很长很长的时间),多级备份就是为了解决这样的问题。以下是一种建议的方案。

每个月做一次零级备份
每个星期做一次一级增量备份
每天做一次一级差异备份
当需要时(如不到二十四个小时归档文件系统就要满了)备份归档文件

1,零级备份脚本
RMAN> RUN {
ALLOCATE CHANNEL 'DEV1' TYPE DISK;
ALLOCATE CHANNEL 'DEV2' TYPE DISK ;
ALLOCATE CHANNEL 'DEV3' TYPE DISK ;
BACKUP INCREMENTAL LEVEL 0 TAG 'LV0' FORMAT 'D:/ORACLE/BACKUP/%U' DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;
DELETE NOPROMPT OBSOLETE;
RELEASE CHANNEL DEV1;
RELEASE CHANNEL DEV2;
RELEASE CHANNEL DEV3;
}

2,一级增量备份脚本
RMAN> RUN {
ALLOCATE CHANNEL 'DEV1' TYPE DISK ;
ALLOCATE CHANNEL 'DEV2' TYPE DISK ;
ALLOCATE CHANNEL 'DEV3' TYPE DISK ;
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE TAG 'LV1C' FORMAT 'D:/ORACLE/BACKUP/%U' DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;
RELEASE CHANNEL DEV1;
RELEASE CHANNEL DEV2;
RELEASE CHANNEL DEV3;
}

3,一级差异备份脚本
RMAN> RUN {
ALLOCATE CHANNEL 'DEV1' TYPE DISK ;
ALLOCATE CHANNEL 'DEV2' TYPE DISK ;
ALLOCATE CHANNEL 'DEV3' TYPE DISK ;
BACKUP INCREMENTAL LEVEL 1 TAG 'LV1D' FORMAT 'D:/ORACLE/BACKUP/%U' DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;
RELEASE CHANNEL DEV1;
RELEASE CHANNEL DEV2;
RELEASE CHANNEL DEV3;
}

4,归档文件备份脚本
RMAN> 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个一级差异备份+当天的归档文件。如果不能接受这样的恢复时间,就只能够减少零级备份之间的时间间隔(如可以每个星期做一个零级备份,这样恢复时最多只需要恢复一个星期的数据量)。对于负载极低的系统甚至可以半年做一次零级备份

五 管理RMAN
        通过RMAN的REPORT,LIST,CROSSCHECK,DELETE命令可以对RMAN进行管理。

1,如果手动删除了备份文件的话,需要执行交叉检验让RMAN进行同步。
RMAN> CROSSCHECK BACKUP;
        RMAN> CROSSCHECK ARCHIVELOG ALL;
        交叉检验后RMAN会把已经被手动删除的备份文件的状态设置为过期(EXPIRED)。

2,报告已不用(OBSOLETE)和过期(EXPIRED)的备份文件。
        RMAN> REPORT OBSOLETE;
        RMAN> LIST EXPIRED BACKUP;

3,删除已不用(OBSOLETE)和过期(EXPIRED)的备份文件。
        RMAN> DELETE OBSOLETE;
        RMAN> DELETE EXPIRED BACKUP;


六 使用RMAN进行恢复
        RMAN 的整个恢复过程可以分为还原(RESTORE)与恢复(RECOVER),他们在含义上是有很大差别的,一个是指物理意义的文件的还原与拷贝,一个是指数据库一致性的恢复。

数据库的的恢复比较复杂,有许多不同的情况,必须在了解ORACLE数据库结构的条件下用不同的方法进行处理。下面只列出最普通的恢复情况。

恢复整个数据库之前必须让数据库处于状态的状态(MOUNT)状态。
SQL> STARTUP MOUNT;
然后执行RMAN命令进行还原和恢复。

1,完全恢复
1.1,恢复整个数据库
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;
}

1.2,恢复指定表空间或数据文件
在恢复该表空间之前让该表空间处于脱机的状态(OFFLINE状态)。
SQL> ALTER TABLESPACE TBS OFFLINE;
然后通过RMN进行恢复。
RMAN>
RUN {
ALLOCATE CHANNEL 'DEV1' TYPE DISK ;
ALLOCATE CHANNEL 'DEV2' TYPE DISK ;
ALLOCATE CHANNEL 'DEV3' TYPE DISK ;
RESTORE TABLESPACE TBS ;
RECOVER TABLESPACE TBS ;
RELEASE CHANNEL DEV1 ;
RELEASE CHANNEL DEV2 ;
RELEASE CHANNEL DEV3 ;
}

2,不完全恢复
        不完全恢复情况比较复杂,大致分一下四类。
1,        基于时间的恢复(Time-based recovery)
2,        基于撤销的恢复(Cancel-based recovery)
3,        基于改变的恢复(Change-based recovery)
4,        日志序列恢复(Log sequence recovery)

3,块级别的恢复
        RMAN可以在线对逻辑损坏的数据块进行恢复而不影响数据库的运行。
        RMAN> BLOCKRECOVER DATAFILE 6 BLOCK 3;

七 使用FLASHBACK进行快速恢复

发生以下类型的错误时,通常需要使用备份执行恢复:
• 介质故障:因数据库文件的物理问题而导致无法读写该文件
• 用户错误:数据库中的数据被误更改或误删除
        使用RMAN进行介质故障恢复,使用FLASHBACK进行用户错误恢复。

1,9i中的FLASHBACK:
查询数据库的SCN变化情况
SQL> SELECT NAME,FIRST_CHANGE# FSCN,NEXT_CHANGE# NSCN,FIRST_TIME FROM V$ARCHIVED_LOG;
获得当前SCN
SQL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FSCN FROM DUAL;
创建恢复表,选择恢复到合适的SCN
SQL> INSERT INTO TB_RECOVER SELECT * FROM TB AS OF SCN 1999999999;

2,10g中的FLASHBACK:
10g的FLASHBACK进行了增强和修改,通过回闪,用户可以完成许多不可能恢复的
工作,目前 10g 的回闪包括以下特性;
1,oracle falshback Database.
该特性允许 oracle 通过 Flashback database 语句,将数据库会滚到前一个时间点或者
scn 上,而不需要作时间点的恢复工作!
2,oracle falshback table.
该特性允许 oracle通过 flashback table 语句,将表会滚到前一个时间点或者 scn 上。
3,oracle falshback drop.
该特性允许 oracle把恢复 drop掉的 table 或者索引。
4,oracle falshback version query.
该特性可以得到特定的表在某一个时间段内的任何修改记录!
5,oracle falshback transaction query
该特性可以限制用户在某一个事务级别上检查数据库的修改操作,适用于诊断问题、分
析性能、审计事务。


八 其他高可用性方案(High Availability)简介
• Data Guard:提供一组全面的服务,可用于创建、维护、管理并监控一个或多个备用数据库
• Oracle Real Application Clusters (RAC):用于从多个实例访问单个数据库
• Oracle Streams:可以传播并管理数据流中的数据、事务处理和事件

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/235507/viewspace-592045/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-08-08

  • 博文量
    209
  • 访问量
    863696