SQL Server与Oracle的比较

41

我正在学习SQL Server,但不太了解Oracle。有人能给我公正的比较一下它们吗?我读过一篇关于SQL Server 2000与Oracle 9i的比较,但已经有点过时了。SQL Server 2008是否已经赶上了Oracle 11g/i呢?

12个回答

65

在使用SqlServer多年后,我对Oracle的工作经验只有四个月,以下是我的$0.02建议。

SqlServer更易于使用,这使你可以专注于想让数据库做什么(解决某些业务问题),而不是一直与服务器抗争。

因为Oracle需要配置许多设置,所以有很多方法可能会出错。这导致了无休止的讨论,比如分区、使用何种索引等等。在这些讨论中,没有人考虑业务问题。

一个比喻:我曾经有一台带有好镜头和简单设置的奥林巴斯相机。我用它拍了很好的照片,所以我升级到了一台带有各种旋钮和按钮的数码单反相机。但是我的照片没有之前那么好,因为我一直在关注相机而不是主题。

对我来说,这就是Sql和Oracle之间的区别。Sql更易于使用,因此能够更快地完成更多任务。想法从白板上转化成可工作的代码要快得多。只有当你需要处理非常大的数据库时,Oracle才有可能领先,但我甚至不确定。我认为没有什么东西Oracle能处理而SQL不能。

编辑: 此外,由于切换到PL/SQL的上下文,Oracle在处理大量数据时的内部分析非常差。因此,如果你想在数据上运行一些复杂的函数,请不要使用Oracle。另一方面,MS SQL在这个领域表现出色,因为它没有这个问题,并且还具有.Net集成功能。


2
我处于同样的情况。已经使用SQL Server很多年了。现在只是转向Oracle几个月而已。当尝试完成某些任务时,SQL Server非常直截了当。 - Just a HK developer
4
SQL?Oracle 也是 SQL(实际上也是基于 SQL 的服务器)!!!你可能是指微软的 SQL Server,而不只是“SQL” :) - Reversed Engineer
4
绝对是一场圣战......但 SQL Server 在客观上更好 ;) - theMayer
与 MS SQL Server 相比,未经过优化的查询工具会降低开发人员的幸福感和生产力。 - Shaiju T

35

我认为:

  • Oracle拥有更好的过程语言。与PL / SQL相比,T-SQL感觉只完成了一半。
  • SQL Server拥有更好的优化器。当我使用Oracle时,我必须对每个查询进行提示,以确保它不会花费太长时间才能完成,而SQL Server则可以直接工作。可能是服务器配置不良,这就带我们来到下一点
  • SQL Server更易于使用。您需要专门的DBA来管理Oracle,但几乎任何人都可以使SQL Server运行。
  • Oracle具有更好、更可预测和更详细记录的并发模型。
  • Oracle的文档在大多数方面都优于其他数据库。
  • SQL Server与.NET更好地集成(例如Linq2SQL)。
  • 如果使用Oracle,还必须购买TOAD,但包含的Management Studio对于SQL Server来说就足够了。
  • Oracle拥有更多酷炫但不是必要的功能,如可扩展索引。

如果选择,我会选择SQL Server,因为它具有更好的优化器。但是,当多个人同时使用SQL Server中的相同行时,我真的感觉不安全。


13
设计有缺陷而不是优化器,如果你必须暗示 Oracle 中的每个查询,这相当公平。此外,TOAD从来没有成为必需品,随着SQLDeveloper的捆绑销售,它甚至越来越不起作用了。 - Leigh Riffel
1
@Leigh:我很确定我的设计没有缺陷。但服务器配置可能有问题。当我还在使用Oracle时,虽然可以在SQL*Plus中开发,但这是一个非常糟糕的选择,我认为这不是一个合理的选项。 - erikkallen
1
我可以问一下您对于 SQL Server 2016 和 Oracle 12 是否有相同的看法吗? - Anyname Donotcare
1
“当多个人使用SQL服务器的相同行时,我并不感到很安全。” 哦,拜托!真的吗?并发模型非常稳定,早在此答案发布之前就已经是这样了。只要您不在语句中引入疯狂的提示 - 您会没事的。 - NTDLS
1
“当多个人使用SQL服务器中的相同行时,我并不真正感到安全” - 多个参与者使用相同的行,这就是我们拥有数据库的原因。否则,文件库/ xls就足够了! - Espresso
显示剩余2条评论

