为了最大限度保障数据的安全性,同时能在不可预计灾难的状况下保证数据的快速恢复,须要根据数据的类型和重要程度制定相应的备份和恢复方案。在这个过程当中,DBA的职责就是要保证数据库(其它数据由其它岗位负责)的高可用和高性能,好比:如何避免数据库发生常规错误、如何增长MTBF、如何下降MTTR、使用使用哪些冗余技术保护关键组件以及如何作到最小化数据丢失。前端
在社区最近的在线交流中集中讨论了Oracle数据库备份恢复相关的问题,同时也拓展到了其它方面,好比性能问题、案例分析、RAC相关的备份问题及生产环境中的经验分享。很是感谢爱好者的参与,特别是ttkanni、fengshuai等会员的积极参与,由主要分享者royalwzy对所涉及的问题进行了整理和归类,提供给你们参考,包括以下几个部分:linux
1、数据库备份恢复基本问题sql
2、数据库备份恢复性能相关问题数据库
3、数据库备份恢复性能案例分析安全
4、数据库备份恢复性能优化问题性能优化
5、数据库备份恢复RAC相关问题服务器
6、数据库备份恢复经验分享网络
一、问:Oracle11g数据库数据量有50T,天天增量50g左右,该如何制定备份方案,如何验证备份的有效性?session
答:架构
50T的数据也不大,运营商的地市级市数据基本都在100T以上了,只要备份环境容许的话,也能在12h内备份完成。
以一次全备份来算,在12h内备份完成,那么平均备份速度最低是
5010241024/12/3600=1210MB/S
按照LTO 5 drive的速度(140MB/S)来算,备份最低的drive数量:1210/140=9
为了保障dive尽可能保持最大IO,建议额外关注几点:
1,datafile较小的话,聚合成较大的bakcup piece
2,调整read/write blocksize减小读写次数,可酌情调整至MB大小
3,调整备份脚本,一个channel对应一个backup session,每一个channel尽可能保障只有一个大块backup piece写入
4,关闭备份软件和drive的多路复用功能,保证每一个dive上只有一个session写入
5,备份尽可能走单独的HBA卡,不要和业务或存储共用
备份策略的话,一个完整的备份周期确定是FULL+INCR+INCR比较符合实际状况,若是条件容许Synthetic Full也是一个很不错的选择。归档看需求,4h或者6h备份频率均可以。
相关案例:
某地市数据库,大概数据量90T,备份从4块独立的16 GB HBA走,每块HBA绑2个LTO 5物理drive,备份起8个channel,每一个channel对应一个bakcup piece,每一个bakcup piece都聚合为500 GB,R/W blocksize为2MB,多路复用关闭。
二、问:Oracle的数据库备份,通常采用数据泵将库和数据备份,这样安全吗?通常是各一个周备份一次。
答:
安全这个词在这里的定义比较模糊。
1.expdp/impdp是逻辑备份,备份的过程当中也可使用加密从而保证数据的安全。
2.也正是由于这种方式是逻辑备份,不论你才用多久的时间间隔来备份,两次备份过程当中有数据丢失都没法经过这种方式恢复到数据丢失的那一刻。
想要保证数据能够恢复到任意时刻建议使用rman;若是每隔一段时间想要保存一下数据某时间点的快照的话,使用数据泵和rman都行。
三、问:如何设计oracle数据库的备份与恢复的时间窗口?都须要作都那些方面的考虑?系统环境愈来愈复杂,须要备份的数据库也愈来愈多。在作数据库的备份与恢复设计时,应如何设计oracle数据库的备份与恢复的时间窗口?都须要作都那些方面的考虑?
答:
先说备份,须要着重考虑几点:
1,备份方式:根据实际数据保护须要,肯定备份方式,通常都是FULL+INCR。条件容许就全FULL。其次就是备份频率,一个FULL后追加多少个INCR,归档多久备份一次。
2,备份时间窗口:备份的过程当中对生产业务(数据库)压力是很大的,因此首先应该规划备份的时间窗口,通常都在晚上。
3,备份流量路径:肯定了备份时间窗口,就想一想备份的流量怎么走。LAN-FREE备份好说,LAN备份就要特别留意了,备份前先拉着网络的哥们交流下感情,最终肯定好流量路径,不要影响其余业务。
4,数据保留、克隆:对于重要的数据,不只须要备份,最好克隆一份。出入库看实际需求了。
恢复通常在单独的恢复环境,因此没什么须要特别注意的。
四、问:RMAN备份和数据泵备份的比较,适用范围?
答:
RMAN是oracle推荐的数据保护工具,在备份恢复上,RMAN可以借助备份数据恢复一段时间范围内某个时间点数据库的状态。此外RMAN在备份恢复的校验上更加严格,最大程度保护数据的完整性、一致性以及适用性,同时也方便备份恢复的统一管理。
EXP/EXPDB,在oracle的定位中,只是一个数据迁移的手段。在备份恢复上,数据泵只能利用备份数据来恢复一个时间点上的数据库状态,没法借助备份数据在一段时间内自由选择恢复点。在严格的意义说,数据泵备份并不能说是一种有效的数据保障措施,这更像是一种临时的保底操做。
五、问:oracle数据库备份及恢复那种方式更简单!更快捷?exp/imp 仍是rman或是其余方式?
答:
应该按照系统的RTO的要求上来看,逻辑导出和RMAN配合使用,exp的方式由于要放到本地或者放到本地以后上传到服务器,这种比较占用磁盘空间,可是在一些跨平台恢复上exp又是能够的。rman主要仍是防止逻辑错误,搭配备份软件,进行数据的集中管理较多。
集中化备份管理来讲,rman是最有效也是最可靠的方式。exp、expdb虽然操做简单,对于数据的持续性保护太弱了~
六、问:ORACLE数据库该如何设定防范逻辑错误的备份策略和备份方案?
答:
逻辑错误有不少中解决办法,使用备份恢复是最有效的一种,可是大多时候并非最优的一种方法。
若是要使用备份等话,那就建议保留全部的归档日志,除了备份恢复,还可使用Oracle数据库的闪回功能,好比:闪回查询,闪回表,闪回事务和闪回数据库等操做。
七、问:不少时候Oracle备份或恢复都是由oracle结合第三方备份软件完成,在备份恢复的过程中时不时的会遇到备份恢复的速度比预想的要差不少,各位有哪些经验?如何定位是oracle设置的问题仍是备份软件的方面的缘由?
答:
性能排查无外乎源、路径、目标这三点,第三方备份软件能够看作在“路径”上的管理员,调度数据从源到目标。
源端问题,存储问题就从存储读直接写到null看读速度,写就直接生产随机数据写存储。
路径问题,从源内存直接生产随机大数据写备份介质(drive通常不会有性能瓶颈)或者直接作rman的validate验证恢复
目标端问题,drive通常只需检查物理状态。AFTD文件类型设备检查其存储性能问题,方法如上。
八、问:针对不一样业务系统采用的数据库备份策略是怎么样的?按期恢复验证的周期为多久?
答:
备份方式无外乎FULL INCR Synthetic Full
备份环境极好,只用FULL备份,恢复速度最快。
备份环境稍好,FULL +INCR +Synthetic Full,恢复速度适中。
备份环境有限,FULL +INCR +INCR,恢复速度通常。
对于FULL+INCR(Synthetic Full)这种方式,INCR次数不建议太多(INCR较大的数据库建议INCR次数不超过3),不然恢复速度会大打折扣。
如今厂商还宣传一种特殊的备份方式:Virtual synthetic full backup
这种备份方式,利用传统的FULL+INCR进行,Virtual synthetic full backup时在备份介质上将FULL +INCR整合成一个至关于实际的FULL对外提供恢复服务。
恢复验证周期,通常一个季度内至少挑选各种型备份恢复一次。
恢复环境好,恢复验证频率能够为一个月一次,每次都真实恢复。
恢复环境稍好,适当下降恢复验证频率,挑选重要系统备份真实恢复,其他作oracle validate恢复或者scan tape。
恢复环境通常,在连续的多个备份周期内至少能对一个完整周期的备份进行oracle validate恢复或者scan tape。
九、问:最近veritas的来作技术交流,据他说NBU的备份一体机在生产库出问题的状况下,能够经过rename一系列操做将库从备份一体机中拉起来直接用。有用过的吗?
答:
在其余厂商的产品里有VM_RECOVERY能够实现这样一种恢复。直接从备份介质读备份数据,在前端虚拟出一台虚拟机。
但在数据库上,我记得仍是要恢复的,厂商吹嘘的直接拉起库?只要你用RMAN rename就是有恢复,由于备份数据从备份软件还原到RMAN识别、rename就是恢复的过程。
十、问:一个数据库实例下面有十几个用户,如何实现分用户备份各自的数据,不用一个一个exp?各用户如何实现并发备份?
答:
Oracle Rman没法实现分用户备份,但能够折中处理:备份用户对应的全部表空间数据。
Oracle Rman是经过channel和复用来实现并发备份的,具体语法参考RMAN手册。
十一、问:在三地两中心的双活结构中,oracle的数据库双活如何进行安装部署,在这种状况下还须要有数据库备份的必要性呢?ODG和ADG在这种数据库备份环境中该如何操做呢?
答:
数据库双活了更须要数据库备份,不然数据库逻辑错误,一损俱损,都没得恢复了。。ORACLE备份不就是RMAN或者数据泵,备到存储或磁带,保持一份最新的数据,防治数据库逻辑错误。
多活只能保障单边故障下业务还能够online(高可用),但对于数据逻辑错、历史数据审查、历史数据分析等问题,多中心多活的结构框架依旧没法克服。
的确,从另一方面,数据库双活了,应用一样须要双活。切换时还须要考虑是直接切换到异地的机房,仍是在原机房进行恢复。
十二、问:Oracle 备份保留参数主要是两个:一个是保留的天数,另外一个是保留的副本数。那么这两种状况具体有什么区别,在什么场景下使用什么样的参数设置呢?
答:
前者主要考虑的方面是:想要把数据库恢复到历史的哪个时间点;后者主要考虑的方面是:要针对备份如何作冗余
Configure retention policy to recovery window of N days;
表示备份保留N天,即表示oracle能够保证还原到N天内的任意时间点。
CONFIGURE RETENTION POLICY TO REDUNDANCY n
表示备份保留N份。
区别就是基于恢复窗口的保留策略纬度不一样,看你的具体需求 磁盘窨 备份策略 来选择不一样的参数设置
1三、问:oracle数据库的exp备份方式是否可否恢复存储过程和触发器?是否支持跨版本?RMAN方式呢?
答:
exp和expdp都能知足你的需求 rman更能知足。不过注意千万不要在平时用exp来作容灾备份 用rman来作 exp的定位仍是数据迁移工具。
1四、问:你们的Oracle备份环境中,是否建设有Catalog数据库用于存放备份记录啊?仍是直接使用的控制文件?
在备份和恢复中,Catalog的主要优点在哪?哪些是必要因素说明必需要建设Catalog数据库?
答:
1.rman的备份信息默认是存放在目标数据库的控制文件中的,存放时间由control_file_record_keep_time参数控制,默认是7天;同时,也能够把rman的备份信息保存到一个独立的数据库中,叫作recovery catalog;
2.使用recovery catalog能够保存更长时间的备份信息,当目标数据库的控制文件丢失时很是有用;
3.recovery catalog能够保存多个目标数据库的备份信息,能够保存RMAN stored scripts(相似于存储过程,就是一系列rman脚本);另外若是想要试用永久保留备份的话,必须使用catalog;
4.若是只是简单的备份管理需求的话,建议使用控制文件便可,由于若是使用recovery catalog的话,意味着还要对其它的数据库作备份管理,Licence费用;因此,只有在使用recovery catalog带来的好处比较大时才使用。
1五、问:Oracle 强大之处之一在于有不少表和视图用于性能分析和故障诊断,哪些表能够用于备份恢复异常时的性能诊断,有无经验分享?
答:
select s.status as "备份状态",
b.INPUT_TYPE as "备份类型",
to_char(b.START_TIME,'yyyy-mm-dd hh24:mi:ss') as 总的开始时间,
to_char(b.end_time, 'yyyy-mm-dd hh24:mi:ss') as 总的结束时间,
trunc(b.ELAPSED_SECONDS/60,0) as 耗时多少分钟,
b.INPUT_BYTES_PER_SEC_DISPLAY "in_sec/s",
b.OUTPUT_BYTES_PER_SEC_DISPLAY "out_sec/s",
trunc((s.END_TIME-s.START_TIME)2460,0) "单个文件备份用时(分)",
to_char(s.START_TIME, 'yyyy-mm-dd hh24:mi:ss') as "开始备份时间",
to_char(s.END_TIME, 'yyyy-mm-dd hh24:mi:ss') as "结束备份时间",
s.OPERATION as "命令",
trunc(s.INPUT_BYTES/1024/1024,2) as "INPUT-M",
trunc(s.OUTPUT_BYTES/1024/1024,2) as "OUTPUT-M",
s.OBJECT_TYPE as "对象类型",
s.MBYTES_PROCESSED as "百分比",
s.OUTPUT_DEVICE_TYPE as "设备类型"
from v$rman_status s,v$rman_backup_job_details b
where to_char(s.START_TIME, 'yyyy-mm-dd hh24:mi:ss') < to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')
and to_char(s.END_TIME, 'yyyy-mm-dd hh24:mi:ss') > to_char(sysdate-7,'yyyy-mm-dd hh24:mi:ss')
and s.COMMAND_ID=b.COMMAND_ID
order by s.START_TIME desc ;
select s.status as 备份状态,
trunc((s.END_TIME-s.START_TIME)2460,0) "备份用时(分钟)",
to_char(s.START_TIME, 'yyyy-mm-dd hh24:mi:ss') as 开始备份时间,
to_char(s.END_TIME, 'yyyy-mm-dd hh24:mi:ss') as 结束备份时间,
s.OPERATION as 命令,
trunc(s.INPUT_BYTES/1024/1024,2) as "INPUT/M",
trunc(s.OUTPUT_BYTES/1024/1024,2) as "OUTPUT/M",
s.OBJECT_TYPE as "对象类型",
s.MBYTES_PROCESSED as 百分比,
s.OUTPUT_DEVICE_TYPE as "设备类型"
from v$rman_status s
where to_char(s.START_TIME, 'yyyy-mm-dd hh24:mi:ss') < to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')
and to_char(s.END_TIME, 'yyyy-mm-dd hh24:mi:ss') > to_char(sysdate-7,'yyyy-mm-dd hh24:mi:ss')
order by s.START_TIME desc ;
1六、问:请问各位在生产环境中遇到哪些备份恢复的问题?
答:
源库和恢复的目标库 数据库编码格式不同,致使一直提示找不到bakcup piece。
备份时遇到坏块
备份时文件被误删除
1七、问:数据库从9版本迁移到12c 数据表结构都变了,怎么迁移数据呢?
答:
可使用kettel等etl工具来帮忙,固然你也能够先升10再升11再升12 一步一步的升上去;同是oracle数据导出再导入也简单。
1八、问:oracle用rman作recover和用sqlplus作recover有什么区别?
我曾经遇到过这样一个问题,生产的存储卡坏了(生产是2个节点的RAC),须要在另外一台服务器恢复数据库(非RAC),幸亏我把归档日志保存了一份在本地磁盘。在还原旱,用 rman 作 restore 正常完成,但在作 recover 的时候,报错了(具体的错误号我忘了,但大概意思是找不到所须要的归档日志,但在新的服务器上的归档路径下有这归档日志文件),整了半天,就是不得行,后来,我用 sqlplus recover 成功了,命令以下:
sql> recover database using backup controlfile until cancel;
为何为这样,我至今没有搞明白,请高手们分析一下。
答:
若是你的oracle rman恢复是没有catalog,且在rman中的恢复仅仅是“recover database”的话,会出现你说的这个问题。
要想明白问题的缘由,还得从这两句恢复命令出发:
recover database using backup controlfile until cancel;
在单一的recover database 或者 recover tablespace, recover datafile时,Oracle会以当前controlfile所记录的SCN为准,利用archive log和 redo log的redo entry, 把相关的datafile 的 block恢复到“当前controlfile所纪录的SCN”
而当前controlfile和current/active redo都丢失的状况下,你就须要使用你在SQLPLUS里输入的那句恢复命令,在不少状况下,因为datafile数据的不一致性,Oracle须要把数据恢复到比当前controlfile所纪录的SCN还要靠后的位置,简单的说,就是须要更多的归档。
若是你还能复现这个恢复场景,你查询下你报错的所需的归档,利用原来的controlfile进rman里list backup看一下就能知道了。
1九、问:随着数据库体量的增大,有时天天全备已经不能知足须要了,考虑使用增量备份。各位专家有没有遇到过实施增量备份过程当中的问题呢?还有就是对于OLTP系统,天天大量数据块是被更新了的,这样的话block change tracking即便打开了,也很难提升备份速度(由于大部分块都被修改过,仍然须要备份),这类问题同行朋友有没有比较好的建议?
答:
首先确认一下数据库大小有多大,使用的lan备份仍是光纤,使用的几个通道,平均一个通道io有多大?若是使用的lan 是否网卡已经饱和等等?
若是你的情况是天天变化的数据能影响到几乎全部的数据块的话,那么考虑使用backup as copy。
20、问:Oracle 10gr2 RAC由于须要更换存储,数据库迁移有什么特别的方案吗?系统Oracle Linux 5.7,DB:10.2.0.5。
答:
具体看停机窗口时间跟数据量,能够采用集中方式:1)导入导出;2)备份恢复;3)使用新的存储作一个DG的备机,而后切换过去。
2一、问:现有数据库为oracle rac,想搭建一套彻底实时互备的数据库,能作DataGuard吗?若是能够那么scanip 和VIP、sid和原库能保持一致吗?如不行那么有什么能实现以上功能?
答:
彻底能够在现有环境下搭建adg。
scanip,VIP,sid都不能一致,可是数据库惟一名必须一致,这是adg的配置条件。
2二、问:一个oracle数据库的RAC环境,在平常运维管理中应重点关注那些方面的具体内容?
在对oracle数据库进行平常运维管理中,咱们都应该重点关注那些方面的具体内容?
咱们目前可以关注的,如:ORA-告警信息,一些表空间的的告警。这个也是主要从监控系统(如TIVOLI监控系统)中得到,除此以外,咱们还应该重点关注那些具体方面的内容?
答:
除了监控,也须要关注RAC环境的性能调优,Service的管理,负载均衡等方面吧
2三、问:若是Orace数据库的RAC在建设的时候,归档没有放在共享或者ASM上,只是在单边存放,那么这种的Oracle数据库备份你们通常都怎么作?两边都备份?仍是mount NFS?哪一种更好些?
答:
归档仍是建议放在共享存储上,不太建议单边存放。一是方便管理,二是简化备份流程。
如果单边存放,只能在每一个节点上单独备份各自的归档。
对于归档数据量较大的场景,不太建议NFS。若是容许,能共享尽可能共享
6、数据库备份恢复经验分享
架构
Oracle的备份通常来讲仍是基于第三方备份软件来完成平常备份的,诸如NBU,TSM等
那么在设计架构方面应该多考虑一下是集中的方式来作仍是分开来作,主要考虑有几点:
1.公司须要备份的节点数量和位置
2.目前公司网络状况(是否有分支机构走专线备份,备份网段和生产网段的连通性等,是否有专用备份网络)
3.是否使用catalog
4.备份设备是否分层或异地同步
5.是否有出库异地存放需求。
数据量
1.数据量小,基本上能够考虑使用lan方式配合备份窗口来完成
2.数据量大,考虑配合高速以太网和lanfree方式完成,备份方式(全备+曾备+归档备份完成)
配置
1.选用较高配置X86 服务器+linux 完成备份环境搭建
2.备份server和节点session和资源限制不要使用默认,看状况修改
3.Oracle 备份片和通道要作适当设置
4.专有备份lan或光纤卡
性能定位
1.本地io
2.网络io
3.备份软件兼容性,已经版本bug
4.备份软件trace跟踪
5.oracle备份参数设置:备份片和备份方式,是否压缩,块跟踪等
备份恢复的方法和种类不少,为啥有的时候客户还不满意?由于你不对他路子。
举个例子,开发人员不当心删错了数据。你说有flash back呀一看undo retention不够。
那开始备份恢复吧,结果system或者user表空间巨大,哇数据全在system里面是否是原来设计好的想法都没用啦?
若是能够依照先有的数据库结构作些适当的引导那么会好不少。
且国内客户和国外客户处理的方式太不同。特别是韩国和日本客户。针对细节问题到了无以复加的地步,那么这个时候备份和恢复设计就不能有本身解释不通的地方。
说了那么多具体谈下怎么作事吧。
最重要的一点,备份的东西能够吐出来。
那么要给本身留后路,备份的东西要异与恢复。
那么若是钱足,上硬件级别备份。例如emc timefinder,SRDF等等。条件好的能够作个备份的colne。
必定要建议购买专业的备份恢复软件,关键时刻能够用来顶包。
那么最好作物理备份,用于防止物理的损坏。
若是既要防止物理损坏又要很快的把人为的错误数据找回来就能够设置一个standby那么防止物理损坏的备份直接在原库备份,用于防止人为损坏的备份在standby节点备份,延时个一天吧。应该能够知足要求。
以上是大体的经验,个人意思是备份手段多种多样,怎么搞成最适合的场景但是个大学问。
问题现象:ORA-00245: control file backup failed; target is likely on a local file system
解决办法:
1. Check the snapshot controlfile location:
RMAN> show snapshot controlfile name;
2. Configure the snapshot controlfile to a shared disk:
RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/snapcf_.f';
Or in case of ASM use
RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+/snapcf_.f';