图灵访谈之四十三:专访Oracle副总裁Tom Kyte

Thomas Kyte是Oracle公司核心技术集团的副总裁,从Oracle7.0.9版本开始就一直任职于Oracle公司,不过,其实他从5.1.5c版本就开始使用Oracle了。在进入Oracle公司之前,Kyte是一名系统集成人员,主要为美国军方和政府部门的客户构建大规模、异构数据库。Thomas Kyte就是主持Oracle Magazine Ask Tom专栏和Oracle公司同名在线论坛的那个Tom,他通过这一方式热心地回答困扰着Oracle开发人员和DBA的各种问题。

你认为Oracle 12c中最令人兴奋的特性是什么呢?

正如我刚才在演讲中所说的(下载slides),以下12个特性是我认为大多数人都会感兴趣的。

  1. 更强大的SQL内嵌PL/SQL
  2. 改进的缺省值
  3. 增加了 VARCHAR2, NVARCHAR2, RAW数据类型的大小限制
  4. 简单的 Top-N和分页查询
  5. 行模式匹配
  6. 分区功能提升
  7. 自适应执行计划
  8. 增强的统计信息
  9. 临时UNDO
  10. 数据优化
  11. 应用连续性
  12. 可插拔数据库

它们中的有一些是一些很小的特性,比如说第一个,更强大的SQL内嵌PL/SQL,这个东西很简单,但是可以在数据库里构建成巨大的架构上的改变。有一些人可能会觉得有一些特性很无聊,因为和他们没有很强的关系。所以,我这里提到的12个特性应该是大多数人都会感兴趣的。但是还另外有488个其他特性,我没有时间来一一讲解。12c是一次很大的改进,会有很多改变,也会有很多新的功能。我们在优化器上下了很大功夫。

你的博客上说新书《深入数据库体系结构(第3版)》会在今年出版,什么时间?新书和《深入数据库体系结构(第2版)》相比会有哪些不同?

那要看什么时候Oracle的新版本可以完成,新版本发布之后之后需要6-9个月来完成这本书。Oracle的12c版本大概会在今年6月发布。所以我觉得可能是今年12月到明年的4月份我有可能会出下一版的书。

这本书会填补11g和12c之间的空白,有很多东西都变了,从存储、数据库工作方式上,第二版包含了所有11g以前的数据库,第三版将保留了第二版中的内容,并加入新的特性。

有很多人会为数据库迁移的问题困扰,不同平台间的数据迁移,你的建议是什么呢?是用RMAN还是用Oracle Data Pump?

如果说我要把一个Oracle数据库从windows迁移到linux的话,我很可能会用RMAN来做一个整数据库运输(full database transport),因为我不需要再建索引,表格,就可以完成整个数据库的迁移。但前提是我是从Windows 的x86架构迁移到Linux 的x86架构。但是如果我想把Linux x86迁移到Solaris的话我就不能用整数据库运输,因为他们的片结构不同,存储盘的顺序不同。如果这样做的话,改动就太多了,需要很多人力才能够完成。

这时候就可能要用Data Pump,或者一种叫做GoldenGate Replication的工具。如果我可以选择宕机一阵子的话,这时候如果数据是PB或者TB级的,我可能会用Data Pump来减少负载,把数据库的信息复制下来到另外一个上。如果我必须要做到在运行状态下解决问题的话,我就会用GoldenGate从intel Linux上复制到Solaris,把这两个系统同步上,当他们非常接近时,就可以关掉那台Linux机器,等到最后的数据也收到了,我就可以按照常规的做法来处理新系统上的数据了。如果我要更改硬件架构,或者字节顺序不同的话,我也会用Data Pump或者GoldenGate,这要根据要求是线上操作还是线下操作来决定了。如果硬件、架构、字节顺序都维持不变,而我可以有一段短暂的宕机时间,我就会用RMAN Backup and Restore来完成整系统运输。

在你的书中你提到过开发者和DBA的职责有所不同,你也简要的提到他们的个性也不尽相同,你认为哪里最不同?