24

我不知道这是否公平,但这是我的经验,我曾与两者一起工作:

  1. Oracle似乎在某些花哨的功能上更加“强大”,SQL Server还没有完全赶上。

  2. SQL Server更容易使用,并且与微软产品有更好的集成(如果你正在进行.NET开发)。


1
这个说法似乎适用于所有产品的发布,尤其是同时发布的产品:Oracle在性能方面似乎总是占据优势,但SQL在管理/集成方面似乎总是更胜一筹。 - BenAlabaster
2
@cletus - 是的,但在Oracle中有什么替代方案呢?命令行?TOAD?Toad并不糟糕,但它也有自己的问题。 - Eric Petroelje
2
“i”和“g”与数据库和应用程序无关。9i中的“i”代表互联网,“10/11g”中的“g”代表网格。我认为在他们的应用程序中,“i”也代表互联网。 - Matthew Watson
@Leigh - 是的,看起来他是(编辑了我的答案以删除误导性信息) - Eric Petroelje
现在SQL SERVER 2016和Oracle 12相比,这个答案还是一样吗? - Anyname Donotcare
显示剩余3条评论

22

总的来说现在没有太大的区别。它们几乎可以做到彼此所不能,但是默认配置有些不同。

最明显的区别是Oracle使用SEQUENCE,而SQL Server使用自增列。每种方法都有其优缺点,有些人更喜欢其中一种。

根据我的经验,在SQL Server中进行Top N查询似乎比在Oracle中容易一些。

默认情况下Oracle使用MVCC(未提交的数据对其他事务的读取不会阻塞——数据库会维护一致性视图)。我最近才发现SQL Server也有这个功能,但它不是默认选项,并且被叫做非常不同的名字。事务隔离级别或者其他什么东西。

PL/SQL和T-SQL在某些领域的语法相当不同,但概念大多相同。

个人认为SQL Server管理工具还好,但在某些领域表现极差,比如,它的数据导入/导出与自增主键不兼容。这是已知的SQL Server 2005年以来的问题。我不知道他们是否在2008年修复了这个问题。对于PL/SQL Developer(不是Oracle的一部分;它是一个单独的商业产品),导入和导出非常容易。

Oracle对VARCHAR(2)列有烦人的限制:长度限制为4k。在SQL Server中它们要长得多(64k?)。

我发现SQL Server的安全模型非常奇怪。默认情况下禁用TCP(仅支持Windows身份验证),然后您必须设置登录名和用户?我从来没有完全明白它。它似乎过于复杂,而在Oracle中只需:

CREATE USER blah IDENTIFIED BY password;
GRANT CONNECT TO blah;

已完成(尽管授予其他特权/角色,如RESOURCE是相当常见的)。

我从未完全弄清楚如何从管理工具中备份/恢复数据库。恢复会失败,说有人连接到了数据库,但那个人其实是我试图运行恢复操作。

在任何人对我上述问题进行指责之前,我充分意识到这些问题很大程度上源于我缺乏SQL Server经验,但老实说,仍然期望有一定程度的一致性(与抽象概念)和可移植性。


1
我可以问一下您对于SQL Server 2016和Oracle 12的看法是否仍然相同吗? - Anyname Donotcare
4
嗯,你忘记了tnsnamestnslistner以及所有与设置Oracle相关的麻烦事。我可以在配置10个SQL服务器的时间内折腾完Oracle的安装。 - theMayer

