分类: Oracle
2013-11-29 19:19:11
DBA的工作职责是什么?每天DBA应该做哪些工作?稳定环境中的DBA该如何成长与优化?这是很多人都曾经提出过的问题,下面是我的观点和建议,供参考。
1.实时监控数据库告警日志
作为一个DBA,或者哪怕仅仅是和Oracle数据库打交道的技术人员,你都必须知道告警日志是什么,在何处。
而对于DBA来说,实时的监控数据库的告警日志是必须进行的工作,监控并且应该根据不同的严重级别,发送不同级别的告警信息(通过邮件、短信),这可以帮助我们及时了解数据库的变化与异常,及时响应并介入处理。
2.实时监控数据库的重要统计信息
实施监控对于数据库运行至关重要、要高度关注那些能够表征数据库重要变化的统计信息,并且据此发送告警信息。那么应当监控哪些统计信息呢?大家应当区别条件深入思考,对于单机、RAC环境等各不相同。
3.部署自动的Statspack/AWR报告生成机制
每天检查前日的AWR报告,熟悉数据库的运行状况,做到对于数据库了如指掌。
4.每天至少优化和熟悉一个Top SQL
根据AWR或Statspack报告,每天至少了解或熟悉一个Top SQL,能优化的要提出优化和调整建议。一个DBA应当对稳定系统中的SQL非常熟悉和了解,这样才可能在系统出现性能问题时见微知著,快速地作出判断和响应。
5.部署完善的监控和数据采样系统
DBA应该对数据库部署完善的监控系统,并对重要信息进行采样,能够实时或定期生成数据库重要指标的曲线图,展现数据库的运行趋势。
6.全面深入地了解应用架构
不了解应用的DBA是没有前途的DBA,对应用了解不深入的DBA算不上Expert,所以一定要深入了解应用。
在数据库本身变得更加自动化和简化之后,未来的DBA应该不断走向前端,加深对于应用的了解,从应用角度对数据库及全局进行把握和优化。
7.撰写系统架构、现状、调整备忘录
根据对数据库的研究和了解,不断记录数据库的状况,撰写数据库架构、现状及调整备忘录,不放过任何可能的优化与改进的机会。
DBA最重要的素质有哪些
在招聘DBA的时候,很多朋友经常问起我对于DBA的要求。其实在打算培养一个DBA时,我们的要求并不复杂,甚至很多要求跟技术无关。
对于一个准备进入DBA领域的人,我希望他勤奋、严谨、具有钻研精神及独立思考能力。如果不是要求特别高的职位,其实一般技术往往并不是我们最关心的内容,因为具备了前面的素质之后,经过1~2年的锻炼,一个人绝对不会知道的太少,而我们通过简单的提问就很容易知道一个人是否曾经深入地思考或者研究某些技术问题,在简历上的任何伪装都是不明智的,太多精通的字眼已经使这两个字的可信度大大降低,所以诚实这种品质也非常重要。
也许勤奋,严谨,具有钻研精神及独立思考能力已经被每个人写在了自己的简历之中,可是真正做到的却并不多。我在论坛上亲眼看到很多人从入门到迅速成长为技术专家,而另外很多人却是数年如一日,没有太大的进步,说白了就是缺乏我前面提到的四点,或者没有很好的理解这些简单的道理。
如果一个人真正对某件事情很投入且执著,那么他的进步一定会稳健而迅速,这样的人,在具备了一定的基础之后,通常所有的公司都会给他时间学习成长。技术可以逐步学习,态度和风格却很难改变。
我见到过一些大学生,在大学中已经对Oracle进行了基于兴趣和爱好的长期学习和钻研,这使得他们更容易获得工作机会;而另外一些声称喜欢或具备兴趣的人,往往在大学四年中甚至没有Google一下去更加深入地了解一下Oracle;这其中的差异是显而易见的。
所以我曾经在《Oracle数据库性能优化》一书的序言中写到:
兴趣 + 勤奋 + 坚持 + 方法 ≈ 成功
很遗憾我不能给以上公式画上“=”,但只要具备了以上条件,我想每个人都离成功不远了。
明白了这些道理之后,在工作中应当切忌浮躁,我们每个人从毕业到工作,再到找到适合自己的位置,这通常都要经过一个较长的时期,学习、思考、进步、再次出发,所以要知道,有时候等待是过程的必须。一个人从毕业到成长为具有稳定职业发展观,总需要一个过程,在这个过程中,要保持冷静,拒绝浮躁。
如果你手上已经有了一份工作,那你需要做的是,做好它,哪怕那不是你喜欢的!你必须证明给别人看你有做好一件事情的能力,别人才会给你下一个机会。
总结一下,我想说的是,十年磨一剑,有时候等待是必须的,正视这个历程,珍重这个历程才是正确的态度。
我上面说,十年磨一剑,在这个历程中,你应当一直在琢磨,使自己成长,具备进一步跳跃的素质,如果你喜欢Oracle,那你应当在这个阶段完成积累过程。很多人经常是偶然有一天头脑发热,说我要去搞Oracle,这未尝不可,不过没有积累,你的起步要困难得多。
在具备了一定的积累之后,你需要的其实是机会,机会在哪里?
机会喜欢光顾有准备的人,你做好准备之后,静静地去寻找和等待机会,这是你应该做的。很少有机会会从天而降,降临到毫无准备的人头上,如果你希望获得机会,那机会也会看你准备得如何。
学习是没有止境的,在工作中认真处理遇到的问题,从每一个可能遇到的问题入手,深入再深入,这是对现实的把握。把握好现实才能把握未来。
去除浮躁,认真学习,不断积累,寻找机遇,这是我给很多准备成为DBA的朋友的建议。
DBA职业生涯之误删除篇
前面我提到严谨这一素质对于DBA的重要性,在ITPUB论坛上曾经有过一个热烈的主题:“请列出你在从事DBA生涯中,最难以忘怀的一次误操作”。
这一主题引起了大家普遍的兴趣,很多有趣的案例呈现出来,我摘录了一些和误删除有关的操作,看看都有哪些一时马虎、不够严谨会犯下的过失,大家应引以为戒,共同警醒:
1.在Linux平台上,一次不小心操作,把oradata下所有的东西全删除了。
这样的误操作,教训是极其惨痛的,所以备份对于DBA来说仍然是最重要的。
2.一次误删了个表,最后恢复了,丢了一天的数据。加了一晚上班,至今记得。
人越累的时候就越容易犯错误,我就是在最后快下班的几分钟犯的错误。
一定要记住墨菲定律,越着急就越容易犯错误,DBA千万不要赶着去做一件事。
3.在一次测试过程中,把一个在本机执行的删除所有非系统用户的脚本,错误地粘到一个开发数据库的sqlplus窗口中了。
如果你不注意剪贴板,它就会害你!
4.有一次一不小心把一个表给truncate了,上千万条记录一眨眼就没了。
ddl操作一定要谨慎啊!
5.rm -rf /opt/ora92/* 在测试库中本来想删除数据库,结果错误地把Oracle软件删除了。
rm -rf是相当恐怖的,每个DBA都应该学会不要直接使用这个命令。
6.不小心用rm -rf /home目录下的所有文件,/home目录下放的有账务系统的app。一看到删除的路径的不对时,挽救已经来不及了。
又是一个rm -rf的狠操作。
7. 删除一些trace文件,然后就直接删除rm orcl*,结果通过vpn到生产的网络太慢,命令刚慢慢地显示出来,看都没看直接按回车,结果执行的命令却是rm orcl *,因为orcl和星号中间有个空格,所以把这个目录下面所有的内容全部删除了。
网络慢的确害惨过很多人,所以网络可能存在问题时,任何操作都要慎重,不行可以使用脚本在后台跑。
8.有很多在OEM/Toad中误击键盘删除用户或表空间的情况。
实际上,我们看到,很多误操作都和技术能力基本无关,只是要细致、严谨,再认真一点。DBA有些素质和习惯是必须养成的。
很多时候,只要多思考一些,就可以将工作做得更加完美,就可以严谨地避免很多问题,举一个DBA可能经常面对的工作任务作为例子:
如果在数据库中执行ddl操作,比如:
CREATE INDEX / REBUILD INDEX … ONLINE COMPUTE STATISTICS / GRANT / REVOKE / COMPILE / ANALYZE / DBMS_STATS….
进行严密严谨的思考,这些操作可能带来什么后果?
通常我们都知道,ddl会使解析过的SQL失效、会使存储过程等对象失效发生重编译、也有可能引起SQL执行计划的改变……
这些可能在一个繁忙的业务数据库中带来灾难,如果大量的SQL同时失效,同时重新解析,就可能带来大量的Shared Pool与Library Cache的竞争,SQL解析与竞争又会导致CPU的高消耗,这些在繁忙系统中可能会导致负荷突然升高,严重的甚至会导致系统阶段性地挂起。
已经有很多DBA在这些问题上付出了惨痛代价,而我只提醒大家,做事时要能够明确工作的性质、分析潜在的风险、回避可能引发的问题。
DBA警世录——有些习惯DBA需要养成
既然DBA这个职业如此危险,那么哪些习惯是DBA必须养成的呢?
我总结过几条简单的习惯命令,通过这些习惯性命令,可以减少我们出错的可能。写下这段内容时,刚刚完成一个客户数据库的恢复,客户造成故障的原因很简单,因为维护升级时错误地连接到生产主机,结果导致生产库故障,数据文件被删除并部分覆盖。
1.经常使用hostname命令
在Linux/Unix上,我们使用ssh或telnet等通过多次跳转,很容易变更了连接主机,如果不经过确认就可能在不正确的主机上执行了错误的操作。
通过hostname命令可以确认我们连接到的主机,避免发生不应该的误操作。在执行操作之前一定要通过hostname命令确认连接主机,这是DBA或系统管理员应该养成的习惯:
[oracle@jumper oracle]$ hostname
jumper.hurray.com.cn
2.使用pwd确认路径
经常有朋友在错误的路径下错误地执行了“rm -rf *”等命令,这类错误的发生率居然也是很高的。
所以作为一个DBA,应经常性地执行如下的pwd命令来确认自己的工作路径:
[oracle@jumper oracle]$ pwd
/opt/oracle
3.确认instance_name等数据库重要信息
在执行truncate/drop等操作之前,应该确认连接到了哪个数据库,从V$DATABASE或V$INSTANCE等视图中可以获得这些信息(可能需要授权):
SQL> select instance_name,host_name from v$instance;
INSTANCE_NAME HOST_NAME
------------------------ ----------------------------------------------------------------
eygle jumper.eygle.com
4.通过id命令确认用户信息
要经常通过id命令确认用户信息,以免切换用户而导致不自觉的异常操作:
[gqgai@jumper gqgai]$ id
uid=2003(gqgai) gid=101(dba) groups=101(dba)
我见到过有的案例,用户切换为root,误操作删除过大量系统文件,导致了严重的故障。
5.对ddl语句心存敬畏
DBA应该知道truncate / drop 等ddl操作可能带来的影响,所以应该对这些ddl操作心存敬畏,甚至应该避免执行或避免草率执行这样的操作,最好养成在ddl清除数据之前备份的习惯。
通过一些良好习惯的养成,可以使得我们少犯错误。
学会总结,学会从别人的教训中积累经验,这对DBA来说必不可少!
本文节选自《》第1章“Eygle的DBA工作手记”(作者:)