专栏首页杨建荣的学习笔记DBA和开发同事的一些代沟(五) (r7笔记第92天)

DBA和开发同事的一些代沟(五) (r7笔记第92天)

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

12514, 00000,"TNS:listener does not currently know of service requested in connectdescriptor"

之前一个开发同事帮我解决了一个安卓软件的问题,当时他随口一问知道我是DBA,就简单在lync上打了个招呼,说以后有数据库问题可以找我。最近还真碰到数据库问题了,这种帮忙当然是义不容辞,他反馈的问题是连接数据库的时候报错ORA-12514,是windows中使用plsqdev去连接本地的一 个数据库,看这个错误感觉就是网络配置的问题。 xxxx[9:59]: ORA-12514 监听程序当前无法人别连接描述中的请求的服务 还是解析不了监听 然后他带着电脑过来了,我简单看了下,监听也启动了,按照他所说,数据库服务也配置了,他使用了netmgr和netca中的图形配置,看起来这个问题是 不是windows上的某些奇怪的问题,按照他所说,这些配置都完成了,但是数据库就是连接不了,我使用cmd进入命令行,如果是linux可以直接运行 一个ps -ef|grep smon来看看数据库的一些简单配置,但是windows下查看还是不够直接,怎么看呢,我直接在cmd里运行services.msc进行服务列表,查 看启动的oracle服务看看实例到底是哪一个,结果找了一圈,没找到,最后反复确认,发现原来这个同事没有使用dbca创建数据库实例,当然我给他简单 解释了一下,然后直接进入dbca界面帮他创建,看着sysdba可以正常连接到实例,这个问题的解决就告一段落了。通过这个可以反映出开发人员对于数据 库实例的概念还是不够清晰。 ORA-12154的问题

12154, 00000,"TNS:could not resolve the connect identifier specified"

这是另外一个开发同事反馈的,也是在lync上他找到我说,数据库现在连接有个问题,想让我帮忙看看。当然这个环境不是本地的,而且要访问他们的环境非常困 难,所以可以使用远程桌面来做。最开始的猜测是网络的端口的问题,因为对于应用来说,开放的端口都是指定的。他在本地给我简单复现了这个问题,我说直接看 tnsnames.ora的配置。 然后查找了一番,找到了这个配置

ORCL_TESTDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = xxxx.67(PORT = 1523))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = testdb)
    )
  )

这个时候一眼就看出了问题,这是配置的问题,这个同事折腾了好半天,这个Host的配置没有正常结尾,所以补全之后问题就解决了。当然解释了一通,最终说键值对他马上就理解了。 第二个ORA-12154的问题 然后在下午的时候,另外一个开发同事找到我说,有一个数据库配置比较奇怪,怎么都弄不好,还说感觉里面的一个数据库配置会影响到另外一个,一直也没找到解决方法。让我帮忙看看。 当然这个问题也是在内网环境,也是远程协助,看到她复现了一遍问题,发现是tnsnames.ora里面的一个配置多了一项配置。 比如test的配置信息如下:

test=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =xxxxxx)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =test)))

她那边的配置信息为:

test=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xxxxxx)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = test)(sd=e)))

这与最后的sd=e是怎么来的,她也记不清了,我可以猜出来以前应该是sid=test可能最后不知道怎么修改成了现在的模样了。当然这个问题看起来非常简单,但是能够折射出对于数据库层面的一些知识,开发还是不够了解。 最后一个是jdbc连接数据库的问题。开发有个同事反馈说有一个备库连接的时候报了错误。然后提供了以下的错误信息,而且还诚意满满附了日志,我打开日志的瞬间就后悔了,因为这个日志好几十M,其实这个问题确定ip就可以基本判定问题。

[2016.01.2807:18:10.548]org.springframework.jdbc.CannotGetJdbcConnectionException: Couldnot get JDBC Connection; nested exception iscom.atomikos.jdbc.AtomikosSQLException: Failed to grow the connection pool

