我正在学习SQL Server,但不太了解Oracle。有人能给我公正的比较一下它们吗?我读过一篇关于SQL Server 2000与Oracle 9i的比较,但已经有点过时了。SQL Server 2008是否已经赶上了Oracle 11g/i呢?
我正在学习SQL Server,但不太了解Oracle。有人能给我公正的比较一下它们吗?我读过一篇关于SQL Server 2000与Oracle 9i的比较,但已经有点过时了。SQL Server 2008是否已经赶上了Oracle 11g/i呢?
在使用SqlServer多年后,我对Oracle的工作经验只有四个月,以下是我的$0.02建议。
SqlServer更易于使用,这使你可以专注于想让数据库做什么(解决某些业务问题),而不是一直与服务器抗争。
因为Oracle需要配置许多设置,所以有很多方法可能会出错。这导致了无休止的讨论,比如分区、使用何种索引等等。在这些讨论中,没有人考虑业务问题。
一个比喻:我曾经有一台带有好镜头和简单设置的奥林巴斯相机。我用它拍了很好的照片,所以我升级到了一台带有各种旋钮和按钮的数码单反相机。但是我的照片没有之前那么好,因为我一直在关注相机而不是主题。
对我来说,这就是Sql和Oracle之间的区别。Sql更易于使用,因此能够更快地完成更多任务。想法从白板上转化成可工作的代码要快得多。只有当你需要处理非常大的数据库时,Oracle才有可能领先,但我甚至不确定。我认为没有什么东西Oracle能处理而SQL不能。
编辑: 此外,由于切换到PL/SQL的上下文,Oracle在处理大量数据时的内部分析非常差。因此,如果你想在数据上运行一些复杂的函数,请不要使用Oracle。另一方面,MS SQL在这个领域表现出色,因为它没有这个问题,并且还具有.Net集成功能。
我认为:
如果选择,我会选择SQL Server,因为它具有更好的优化器。但是,当多个人同时使用SQL Server中的相同行时,我真的感觉不安全。
我不知道这是否公平,但这是我的经验,我曾与两者一起工作:
Oracle似乎在某些花哨的功能上更加“强大”,SQL Server还没有完全赶上。
SQL Server更容易使用,并且与微软产品有更好的集成(如果你正在进行.NET开发)。
总的来说现在没有太大的区别。它们几乎可以做到彼此所不能,但是默认配置有些不同。
最明显的区别是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经验,但老实说,仍然期望有一定程度的一致性(与抽象概念)和可移植性。
tnsnames
、tnslistner
以及所有与设置Oracle相关的麻烦事。我可以在配置10个SQL服务器的时间内折腾完Oracle的安装。 - theMayer我是一名软件开发人员,主要编写数据库上的软件(或帮助我的团队这样做)。
关于Oracle,我可以说:每次我想要做一些事情时,我以前对它的经验对理解如何完成当前任务没有帮助。我花了很多时间搜索有用的解释一个神秘错误消息的方法,只发现一些帖子建议联系Oracle支持。我刚刚发现,如果在Oracle 10g中的空间列上有一个NOT NULL
约束,则它们的数据泵导入工具会出现错误(这些错误相当神秘)。即使删除约束后,我仍遇到了一个问题,导入挂起不做任何事情。谈到数据泵,它只能在本地使用。从远程机器工作的导入/导出工具已过时。当你的过程出现错误时,它告诉你编译失败,但无论如何都会创建过程对象,但是处于不可使用状态。然后您必须运行命令以获取错误。用户和权限系统很差。在Oracle中,用户是模式,但是对于众多的权限,没有一个允许用户访问模式上所有对象的权限,并且允许用户终止会话需要授予ALTER DATABASE
权限(该权限给用户可能远远超出您想要的权限)。对于空间垃圾收藏家,它无法解析其为SRID 3857生成的WKT(当坐标足够大时,它会输出形式为0.00000e6的数字,并且无法解析该数字语法)。是的,很多这些都是具体的例子,但是在我无法随心所欲地做事情的情况下遇到这些问题是我的日常经历,而在单个任务期间会出现多个问题。
我只有有限的SQL Server经验,但我所做的事情对我来说没有那么艰难。我能够更轻松地找出问题,并且我不记得看到过无法帮助我解决问题的错误消息。与SQL Server更广泛地合作过的同事也报告了类似的经历。
也许只有我这样认为,但是和Oracle合作似乎总是一个痛苦而繁琐的过程。我需要不断地追寻奇怪的错误并设法解决缺失我需要的功能(例如自动递增键)。我的底线观点是:也许Oracle能够更好地执行任务,但前提是你有足够的时间和资金去让Oracle工作,并且找出如何进行调优并让您的开发人员学会它。Oracle很难学习和使用。
我是一位SQLServer专业人员,对于Oracle的了解非常有限,但在我看来,SQLServer与Oracle之间的争论就像是宗教信仰一样。这就好比问哪个更好:Windows、Mac还是Linux。
无论是SQLServer还是Oracle都是具备企业级能力的数据库,拥有出色的开发、运维和IT支持记录。只要配置和大小设置正确,两者都能够处理任何你想要投入其中的数据集,但如果配置和大小设置不当,两者同样会因此陷入困境。
至于"易用性",正如我所说,我是一名SQLServer专业人员,我认为SQLServer非常容易使用(管理)。当然,我可能会觉得Oracle很麻烦,因为我习惯于SQLServer的方式。同样地,我相信Oracle的管理员/开发人员会认为Oracle很容易使用,因为他们习惯于Oracle的方式,而SQLServer则对他们来说很陌生。
我认为它们之间唯一真正的区别在于Oracle是跨平台的,而SQLServer显然不是。然而,我认为这不是什么大问题,因为我不打算用Linux代替Windows。
我在多个项目中都使用过SQL Server和Oracle。以下是我的想法: