DBA和开发同事的一些代沟(一)

DBA同学在工作中不可避免和开发同学打交道,和开发的同学在交流中还是有不少的小插曲,有些想想也蛮有意思,但是有些是痛点。
我举几个例子来说明,可能比较片面,但是只是为了说明问题,达到交流的目的即可。
###oracle知识和sql水平不足
    ddl中的commit
我相信很多DBA都会看到这样的sql脚本。
    create table test(id number,name varchar2(30));
    commit;
    其实这个就是对于ddl的理解有偏差,ddl压根就不需要这样的commit

   弄巧成拙的exists
    之前碰到一个开发同事写的sql大体是下面的样子
    select *from test where id in (xxxx) and exists(select *from big_table )
    可以看出他还是认为exists要好一些,但是实际上用的时候没用好。

    让人匪夷所思的数据库
    经常开发同事会给我提出要求,我们需要创建几个数据库,我一听想这个请求还是蛮大的,需要考虑存储,网络,服务器等等,然后弄明白之后,其实他说的就是创建几个数据库用户。如果是MySQL这么说还算对,我听到的都是Oracle的,难道都是故意刺激我。我每次提醒他们,那是数据库用户,他们会不以为然的说,恩,就是你说的那么个东西,好吧。

    不合理的表关联
    这种案例也听过不少碰到过不少,我见到比较多的还是十多个表做关联,不过性能还算能过得去,最近听到一个同事碰到一个sql里面的表关联有40多个,而且还是用MySQL,我听了这种复杂度,简直要绝望。

    高水位线的问题
    之前碰到一个案例,有一天突然数据库归档量急剧增多。最后一番调查之后发现,开发同学使用了delete from test这种操作,这个test表数据量非常大。
下面是我和开发同事的对话
开发同事 [19:27]:
delete全表都要下工单是吧
我们最近在整理几个数据库的数据
杨建荣 [19:28]:
不能做这种操作,如果需要清理数据,开工单给DBA,让DBA来做。
开发同事 [19:28]:
好的
杨建荣 [19:28]:
你这样清理,表里高水位线,会越来越高,影响比较大。
开发同事[19:29]:
恩   
杨建荣 [19:32]:
刚刚一个小时,日志切了900多次,正常应该是2~5次
开发同事[19:32]:
并不懂  +o(
杨建荣 [19:33]:
就是影响比较大的意思,就跟开发的日志量突然多了500倍的感觉一样;)
最后我又给他解释了一会,他似乎明白了,但是最后的收效就是delete全表会有很大的影响。

####对索引的过度喜好
发现有的开发同事对于索引还是很依赖,恨不得每个字段都建一个索引。
比如下面形式的语句
            create table(id1,id2,id3);
            create index  on (id1);
            create index on (id2);
            create index on (id3);
如果查询条件满足的情况下,其实可以做个复合索引的。索引太多,对于dml影响不小,而且很多时候执行计划效率也高不了。
    大表加个字段
    如果给大表加个字段,对于DBA来说就是一个很头疼的事情,尤其是大表,分区表,数据量非常大的情况下,那就非常耗费时间和精力,应用那么又要保证停机时间,所以还是一件挺纠结的事情。我们在exadata上也看到过,大表加个default值的字段,实在是再没法快了。
    可能从开发角度来说就是简单的一个sql语句,不能那么想啊。
    开发同学的潜台词   
    开发同学可能需要表达的是事情A,可能我们需要做事情A,B,C,D, 这个时候需要了解开发同学的潜台词
比如下面这个对话,开发同事让我来赋予表访问的select权限,很简单的操作,马上做好了。
开发同事15:30:
这个用户也没有那些表的那些权限啊
杨建荣15:31
权限有的
开发同事15:31
刚才确实查不到表
现在好了
。。
杨建荣15:31
听你一解释,我明白了,你是说还没有同义词啊。
刚建了同义词
开发同事15:32
哦哦
现在好了