当然后面确认了IP,发现这个问题的原因在于这个是10gR2的环境,备库是在mount状态,平时有一些大查询需要在凌晨开放给一些应用,但是这个备库 最近重新做了系统,所以原有的crontab 没有正式运行,也就意味着凌晨的查询窗口没有开启,所以这个问题简单确认了一下就明白了问题的原委,当然后续我也提出了一些更多的建议。 说完数据库的连接问题,再来看两个小案例,这个其实也可以和开发的同学好好聊聊。 我收到了一个开发同事的工单,说需要给一个表增加一个列,看起来需求很简单也很明确,而且给出了完整的语句和环境。看起来剩下的就是DBA来执行了。语句类型下面的形式

alter table user_details add (user_time date);

这个需求看起来还是比较简单的,但是我已查看表user_details的情况,里面有近10亿的数据,这样一个大表而且还没有分区的情况下做一个字段的添加,影响还是非常大的。在exadata上做了一个类似的测试发现这种场景都很让人头痛。所以我们的建议是最好不要加。如果一定要加,需要申请维护时间来做。在线操作就是给自己找虐。当然和开发沟通之后他们内部也做了调整。 然后还有一个问题是一个查询需求,开发提供了一个语句,让我们帮忙查看一下一个统计表中的数据分布情况。 提供的语句类似下面的形式。

select count(*) from TESTSTAT.user_details_info where trunc(regdate,'dd')>=to_date('2014-12-01','yyyy-MM-dd')and trunc(regdate,'dd')<=to_date('2014-12-31','yyyy-MM-dd');

这样一个查询,表里的数据是非常大的,而且分析表的情况,发现regdate有一个索引字段,但是根据这个查询似乎性能也好不到哪里去。 所以这个语句可以简单调整一番,变成下面的形式。语句的性能就会好很多。

select count(*) from TESTSTAT.user_details_info where regdatebetween to_date('2014-12-01','YYYY-mm-dd') andto_date('2014-12-31','YYYY-mm-dd');  ;

当然这个部分其实还是可以和开发沟通一下,这些看似非常值得注意的小细节如果在开发中引起重视,那么后期的sql问题也会大大减少。

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes),作者:杨建荣

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-01-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL连接数溢出的问题处理

    今天中午的时候,突然收到几条报警邮件,提示数据库的域名服务时断时连,感觉到不大对劲,赶紧连接到线上环境确认,发现数据库的连接池已经满了,已经登录不进去了,报错t...

    jeanron100
  • 从问题的处理方式感悟学习方法 (r4笔记第39天)

    有时候当你碰到一些问题一筹莫展的时候,如果能够看到某个帖子的问题和你碰到的刚好一致,那种欣喜的感觉真是难以形容。 但是有些问题尽管发生的错误一致,处理的方式却不...

    jeanron100
  • 记一次远程协助的排错案例(r9笔记第62天)

    前几天的时候帮助一个网友看了他遇到的一个问题,在问题处理中也让我有不少的感悟。 最开始的时候这位网友的问题是一个10gR2的单实例数据库,监听无法正常关闭和启动...

    jeanron100
  • MySQL基础入门——MySQL与R语言、Python交互

    MySQL作为z最为流行的关系型数据库管理平台之一,与绝大多数数据分析工具或者编程语言都有接口,今天这一篇分享如何将MySQL与R语言、Python进行连接。 ...

    数据小磨坊
  • 数据库流行度6月排行榜:Oracle飙升MySQL止跌回升

    六一儿童节,虽然是大家快乐的假期,但是也宣告了2018年进入中场。在DB-Engines的6月排行榜上,不同的数据库产品竞争也进入中场。先预祝大家中场收获满满!...

    数据和云
  • 聊聊flink的JobManagerGateway

    flink-1.7.2/flink-runtime/src/main/java/org/apache/flink/runtime/webmonitor/Rest...

    codecraft
  • 数据告诉你,百万年薪如何炼成

    大数据文摘
  • Clover:解决Java8和Cobertura的问题以及解决方法

    有一个项目的小伙伴反馈我们一直在使用的智能测试框架EvoSuite哑火了,我也感到莫名其妙。为什么呢,因为我们已经在内部很多项目在使用这个框架了,为什么这个框架...

    Criss@陈磊
  • 安装hue-3.11.0

    1) 配置HDFS HttpFS和WebHDFS 如果HDFS是HA方式部署的,则只能使用HttpFS,而不能用WebHDFS。 2) 安装依赖: ...

    一见

扫码关注云+社区

领取腾讯云代金券