DB2和Oracle的区别

13

昨天我们与同事们讨论了数据库问题,因为我们将在几周内进行DB2培训。我想知道作为两个主要企业解决方案的DB2和Oracle之间有什么区别?它们之间有什么限制吗?是否有一些任务更适合使用DB2或Oracle?

(我找到了 这篇文章,但我对它是否覆盖了所有内容感到怀疑)


1
我喜欢这个问题!如果我们能够用它来建立一组清晰的技术差异,那就太好了。(我听说在锁定粒度方面有差异,但那是很久以前的事情,我可能已经搞砸了。) - Donal Fellows
你最好在其他地方提出这个问题(例如OracleOverflow或ServerFault),因为它与编程无关。 - Igby Largeman
Alexander Chigrik在这个问题中引用的文章已经非常过时,即使在18个月前最初发布这个问题时也是如此。数据库管理系统供应商似乎每12-18个月就发布一次重大更改,因此比较旧版本之间的差异不会给您带来非常准确或有用的结果。 - Fred Sobotka
5个回答

16

在我看来,DB2的主要区别是它能区分NULL和空字符串。


1
不行,它做不到:http://forums.thedailywtf.com/forums/t/1225.aspx - paxdiablo
1
这是一个观点问题。拥有一个空的数据片段与拥有一个空值数据片段没有什么不同。不要将其与Null的ASCII码Char(0)混淆。 - borjab
11
尊重地说,这并不是一个观点,而是一种标准的违规行为。一段空(已知)数据并不等同于未知的 NULL 数量。经典案例是,可能有中间名的人:" " 是指没有中间名,NULL 是指我们不知道。 - paxdiablo
NULL和空字符串之间的差异微不足道:确切地说是Nullish。 - Tegiri Nenashi
3
@Tegeri,你可以按自己的意愿投票,那是你的权利。但是,这并不会使你的陈述变得更加“正确”。在未知值和已知空值之间存在着巨大的三值逻辑差异。 - paxdiablo
显示剩余5条评论

5

在IT技术方面,IMMSMW,两者之间非常重要的区别是它们实现事务隔离的方式。Oracle使用MVCC,而DB2使用传统的两阶段锁定。

当然,最近的DB2版本可能已经发生了变化。


IMMSMW?如果我的记忆出现了问题?我认为DB2 9.7实现了MVVC,至少在LUW方面是这样的,不确定System z上的“真正”DB2是否实现了。 - paxdiablo
在DB2的文档中,您可能找不到有关MVCC的任何提及,但是从9.7版本开始,适用于Linux、UNIX和Windows的DB2提供了当前提交隔离级别,其行为方式与Oracle非常相似。http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.perf.doc/doc/c0053760.html - Fred Sobotka

4
去年发布的db2 9.7相比以往版本有较少的差异。DB2已经授权使用Postgress plus,该功能在DB2 9.7中得到了应用。这主要是作为一组Oracle兼容性功能来使用的。其中一个特性是并发控制。其他主要特性包括SQL方言、PL/SQL、PL/SQL包内置包、带扩展的JDBC客户端、OCI客户端应用程序、SQL*Plus脚本。更多细节请参见http://www.ibm.com/developerworks/data/library/techarticle/dm-0907oracleappsondb2/ 我应该披露我现在是IBM的迁移专家。

3

Oracle表、架构和列名仍然被限制在30个字符内,这可能会让人感到烦恼。


1
DB2(在AIX上)仅限于8个字符。即使操作系统(在我们的情况下为AIX)没有此限制,用户名也仅限于8个字符。 - Peter Schuetze

2

从哪个角度来看?

对于坚持某种标准的开发人员来说,差异不应该很明显。 但对于管理员来说,情况就不同了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接