干了十几年Oracle DBA,最怕听到的一句话是:“昨晚数据怎么没了?” 这时候再好看的监控大屏、再贵的存储阵列,都抵不上一份能用的备份。我见过太多项目,上线时把备份策略写得天花乱坠,真出事儿了,rman一跑,报错,备份文件损坏,或者压根没备份成功过。所以今天不聊虚的,就说说我踩过坑之后,总结出的五条保命策略,条条都是拿真金白银换来的教训。

先说第一条,也是最容易被忽视的:备份不是“配了就行”,得当成“每天必须验证的流水线”。很多团队把rman脚本往crontab里一扔,就算完事儿了。结果呢?日志文件越滚越大,从不检查,直到某天恢复时才发现,半个月前备份就静默失败了。原因五花八门,磁盘满了、密码文件失效、归档目录权限变了。我的习惯是,每天早上到工位第一件事,不是看邮件,是跑一条命令,再看看昨天的日志有没有ORA-错误。这花不了五分钟,但能让你在故障发生前,就把问题掐死在摇篮里。
第二条,RMAN的保留策略和恢复窗口,必须按业务能承受的“最坏情况”来定,而不是按存储成本定。有次一个客户,核心交易库,磁盘紧张,把备份保留策略设成了“只保留最近两天”。结果周三中午误删了一个大表,业务方说不行,我们要找回上周五的数据。你说怎么办?备份早就被RMAN自动清除了。后来我给他们重设,保留策略改成,恢复窗口改成10天,并且把归档日志单独放一块廉价存储上,多保留一个月。成本是高了点,但从此没人再半夜打电话说“数据找不回来了”。
第三条,光有RMAN全备不够,归档日志和增量备份的配合才是“时间旅行”的关键。很多新手以为每天做个全备就万无一失,但全备只能让你恢复到“备份那一刻”。如果业务是早上九点误操作,你昨晚十二点的全备,意味着要丢九个小时的数据。我的做法是:周日全备,周一到周六做累积增量或者差异增量,同时把归档日志实时传到备机。恢复时,用全备加增量,再应用归档日志,能把数据推到误操作前的一分钟。这里有个坑,归档日志的连续性很重要,中间断了一小段,后面全白搭,所以定期用确认归档完整性,是必修课。
第四条,别把鸡蛋全放在一个篮子里,备份文件必须“异地多活”。我有个客户,机房在杭州,所有备份都放在本地的磁盘阵列上。结果某天机房空调漏水,直接泡了机柜,主库和备份库一起完蛋。后来我们痛定思痛,在另一个城市租了台云主机,每天把RMAN备份的副本通过之后,再用或者传到远端。虽然多了点带宽成本,但至少地震、火灾、漏水这种极端情况,你手里还有一份能用的数据。千万别觉得灾难离自己很远,真出了事,哭都来不及。
第五条,也是压箱底的:恢复演练不是“可选项目”,是“保命项目”。我见过太多DBA,备份做得漂亮,但从来没真正恢复过一次。等到真出事,命令不会敲,流程不熟悉,手忙脚乱。我的建议是,每个季度,挑一个周末,在测试环境里,把生产备份完整恢复一遍,然后跑几个关键查询,验证数据完整性。甚至更狠一点,故意模拟一次误删,然后走一遍恢复流程。演练过的人,面对故障时心里是有底的,知道第一步干什么,第二步干什么,不会在那种高压氛围下脑子一片空白。记住,备份是防御,恢复才是真正的进攻。
再啰嗦一句,别迷信“高可用集群”能替代备份。RAC、Data Guard这些,解决的是“单点故障”,解决不了“逻辑错误”。一个误操作,一执行,主库备库同步执行,全都完蛋。所以,无论架构多牛,备份永远是一道防线。把这五条策略落到实处,你就能在夜深人静接到电话时,沉稳地说一句:“别慌,有备份,能恢复。” 这句话,比任何年终奖都让人踏实。数据安全这事儿,从来不是靠运气,是靠习惯和纪律。