我不知道是不是个性的原因,但是我知道在很多环境下,开发者和DBA之间,就像是一个无形的墙一样。DBA感觉自己好像在保护整个数据库,甚至可能是保护数据库不受开发者的侵扰。而开发者会把DBA当作一个障碍,他们不把DBA看作帮助自己的人,他们不想和DBA一起解决问题,而是把DBA当作一个问题。并不是说他们的个性不同,而是他们看问题的角度不同。开发者眼里只有自己写的应用,而DBA只想如何管理公司的数据。一个应用对DBA来说可能无足轻重,因为一个公司可能有上千个应用。而对于开发者来说,最重要的就是自己的那个应用。所以从某些角度来说,DBA的视野更宽广,而开发者的视线更集中,这就会产生矛盾。有时候开发者会觉得DBA不想帮他们,也不想教他们。而更多的时候,开发者根本就不想学,他们觉得数据库什么的不是他们应该学的。他们都有自己的工作环境,比如C#,或者VB,而SQL/PL SQL和他们一点关系都没有。这就是障碍。如果开发者意识到,掌握一些知识会帮助他们构建出更好的数据库应用,而DBA意识到,了解更多的开发者会更好地围绕数据库来做这些应用,那么我们最后的应用就会更好。

从性能上来讲,大家都在抱怨性能问题,应用永远都太慢了。没有人会说,这个应用跑得太快了,快让它慢点吧。如果你想让你的应用快10%,从1一分钟降到54秒,去和你的DBA谈谈,他们能做到。他们把表格整理一下,重写一下索引就可以。如果我们想让应用快10倍的话,从1分钟到6秒,那就只有开发者可以做到了。他们是唯一可以在数量级上改变这件事的人,他们通过改变获取数据的方法,或者重新设计他们的架构来完成,而DBA无法完成这些。所以很多人认为DBA是性能调优专家,而开发者们不具备这方面的知识,其实这两个角色之间需要一个持续的知识传递,从彼此身上学习。

20年前是什么让你选择了Oracle,当时它还不是这么大的公司吧?

20年前的Oracle和今天相比,是一家非常小的公司。我当时为另外一家公司工作,是一家外包公司,为美国军方构建系统,我当时打算离职,去另外一家公司。但是有一个Oracle的人和我说,你为什么不来我们公司呢?我的第一反应是,那可真是太酷了!我可连想都没有想过。当时这个软件还很新,Oracle只是一家成长很快的小公司。关系型数据库也是个新概念,尤其是从开放系统上看,如果你想构建一个数据库,你不一定会选择关系型数据库,还有其他很多可选项。所以这样崭新的令人兴奋的概念和这家公司一样,就像现在创业公司一样,这是我能找到最贴近的词了。现在公司大概有10万人了,我很高兴能看着公司一点点的成长起来。当时看来这可真是一个令人兴奋的机会。所以我从一个销售咨询起步,一点一点地工作到现在。

你现在在Oracle的职责是什么?

在Oracle的前14年,我都在一个销售咨询组里面工作。我的工作需要时时接触到顾客,他们要么刚买了产品,要么就是正打算买我们的产品。我的工作就是告诉他们,数据库怎么工作,怎么能最大程度上的利用它,告诉他们性能基准是什么。如果他们在初始取向上有问题,我就去和他们一起解决问题。最近7年,我都在一个叫做“服务器技术”的组里,主要做项目管理工作。

我现在写的代码不多了,但是我每一天都在使用数据库,因为我在Ask Tom上面回答问题,而我是唯一负责回答问题的。所以他们一有问题就来找我,而我也一直都是数据库的使用者。当遇到某些问题时,我仍然会和顾客一起工作,比如有性能问题,技术缺陷的时候。我现在总是一周在家工作,一周在旅行,比如现在我在中国,我下一周就会回去完成数据库的技术文档,我还会在网上做公开课。我仍然在学习数据库,在我的专栏上回答问题,在下个月我就会开始忙活这本书的下一版了。

当你面试其他DBA或者Oracle开发者的时候,你最重视的是什么品质?

我最看重的是好奇心。当DBA或者开发者问我这个东西是怎么工作的,而不是问我具体要怎么做的时候,我会很高兴。很多开发者会把自己的疑惑在网上贴出来,他们想得到的答案是我具体应该怎么做。他们一有问题就会找地方贴出来,尝试找到一个解决方案。如果有人帮他们写代码的话,他们拿了就走。我喜欢的程序员是想自己把代码写出来,因为未来终将有一个时间,没有人能够回答你的问题了,因为别人不知道背景是什么。所以我觉得好奇心和学习的渴望是最重要的,他们想知道数据库是怎么工作的,怎么做才是最好的,他们想把问题弄明白,然后自己找到解决方法。