最后一琢磨,开发同事的要求是能够访问到表,现网环境中存在owner用户,连接用户,owner用户存放真正的数据,连接用户是通过同义词来访问,对开发来说就需要直接访问即可。
所以他们所说的开通权限,DBA需要做的就是开通访问权限,然后创建同义词。然后开通响应的防火墙和端口。。。。
###“未知问题”
    调试一个存储过程
    最近有个开发同事来找我,让我帮她调试一个存储过程,我问她是我负责的环境吗,她说不知道,那给我环境我在本地试一下,她说具体环境也记不得了,目前在已经配置好的环境里面运行存储过程有问题,好吧,我一看存储过程,好几百行,先耐着性子问了问最近有什么变化。
最后还是试着帮他调试了一下,发现原来报错是NO DATA FOUND这种错误。
最后我给她写了一个简单的模拟pl/sql来说明问题,她才终于明白问题,要不还在和我纠结到底是写varchar还是varchar2

 set
serveroutput on
 declare
 a varchar2(10);
 begin
 select '' into a from dual where rownum<1;
 dbms_output.put_line(a);
 end;
 /

这个pl/sql块中select *from dual where rownum<1肯定是没有结果的,所以错误的原因其实就在于存储过程中的这种类似查询没有数据导致的。

    乱码导致的sql问题
有下面这么一段聊天内容,是关于部署一个存储过程的。是一个重要的数据环境。
杨建荣 [16:20]:
这个存储过程你测试了吗?
开发同事[16:21]:
我内网测试了
可以修改成功么?
杨建荣 [16:21]:
有报警
警告
开发同事 [16:24]:
修改不了?
我内网没有报警呢
开发同事 [16:29]:
没问题啊
内网
是不是弄错了
我刚还测试了呢
一样的
开发同事 [16:41]:
删完了编译不成功
应该没问题的
杨建荣 [17:01]:
好的。最后用iconv搞定了。有个别注释的字符集兼容问题
这个问题说来惭愧,也是这么字符集没有考虑好,结果运行的时候抛出了警告,结果找开发,开发说测试过了,但是部署就是有问题,开发说我就改了一行两行的内容,就这么想来想去,最后才发现是字符集的兼容,其实开发和DBA有很多时候都有这种不明确问题的纠结。

后续继续补充

时间: 2024-11-14 12:42:26

DBA和开发同事的一些代沟(一)的相关文章

DBA和开发同事的一些代沟(四)

DBA和开发都是两个可爱的团队,如果合作起来,那战斗力可是杠杠的.如果合作不愉快,那就是一件简单至极的事情都能扯皮几天几夜,而且还解决不了. 今天出公司的时候碰见一个开发同事,因为最近和开发同事打交道太多了,我都分不清到底他到底是哪个team的,然后就迷迷糊糊搭上了话,然后简单问了几句话,发现我潜意识里认错人了.不过最近碰到的有些开发同事都还比较配合.值得赞扬,但是还是有一些代沟的.案例1: 偶尔会接到开发同事的紧急求助 开发同事 [10:46]: 建荣  10月20号xxxx给你下过工单开通数

DBA和开发同事的一些代沟(五)

陆陆续续写了四篇和开发同事的代沟,从最开始的吐槽到后面的例行总结,整个过程也是总结经验,看似很小的问题对于DBA来说就是莫大的改进,或者在开发严重越不过去的坎儿在DBA来看就是修改一个简单的配置就可以搞定,这个过程中都是互帮互助,大家互相体谅,才是共赢.   最近顺手帮开发同事解决了几个小问题,也可以暴露出来一些问题.简单总结一下.数据库连接的问题   首先是数据库连接的问题,这两天四个同事遇到了同样的问题,但是问题原因也是五花八门.   ORA-12514连接数据库的问题 12514, 000

DBA和开发同事的代沟(二)

在上一篇中写到了 DBA和开发同事的一些代沟(一) 可以参考 http://blog.itpub.net/23718752/viewspace-1837743/ 有些朋友给我反馈了他们遇到的小故事,我后续再整理整理,看看有多少. 我还是继续来分享我这边碰到的一些小插曲,这些除非你确实碰到,想遍出来还着实需要想象力.##和开发的博弈 在Oracle中有资源管理的概念,其中一个功能就是设置每个用户可以使用的session数,即sessions_per_user,这个设置通过profile来完成. 一

