前言
随着大数据被越来越多的人所议论,数据也越来越被世人所重视。同时随着2014年4月1日SQL Server 2014的发布,微软SQL Server终于在TPC-H(数据仓库相关领域)超越Oracle成为大家的焦点。
最近几年拜访了很多客户,有数据库领域的专家也有数据库刚入门的新人,虽然市面上不乏大量的各数据库大厂DBA大牛们的杰作,但是很多时候过于理论很多新人还是只能徘徊于DBA大门之外,虽然我也只是做了短短几年数据库但是还是想尝试一下写写个人的一些经验,希望能帮助到大家,至少在入门的时候让大家少走弯路,如果文章中有什么不对或不完整的地方请大家给予指正以便完善
P.S. 以下数据库相关技术内容将主要涉及到Microsoft和Oracle两种主流数据库,后续文章仅个人经验仅限帮助新人快速入门,更全面的细节必须以Microsoft MSDN或Oracle Support官方文档为准
DA和DBA
这是我曾经在某位大牛的书上看到的,第一次看到的时候很诧异,DA跟DBA难道不是一回事儿吗?其实两者是有很大区别的
DA全拼:Data Administrator 数据管理员
DBA全拼:Database Administrator 数据库管理员
P.S. 重点在于【管理】:个人理解【管理】这两个字,无论是在项目管理、软件管理、运维管理等方面,核心都是一样,很简单两个单词:Risk Control风险控制
DA工作职责更贴近软件架构师,其更关心的问题是数据怎么使用,功能性需求如何实现等环节,国内软件开发具备以下几个特征:时间短、内容多、需求变化频繁等,以至于软件架构师基本上没法去管非功能性需求
DBA工作职能偏向于非功能性需求,DBA是对所有数据库管理员的统称,但是落到实地却不能这么笼统,至少应该划分为以下几类(为什么这么分大家自己去领悟):
-
架构DBA
-
开发DBA
-
ETL DBA
-
分析DBA
-
运维DBA或叫做生产DBA
DBA技能涉及方面
DBA在整个软件项目中的角色是非常靠后的(当然并非所有都是),尤其是生产DBA,属于整个项目的最后端
这种时候DBA就更像是整个业务系统的最后防线,前端出现的所有问题DBA都需要能够快速定位,否则只有一个情况发生:系统所有发生的故障和无解的问题全部会由悲催的DBA背黑锅【吐槽:别问我怎么知道的,尼玛都有阴影了】
数据库管理不只是数据库自身,还应具备以下基础技能:
操作系统:SQL Server比较单纯只需要基本的Windows Server就好;Oracle DBA要求会稍微多些:Linux(主流Redhat、CentOS、SUSE等)、Solaris、HP-UNIX、AIX、Windows Server等【少跟我扯跨平台能力,让你跑到Windows上你就慢成蜗牛了;跨平台能力只是销售做单的时候忽悠一下就好啦,技术人员不待这么坑同类的啊】
网络:以太网、存储网络、F5、路由、交换、防火墙等【多请网管吃吃饭你会少很多麻烦滴】
存储:不同厂商存储很大不一样【当不同厂商存储遇到其他厂商设备混搭你会很崩溃的】
服务器:PC Server(每个厂商不大一样),小机(每个厂商不大一样,甚至同一大版本不同小版本都不一样【别问我怎么知道的】),刀片服务器
应用开发:基础的几种开发架构在不同业务场景下的不同(主流的普通N层架构、NHB等面向对象开源架构【对于海量数据分析处理这就是个坑还很深】)
脚本能力:Shell、DOS、PowerShell、Perl等等【学这个只是为了少熬几个通宵】
关于优化和管理
DBA永远受到软件、硬件等多方面条件制约,所以如何平衡这些关系就显得很重要了
性能优化:性能调优是双刃剑,总是需要以牺牲其他方面作为代价来解决当前的困局,只要性能能满足业务正常运行即可,没有绝好的性能
管理:只要管理是受控的(自己或Team能够控制)就好,管理得越细致所需要花费的成本是几何倍数增加的。