18

我是一名软件开发人员,主要编写数据库上的软件(或帮助我的团队这样做)。

关于Oracle,我可以说:每次我想要做一些事情时,我以前对它的经验对理解如何完成当前任务没有帮助。我花了很多时间搜索有用的解释一个神秘错误消息的方法,只发现一些帖子建议联系Oracle支持。我刚刚发现,如果在Oracle 10g中的空间列上有一个NOT NULL约束,则它们的数据泵导入工具会出现错误(这些错误相当神秘)。即使删除约束后,我仍遇到了一个问题,导入挂起不做任何事情。谈到数据泵,它只能在本地使用。从远程机器工作的导入/导出工具已过时。当你的过程出现错误时,它告诉你编译失败,但无论如何都会创建过程对象,但是处于不可使用状态。然后您必须运行命令以获取错误。用户和权限系统很差。在Oracle中,用户是模式,但是对于众多的权限,没有一个允许用户访问模式上所有对象的权限,并且允许用户终止会话需要授予ALTER DATABASE权限(该权限给用户可能远远超出您想要的权限)。对于空间垃圾收藏家,它无法解析其为SRID 3857生成的WKT(当坐标足够大时,它会输出形式为0.00000e6的数字,并且无法解析该数字语法)。是的,很多这些都是具体的例子,但是在我无法随心所欲地做事情的情况下遇到这些问题是我的日常经历,而在单个任务期间会出现多个问题。

我只有有限的SQL Server经验,但我所做的事情对我来说没有那么艰难。我能够更轻松地找出问题,并且我不记得看到过无法帮助我解决问题的错误消息。与SQL Server更广泛地合作过的同事也报告了类似的经历。

也许只有我这样认为,但是和Oracle合作似乎总是一个痛苦而繁琐的过程。我需要不断地追寻奇怪的错误并设法解决缺失我需要的功能(例如自动递增键)。我的底线观点是:也许Oracle能够更好地执行任务,但前提是你有足够的时间和资金去让Oracle工作,并且找出如何进行调优并让您的开发人员学会它。Oracle很难学习和使用。


13

我是一位SQLServer专业人员,对于Oracle的了解非常有限,但在我看来,SQLServer与Oracle之间的争论就像是宗教信仰一样。这就好比问哪个更好:Windows、Mac还是Linux。

无论是SQLServer还是Oracle都是具备企业级能力的数据库,拥有出色的开发、运维和IT支持记录。只要配置和大小设置正确,两者都能够处理任何你想要投入其中的数据集,但如果配置和大小设置不当,两者同样会因此陷入困境。

至于"易用性",正如我所说,我是一名SQLServer专业人员,我认为SQLServer非常容易使用(管理)。当然,我可能会觉得Oracle很麻烦,因为我习惯于SQLServer的方式。同样地,我相信Oracle的管理员/开发人员会认为Oracle很容易使用,因为他们习惯于Oracle的方式,而SQLServer则对他们来说很陌生。

我认为它们之间唯一真正的区别在于Oracle是跨平台的,而SQLServer显然不是。然而,我认为这不是什么大问题,因为我不打算用Linux代替Windows。


谢谢你的编辑,John。我简直不敢相信我会犯那种错误!(或者是“蓝色那个” :-)) - Walden Leverich

10

我在多个项目中都使用过SQL Server和Oracle。以下是我的想法:

  • SQL Server与.NET配合使用效果更好
  • 一般来说,安装和使用SQL Server更容易。作为开发人员,我很少需要DBA来处理SQL Server的问题,但总是需要DBA来处理Oracle的某些问题。
  • 对于编写存储过程,我非常喜欢PL/SQL(Oracle)而不是T-SQL(SQL Server)
  • Oracle似乎具有更高的硬件要求
  • SQL Server的默认管理工具比包含在Oracle中的工具更易于使用
  • 开发团队很少同时使用这两种数据库