有人在工作岗位上干了20年,可是他的方法还是20年前的,有的人可能从事相同的工作只有5年经验,但是他迅速地成长,提升工作方法并与时俱进。这种情况下我肯定会要只有5年工作经验的人。经验确实很重要,但是沟通能力、表达能力和质量,以及回答问题的能力也很重要。如果我问的问题5年工作经验的人能给我答案而另一位不能的话,我就不会看重经验更多的人。所以在面试的时候,经验确实能够帮助你敲开大门,但是却没法帮你拿到这份工作。你还要证明你有学习、创新、发现新方法的能力,因为我们现在做事情的方法和20年前应该做的可大不相同,如果你还是墨守陈规,那你的经验就真的不值钱了。

你在培养新人方面是怎么做的?

我不给他们答案。我告诉他们足够多的信息,让他们自己去发现答案。在我的论坛上这种事你经常可以见到。有人还挺生气的,说:“你就把代码给我不行吗?”我就会说:“不,我不会给你写代码,我会告诉你怎么去做,以及涉及的技术,用这个技术就可以解决你的问题,你去学学吧。”有一些技巧就是要学的,等到学会了,你就可以把这些技术应用到很多问题上。

有些人一点也不想知道这东西是怎么工作的,为什么是这样,我认为这是很危险的行为,你把这样的代码给了他,他把这些用在实际生产中,而他实际上不知道这些代码都做了什么。所以我的方法就是,告诉他们信息,让他们自己想答案。当我最开始做Ask Tom专栏的时候,我就只是回答问题,他们问什么我就答什么,而现在我会给他们一段代码,并且告诉他们:这段代码几乎可以帮你解决问题,但是你需要自己想想来改变一部分,这段代码才能真的为你所用。只有理解了这段代码是如何工作的,你才知道怎么去改。一旦你解决了问题,欢迎把你的解决方案分享出来,让别人也能看看学学。

有人说像微软这样的大公司越来越缺乏竞争力,很多充满创造力的年轻人到了这里就变成了黄金螺丝钉,你们在这方面是怎么做的,怎么能让人们的创造力发挥出来并不断创新?

在Oracle有很多不同的技术种类,我们有Linux组,我的妻子就在这个组工作的。她是数据库专家,但是做的是Linux平台的开发工作。我们有MySQL,NoSQL数据库,我们还有时间戳数据库和内存数据库,我们还有一个很大的工具部门在建造Oracle开发者应用快车,有中间件,还有应用部门。这些部门,每个都像是一个小公司,我曾在数据库部门工作,而我所在的部门所做的创新有时候是很疯狂的。而我们必须这么做,因为有开源数据库在和我们竞争,而开源就意味着有那么多人一直在写新的功能和特性。我们还有其他对手,比如微软和DB 2。刚才你提到了微软,在桌面机上他们几乎是没有对手,所向披靡的,所以可能他们缺乏创新的动力吧。而我们在数据库领域的竞争却很激烈,不光在Oracle外面我们要竞争,甚至在公司内部我们也要和自己内部团队竞争,比如Oracle数据库和MySQL。在Oracle的20年中,我从未感到过无聊。

图灵其实还出了一本中文的本版书叫做《DBA的思想天空》,这本书的作者也是一位Oracle ACE专家。他在书中倡导的观点就是学习Oracle的思想才是最重要的,你要像Oracle一样思考,让它变成你生活的一部分,而不是把它当作谋生的工具,追求酷炫的技巧,这样你就会学得更快,成为更成功的DBA。你同意他的观点吗?

这和我的想法有很高的相似度。我不会给你生活上的建议,我不会说这会让你变成一个更好的人,但我会告诉你Oracle数据库是怎么回事。事实上我的书只会告诉你这些。我不用很炫的工具,我用SQL+,我不会告诉你小技巧,我只是告诉你数据库是怎么工作的。我觉得这也是他想说的,理解工作原理,你就可以用它为所欲为了。虽然我没有看过这本书,但是我感觉我应该会同意书中的观点。

相关阅读:精通Oracle的关键是……(Ask Tom上最经常被问到的问题)


更多精彩,加入图灵访谈微信!