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

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

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

之前一个开发同事帮我解决了一个安卓软件的问题,当时他随口一问知道我是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.28
07:18:10.548]org.springframework.jdbc.CannotGetJdbcConnectionException: Could
not get JDBC Connection; nested exception is
com.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 regdate
between to_date('2014-12-01','YYYY-mm-dd') and
to_date('2014-12-31','YYYY-mm-dd');  ;

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

时间: 2024-09-23 22:33:43

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

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

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

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

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

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

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

可配置语法分析器开发纪事(三点五) 生成下推自动机的具体步骤

刚刚发了上一篇文章之后就发现状态机画错了.虽然LiveWriter有打开博客并修改文章的功能,不过为了让我留下一个教训,我还是决定发一篇勘误.这个教训就是,作分析的时候不要随便"跳步",该一步一步来就一步一步来.其实人呢,就是很容易忘掉以前的教训的了.第一个告诉我不能这么干的人其实是小学三年级的数学老师.当时我因为懒得写字,所以计算应用题的时候省了几步,被批评了. 故事就从状态机开始.文法我就不重复了,见上一篇文章.现在我们从状态机开始.第一个状态机是直接从文法变过来的: 开发纪事(三

安卓UI设计与开发教程 顶部标题栏(五)两种方式实现仿微信标题栏弹窗效果

博主在这篇文章中将会继续围绕顶部标题栏专题来进行实例讲解,今天要讲解的主题是分别使用 PopupWindow和Activity两种不同的方式来实现仿微信顶部标题栏弹窗的这样一个效果. 一.实现效果 图 这里为了演示方便,我将两种方法放在一个应用程序中演示,这个是主界面 开发教程 顶部标题栏(五)两种方式实现仿微信标题栏弹窗效果-js修改微信顶部标题栏"> 虽 然两种实现的方式不一样,但是最终的效果图都是差不多的

基于.net开发chrome核心浏览器【五】

原文:基于.net开发chrome核心浏览器[五] 一:本篇将解决的问题 本章主要为了解决一下几个问题: 1.JsDialog的按钮错位的问题 我们开发出的浏览器,在有些操系统上调用alert,confirm之类的对话框时,确定和取消按钮会出现错位的情况 2.右键菜单问题 我们开发的浏览器,在网页上点右键,会出现一些讨厌的英文菜单. 3.打印的问题 我们开发的浏览器,网页在调用window.print的时候,没有任何反应. 4.打开chrome的调试器 谷歌浏览器调试网页的调试器非常好用,我们开

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

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

magento 开发 -- 深入理解Magento第五章 – Magento资源配置

  第五章 – Magento资源配置 对于任何一个更新频繁的项目来说,保持开发环境和生产环境的数据库同步是件很头疼的事情.Magento提供了一套系统,用版本化的资源迁移脚本来解决这个问题. 上一章,我们为 Helloworld Blogpost 创建了一个模型.我们直接通过SQL语句"CREATE TABLE"来创建数据表.在这一章,我们将为Helloworld模块创建一个资源配置(Setup Resource)用于创建数据表.我们也会创建一个模块升级脚本,用来升级已经安装的模块.

网站开发前需要切记的五个方面

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 本文介绍如何增加你成功创建一个优秀新网站的机会,请记得是指网站开发前需要做的事情,而不是指上线前要考虑的问题.本文概述了五个最重要的方面,既关键字定位,网站创新,赢利模式及网站的后续发展. 一.关键词分析定位.这关系到你将要开发网站内容的定位.我们应该做自己熟悉的行业,这可能会离成功更近一点.也会因为你的熟悉,拥了有非常重要的第一手原创数据,