5
正如Cletus提到的那样,Oracle与SQL Server有根本不同的锁定结构:“编写者不会阻塞读者,读者也不会阻塞编写者”,正如Tom Kyte(他的网站是一个很棒的免费资源)所说。SQL Server 2005中也内置了类似的功能,但实现方式是在tempdb中实现行版本控制,这听起来并不特别可扩展。而且它默认是关闭的,因此微软公司的人似乎并不十分信服。
Oracle还具有非常不同的查询缓存结构,因此使用绑定变量或占位符可以产生巨大的影响:最小化“硬”解析(即数据库将SQL语法检查为第一次看到它一样),这意味着只有“软”解析(填充变量)会产生开销。从10g开始,还提供了绑定“窥视”的功能,以便您可以使用绑定变量而不受数据偏斜的影响。
此外还有一些像真正高效和简化的全文搜索功能,以及行级版本控制之类的东西。

3
快照隔离默认情况下未启用,因为“微软的人似乎并不特别相信它”。 它默认关闭是因为它会对现有/旧应用程序引入意外的行为。 - NTDLS

5
Oracle的优势在于调整方面,在Oracle中几乎可以更改所有内容...我不知道在SQL Server中是否可以获得这种定制级别。
在工具方面,SQL Server表现出色,非常容易使用(有限制但仍然非常容易)。
集成...好吧,这取决于你使用的是.NET还是Java。如果你使用.NET,则选择SQL Server(尽管你也可以使用Oracle)。如果您使用Java,则选择Oracle(您也可以使用Java连接到SQL Server)。
如果你问我应该选择哪一个,我会说都不要选!因为像MySQL或PostgreSQL这样的免费数据库服务器提供了同等质量和先进技术(而且由于我使用Python / Django和.NET,它们很好地集成在一起)。
你应该选择哪一个?我不知道,试试两个!安装和使用它们不会超过一天 :)。 两者都有优点,都很酷,我们已经达到了无论选择哪个DBMS(四个大的,MySQL,PgSQL,MSSQL或Oracle)都无关紧要的程度。

9
你是否看到很多200TB的MySQL数据库? - Mark Brady
4
我认为,Oracle、DB2和SQL Server与MySQL和PgSQL处于不同的层次。 :) - Quan Mai
我知道,但谁在乎呢?重点是你可以使用MySQL或PostgreSQL来实现这些巨大的网站,而且它们是免费的...难道我在撒谎吗? - igorgue
1
同意igorgue的观点,SQL Server/Oracle并没有什么特别之处。如果你知道SQL Server/Oracle做得更好的地方,请提出来,否则就不要散布谣言。 - mamu
没有必要将MySQL与Oracle或SQL Server进行比较。有许多在SQL Server和Oracle中可用但在MySQL中不可用的功能。例如,物化视图。 - Channa

5
我认为Oracle有许多SQL Server没有的功能。这并不意味着你不能在MSSS中完成同样的任务,但是这些功能意味着Oracle在相同的任务上可能会更快。
表聚簇。
我们可以将来自多个表的数据存储在同一个块/页上。例如包含表、列、索引和约束的系统表。如果没有表聚簇,要提取表及其所有列、索引和约束,您需要查询父表的名称索引,然后转到父表,读取该行所在的页面/块。然后获取PK,将该值带入列表上FK的索引中,获取rowid,转到具有这些行的块/页,为另外两个表重复此过程。哇...那是很多工作。
在Oracle中,您可以指定这四个表将基于Table_PK生存在同一个表聚簇中。因此,读取将如下所示。检查聚簇索引以查找该表的位置,并使用一个或几个块获取所有4个表的数据。大功告成。
在两个系统中都是4个表,对于应用程序来说看起来完全相同,但如果最小化读取时间非常关键,Oracle可以更快地完成它。

1
你有任何指标可以表明这种差异是实质性的吗? - user565869

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