技术开发 频道

小品:大梦初醒-DBA从菜鸟到专家之路

  【IT168 现场报道】2013年4月18-20日,第四届中国数据库技术大会(DTCC 2013)在北京福朋喜来登酒店拉开序幕。在为期三天的会议中,大会将围绕大数据应用、数据架构、数据管理(数据治理)、传统数据库软件等技术领域展开深入探讨,并将邀请一批国内顶尖的技术专家来进行分享。本届大会将在保留数据库软件应用实践这一传统主题的基础上,向大数据、数据结构、数据治理与分析、商业智能等领域进行拓展,以满足于广大从业人士和行业用户的迫切需要。

  自2010年以来,国内领先的IT专业网站IT168联合旗下ITPUB、ChinaUnix技术社区已经连续举办了三届数据库技术大会,每届大会超过千人规模,云集了国内技术水平最高的数据架构师、DBA、数据库开发工程师、研发总监、IT经理等,是目前国内最受欢迎的数据库技术盛会。

DTCC:郭竞远讲ExaData高效备份之道

  ▲2013 DTCC现场报道

  在2013年中国数据库技术大会(DTCC)第三天下午进行的专场九围绕“DBA职业与团队发展”展开,本场首先登场的是有恩墨学院四位ORACLE ACE同时也是ITPUB的版主(侯圣文、张乐奕、杨廷琨、李轶男)四位大师带来的小品<<大梦初醒 DBA的成长之路 - 从菜鸟到专家>> 。接下来就让我们来欣赏一下他们的精彩表演。

  2013 DTCC恩墨ACE小品

  —— 非空字段空值的影响

  Y = YTK(杨廷琨) K = Kamus(张乐奕)

  L = 600 (李轶男) H = secooler(侯圣文)

  (代码部分现场需要由600负责演示)

小品:大梦初醒-DBA从菜鸟到专家之路

  Y:喂,张工?我们的数据库出错了,派个人来看一下!

  K:错误信息是什么?trace文件给我。我要操作系统trace,crs trace,database trace,还有….

  Y:ORA-01400。

  K(检查ORA-1400错误信息,将ORA-1400错误在屏幕上展示):哦,原来是一个无法插入空值的错误。什么版本数据库?

  Y:最新版本11.2.0.3,

  K:什么操作系统?

  Y:Linux

  K:trace文件有没有。我要操作系统trace,crs trace,database trace,还有….

  Y:你以为你是Metalink啊。少废话,赶紧派人过来。

  K:ORA-1400错误是尝试将空值插入到具有非空约束的列中,因此报错。这肯定是你们的数据有问题,你们检查一下插入的数据是否合理。

  Y:废话!我们什么都自己解决,要你们干什么!马上给我派个人过来!

  K:(自言自语)这么简单的问题,派个新人锻炼一下。

  K对L:客户有个插入空值的问题,so easy,你去解决一下。

  L:老大,我自己去不行吧, 我才搞Oracle几天啊,要不你陪我走一趟。我一个人怕怕~~

  K:滚,自己去,我还有更怕怕的事儿要处理呢。

  L:听说您这边的数据库出现了错误,我们经理让我来解决问题

小品:大梦初醒-DBA从菜鸟到专家之路

  Y:错误就在那里,你自己看看吧。

  L(检查错误信息,自言自语):这不是应用程序报错,而是复制软件在同步数据的时候报错了ORA-01400:无法插入空值?查看了表结构 desc

  L:表结构的字段上有非空约束,说明表的字段上不能插入空值。但是现在要插入的数据包括空值,因此把空值插入到不允许插入空值的非空约束字段中报错。

  Y:你别和我说绕口令!

  L:简单滴说,错误原因是数据本身出了问题,修改应用程序就可以了。

  Y:我们用的是数据同步工具,这个工具怎么改?

  L:那可以把字段的非空约束去掉,这样空值就可以插入进去了。

  Y:不行,我们的业务逻辑就是不能存在空值,这个约束必须存在。

  L:那您等一下,我问一下我们经理。转向Kamus说:老大,这里报错的是数据同步的软件,不是客户自己程序,没有办法修改,而且客户也不许调整现有的表结构,咋办?

  K:同步软件报错,那么就说明错误的数据是从源库同步过来的了,你看一下肯定是源数据库上相同的字段没有NOT NULL约束,因此源库正常的数据在目标库就无法插入。

  L:哦,原来是这样,那我看一下。(连接另一个数据库,DEST表结构)

  老大,源库这个表上也有NOT NULL的约束啊。

  K:你知道回字的写法有四种吗?

  L:啊?

小品:大梦初醒-DBA从菜鸟到专家之路

  Y:你们到底行不行啊,要是不行。我们请恩墨学院的侯院长来诊断一下•••。

  L:那我把我们经理也叫来。老大,客户一定要解释,要不你也过来吧。

  H:(讲解之前600查询的结果疑问)

  K:OK,问题有答案了

  Y:但是我的问题还没有答案。

  H:继续分析导致问题的根本原因,11g的新特性。

小品:大梦初醒-DBA从菜鸟到专家之路

  H:其实这里面还是有学问的。Oracle采用当前的方法,就把变量解析的工作放到了INSERT执行过程中,而每次执行都要解析的代价肯定要远远超过一次解析的代价。

  L:既然有这些代价,为什么Oracle对于DEFAULT值还要这样实现呢?

  H:答案是Oracle为了解决SYSDATE的DEFAULT值的问题。

  Oracle之所以要如此处理,应该是要解决SYSDATE这个特殊默认值的问题。因为如果DEFAULT值在ALTER TABLE的时候就进行解析,那么SYSDATE就会被固化为ALTER TABLE语句的执行时间,而只有在插入的时候解析,才能将SYSDATE转换为插入语句的当前时间。

  L:好的,我知道了,谢谢侯老师。

  最后恩墨ACE团队表示学习Oralce的方法:勇于提问,大胆设想,深入专研。欢迎大家关注本次数据库技术大会,希望大家有所收获,同时下次大会期待您的参与。

0
相关文章