【DBA及开发必备】全解ORA-1555快照太旧错误原理及解决方案

不论你的工作是管理Oracle数据库,还是开发.维护Oracle上的应用程序,通常来讲你都遇到过ORA-01555:snapshot too old这样的错误.本文为你详解错误产生的原因以及最佳解决方案.  ORA-01555产生的过程   我们先来看看ORA-01555是怎样产生的: 错误记录在哪?   通常,这个错误可能会在以下文件中出现: 1 Alert 告警日志文件  报错信息类似: ORA-01555: snapshot too old: rollback segment number

[转载]DBA的特质第二部分:性格

本文转自http://www.searchdatabase.com.cn/showcontent_84382.htm 支持原创.尊重原创,分享知识!   在本系列文章中,笔者将谈一谈数据库管理员(DBA)所应该具备的一些特质.在上一篇文章中,我介绍了一名DBA应有的技术特质.在本文中,我会将介绍让一个人成为优秀DBA的宝贵性格特质.   性格特质 什么是性格特质?它是指一个人所拥有的与众不同的品质或特征.性格特质更多是关于DBA在工作中表现出来的激情.行为方式.态度和情感.一名好的DBA会综合利

搜狐畅游高级DBA:Data Guard运维中的实战经验和技巧

本次分享由以下几个部分组成: Data Guard的灾备介绍 备库的设计方案考虑 备库敏感的几个数据文件类操作 对Switchover和Failover的建议 SQL审核之Snapshot Standby Data Guard搭建/重建的小技巧   写在前面 之前有一个朋友很有深意的问我Data Guard和RAC哪个更重要,前提是在高可用和容灾两者之间来选择,只能选其一,我是毫不犹豫选择Data Guard,毕竟这是数据安全的基本防线,我想Data Guard的命名(中文翻译为数据卫士)也是这

DBA不失业:云时代的数据库性能优化全攻略

性能问题是数据库中最重要也是最迫切要解决的问题之一,随着业务的发展和数据的不断加增,用户对于系统的响应速度的要求越来越高.而归根结底就是要提高数据库系统的性能.对于大部分的DBA来说,性能优化并不是一件容易的事情,造成性能问题的原因多种多样,在现实中,优化过程也会受到重重阻碍,随着云时代的到来以及自动化智能化运维的发展,那么云时代的DBA该如何优化数据库的性能呢? 在今年的数据技术嘉年华上,我们邀请了来自国内外各大企业的性能优化专家,从不同的角度分析云时代数据库性能优化的技术与技巧. 重点嘉宾与

FAQ系列 | MySQL DBA修炼秘籍

0.导读 本文主要写给那些立志成为MySQL DBA,以及正在学习MySQL的同行们,结合个人及业内其他同行的职业发展经历给大家一些参考,如何成为合格的MySQL DBA. 1.什么是MySQL DBA 首先,DBA是database administrator(数据库管理员)的简称,在一些招聘网站上,也可能会把职位写成数据库[管理]工程师,MySQL DBA是目前互联网企业中最为炙手可热的岗位需求之一,前(钱)景大好,快到碗里来吧. 下面是拉勾网的MySQL DBA招聘需求(若无"MySQL中

和开发讨论的一个数据变更需求

    最近在评估一个开发同事的需求时,发现随着需求的变化,DBA相关的评估工作也会随之变化,同时反射到开发同事那边,通过这个案例也可以看到很多的需求变化,可以从中看出很多的不足和改进之处.     首先开发提出的一个数据需求,删除数据库中的几张表数据,然后把剩下的数据都备份,把备份集拷贝到一个异机环境.其实这个需求在之前也很他们沟通过,这是他们业务迁移的一个步骤,同时做一些业务梳理,DB这边需要配合做一些数据的清理的工作.     这种工作其实对我来说是一件好事,如果有一天我发现我在维护一个T