说起DBA,全称是Database Administrator,不是Doctor of Business Administration,千万不要误解,那可是天壤之别!尽管如此,很多人依然认为有着神秘的面纱,高深莫测,花环簇拥,是收入丰厚的一族人。实则不然,DBA说白了就一修理工。修理啥呢,不是车床机床,也不是修理啥精密仪器,修理的是数据库,仅此而已。DBA这个行业同样也经历了由萌芽,发展到鼎盛的过程。尤其是近2年海量数据的井喷以及新数据库时代,云数据时代,DBA 2.0时代的兴起。以及最近所谓后DBA时代的说法。说到DBA的工作,我们先得搞清当前几类常用的数据库。主要有两大阵营,一类是SQL,学过计算机的人应该都知道,传统数据库,诸如Oracle,DB2,MySQL,SQL serer等主流数据库。面对的是那些传统行业,比如证券,银行,电信等使用的居多。另一类是NoSQL,诸如Hadoop,MongoDB,CouchDB等,主要用于互联网行业,如在线社交系统,Amazon 的Dynamo等。对于当前这两大阵营,貌似有划江而治之势。让人不免眼花缭乱。究竟何去何从,应当更多或更深的思考,这是一个比较大的话题,暂且不表。本文主要描述一下传统DBA的那些事,也就是DBA的工作范围与职责,更多的围绕Oracle展开。本文主要从六个方面来简要描述DBA的工作。
一、数据库的整体设计与规划
有如建造一座豪华的宫殿一样,宫殿尚未动工之前,其选址,结构布局,空间利用,方位设计等必须先有一套完整的方案。数据库的规划与设计同样如此。良好的数据库架构设计直接影响到基于该数据库业务系统的整体性能。而这个架构设计又来源于对业务有详尽的需求分析,从而对现实需求进行综合、归纳与抽象并形成完整的E-R图,再由E-R图转换为相应的逻辑模式(表、视图定义等,考虑范式要求)。同时也根据业务的初期、中期及后期考虑合理的数据库存储规划以及根据数据库负载、重要程度考虑使用单实例数据库、集群、复制、镜像等等高可用策略。当然,对于数据库运行平台环境等也是一个比较重要的选择。大多数情况下,数据库的整体设计对大多数DBA而言没有机会来接触或实战,尤其是设计E-R图以及表、视图定义等,这部分通常都是由专业数据库设计人员或开发人员来完成。因此本文对此也是初步描述。如果有机会参与,不要放过。
二、安装升级、迁移部署
1、安装数据库。这个是最起码的要求了。就好比那些个developer,最开始的代码,第一句是"hello world"一样。这个是你必须会的,要掌握的。如果是SQL server安装部署就相对简单,全部图形化界面搞定,而且美观赖看,功能也很强大,电信移动也有在用。这类数据库容易上手,这也是Microsoft的强项之一。唯一的缺憾就是不能垮平台。与之相比的复杂的安装部署那就是Oracle,DB2,MySQL等这几类数据库了。先得把整个环境搭建好,诸如内核参数,环境变量,rmp package之类的搞定,没得一个安装参考手册,有得你整。尤其是部署生产环境,每一个参数都得结合其数据环境考量规划。这个需要一定的经验。缺省值有时候不一定能满足现状。尽管如此,跨平台特性则成为这几类数据库被广泛使用的重要原因之一。管得你Windows,Linux,还是Unix,都有对你胃口的。
2、升级数据,更新patch等等也是司空见惯之事。那个Bug多的是难以数计。有道是,白天监控数据库,夜晚挑灯战bug。这个部分比较重要的是需要考虑更新patch等之后产生的影响以及做好回退措施。谁都难以绝对保证明地球明天照样转。所以得靠自己把握。
3、数据库迁移。这种情形也是常见之事。随着业务的增加,对性能要求的提高,以及更新换代,需要升级不得不实施数据库迁移。老牛拉破车总是入不敷出,影响业务。迁移也是一个比较耗大的工程,尤其是大型数据库,上TB级的。比如使用导入导出,尽管操作命令一样,但大型数据库你得考虑的更多。诸如考虑使用并行,如何优化这个过程的性能,整一steps完全有必要。
三、监控数据库
除了合理的部署数据库之外,透过对数据库不同部分、组件的实时监控,我们可以及时采取补救措施以及防患于未然的策略来保障数据库持续、稳定、健康平稳运行。因此系统监控对于DBA而言,同样重要。下面先描述数据库级别的监控,后描述系统级别监控。这些部分通常包括以下内容:
数据库告警日志的实时监控,绝大部分Oracle错误信息都会记录于此。因此监控告警日志显得尤为重要。
数据库实例状态监控
数据库监听器的实时监控
表空间的使用率实时监控
闪回区或归档日志监控(如果有使用到闪回区,归档主要是针对归档空间空间问题,如不足,如用hang住)
数据库备份或恢复监控
无效对象的监控与处理
操作系统CPU/IO/Memory监控
对于监控工具的选择Oracle OEM提供了完美的图形化界面以及设定阀值来实现自动预警。当然也可以自己编写shell脚本来定时完成。对于SQL server同样可以基于GUI来完成。比较好的工具大家可以借助于Toad,Spotlight,Myora等优秀工具获得包括sga,pga,top SQL,instance等等更为详细的信息。除了实时监控之外,定期巡检也是有必要的。这就好比机器或汽车,得进行定期的保养。这样子可以发现隐性的或未决的问题,以及如何改善当前数据库。
四、保证数据库完整性
不求有功,但求无过。这个对于DBA来说是最起码的一点。很多时候我们无意中不小心的rm,drop等等有时候会带来灾难性的后果。永远不要有机会给上司开国际玩笑,那就是你不小心的整坏了生产数据库,而且还没有备份,这就丢大了。因此DBA的细心,数据库的定期备份是至关重要的。尤其是对于那些数据库是企业核心命脉的企业,每一步操作都尽可能思前想后。对于数据库的备份方式有多种多样,而且有诸多第三方备份方式。即便如此,每种数据库自带的备份方式是必须要掌握的。对于SQL server而言,自带的图形化备份设计基本上可以满足绝大多数需求。需要搞清数据库的恢复模式以及全备,增量等方式,当然掌握bcp命令也是很有必要的。对于Oracle,datapump,冷备,热备,rman备份几种最好都全部掌握,多多益善。数据库的备份策略主要依赖于对数据丢失的容忍度来决定。也就是说合理的备份策略基于数据库恢复所需要的所有相关的东东。因此备份策略应具体情形具体分析。定期的监控数据库的备份以及做灾备测试等来确保数据库的备份与恢复是完整无误的。
五、性能优化与调整
业务运行缓慢,客户抱怨不断。这是DBA们经常头疼的问题。尽管整体性能并不完全取决于数据库,但数据库仍然是至关重要的一环。而且性能的问题从整个业务需求分析,数据库架构设计的那一刻起直至数据库生命周期的终结。尤其是随着业务量的不断增加导致的性能问题日渐显现并表现的异常突出。正因此,对于一个优秀的DBA来讲,仅仅从数据库层面来把控性能是远远不够的;对存储,操作系统,网络,业务的了解与掌握才能对性能调整做到有的放矢,应用自如。深圳有句展现特区精神的口号,时间就是金钱,效率就是生命。同样适用于在线交易数据库系统。下面仅仅从数据库层面来谈谈性能调整与优化涉及到的方面。
操作系统内核参数优化与调整
基于不同的特性使用raid部署不同类型文件
分开存储数据和索引文件以及均衡I/O
调整数据库以及实例级别初始化参数
使用分区表处理海量数据以及滑动窗口归档
消除行链接与行迁移
使用索引、提示或物化视图调整SQL访问负载
调整优化器统计信息
通过调整PL/SQL以提供性能
使用并行技术提高性能
六、Troubleshooting
天有不测风云,人有旦夕祸福。数据库运行的过程中总难免出现这样或那样的问题。一是由于数据库软件及运行环境等产生的各种bug或隐性问题,二是人为的问题通常也不在少数。因此,如何快速定位并解决这些问题也是衡量一个DBA水平的重要指标。处理这些棘手的问题,需要DBA有大量的知识和经验的积累。尤其是对数据库理论以及数据库体系结构应该有较深刻的认识,把握其本体,何愁不能应用自如呢?在这里只说明Troubleshooting是DBA经常面对的问题,并未描述如何Troubleshooting。下面列出几类较为较为常见的需要Troubleshooting的问题。
告警日志中的异常处理
监听器相关的异常处理
数据库备份恢复期间的异常处理
Oracle job运行异常的处理
数据库突发的异常处理,如数据库hang,某个时间段性能低下 --Author:Leshami
集群管理中的异常处理 --Blog :http://blog.csdn.ne/leshami
DataGuard数据库日志传送,恢复等异常处理
用户报告的异常处理
数据库安全的异常处理
上面主要从6个方面简要的描述了DBA的工作及其职责范围,当然还有更多的细小的问题在此不再赘述。
总之DBA的工作也很繁琐,需要沉着冷静应对,三思而后行,尽可能地从整体出发,从全局出发来考虑问题。
2014年2月 深圳