前段时间公司业务系统要做版本迭代,运维组全员加班,我也借着这次刚需实打实的吃透了如何备份oracle数据库,以往工作里都是同事提前备好备份文件,我只负责调用,压根没亲手操作过完整流程,真独立上手的时候,才发现看似简单的数据库备份,藏着超多新手极易踩的隐形问题。
最开始图省事,直接复制了网上的exp导出脚本,想着老旧工具通用,跑起来肯定没问题,敲完命令回车的瞬间,弹窗疯狂报错,先是提示用户权限不足,紧接着又是表空间读取失败,密密麻麻的红字刷屏,瞬间打乱了加班的节奏,反复修改脚本参数三四次,依旧没能成功导出完整数据,只是零星导出了几张基础数据表。
压根没考虑exp工具的局限性。
折腾好久才搞明白,11g及以上版本的Oracle数据库,官方早就主推expdp数据泵备份,老式exp工具不仅速度慢,还不支持大字段、分区表的完整导出,适配性极差,难怪网上的通用脚本跑不通。当时抱着试一试的心态,切换成数据泵的操作逻辑,第一步先处理数据库目录问题,expdp不能直接指定电脑本地路径,必须先在数据库内创建逻辑目录,映射服务器真实的存储路径,这一步是绝大多数新手第一次备份都会翻车的关键点。
登录Oracle服务端,用sysdba身份执行创建目录命令,仔细核对服务器磁盘剩余空间,那次要备份的业务库数据量有八十多G,特意选了空闲充足的data磁盘,避免存储空间不足导致备份中途中断,目录创建完成后还要给普通数据库用户赋予读写权限,少了这一步赋权操作,后续所有的导出指令都会直接报错,根本无法执行。
参数配置也不能随便填。
编写正式备份脚本的时候,只保留了核心实用参数,full=yes开启全库完整备份,parallel=4开启多线程提速,再加上日志输出参数方便后续排查异常,删掉了网上脚本里一堆花里胡哨的冗余参数,那些参数对普通企业业务库备份完全没用,反而容易引发参数冲突、备份终止的问题。保存脚本后直接执行,服务器终端开始持续滚动备份进度日志,看着数据进度条稳步往前走,紧绷了一晚上的神经才慢慢松弛下来,全程二十分钟左右,完整的dmp备份文件就生成在了提前映射好的服务器目录中。
备份执行结束后没有直接收尾,逐行翻看了全程日志文件,确认没有报错、数据跳过、异常终止的记录,又核对了dmp备份文件的大小,和数据库实际数据体量基本匹配,彻底排除了空备份、残缺备份的情况,保证这份备份文件后续可以正常还原使用。
凌晨两点,把备份文件压缩加密后移入离线存储盘,关闭所有操作终端,指尖触到冰凉的键盘托,静静看着屏幕暗下去。