Oracle与sql server区别是什么?

 我来答
Mr_随风_么得感情
2012-02-02 · 超过13用户采纳过TA的回答
知道答主
回答量:69
采纳率:100%
帮助的人:23.1万
展开全部
O是大型的不要钱的

S是要钱的,但和微软的软件结合度比较好!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
turelies
2012-02-02 · 超过57用户采纳过TA的回答
知道小有建树答主
回答量:377
采纳率:0%
帮助的人:157万
展开全部
太多了,先学sql server,再研究oracle吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-02-10
展开全部
oracle比sql稍微高级点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友baa43ccd9
2012-02-15
知道答主
回答量:3
采纳率:0%
帮助的人:3.3万
展开全部
操作系统的支持
Microsoft SQL Server向来都从属于Windows大家族中的一员,要让Microsoft发布一个支持其它操作系统版本的可能性当然是小之又小的了。当前来说 SQL Server可以在XP、Vista、Windows Server 2000、2003、2008上运行,同时也有针对于32位和64位版本Windows的数据库版本。
对Oracle来说,它支持多种不同的操作系统平台,包括Windows(32位和64位),另外还有支持Linux和不同分支的Unix(Solaris、HP-UX、AIX等等)
版本和发行版
在本写作时,Microsoft数据库产品的最新版本是SQL Server 2008,即将推出的下一版本是SQL Server 2008 R2,现在已经在CTP阶段了,它的上一个版本,SQL Server 2005,相对于再之前的SQL Server 2000的一个大升级。不过对很多公司来说SQL Server 2005还是有点新,因为他们现在还是在大量的使用着SQL Server 2000.
另一方面Oracle一路走来最新版本已经到了11gR2了,现在主流应用的版本10gR2已经发行有一段时间,已经是公认的领头羊了。Oracle在10g中第一次提出“网格计算”的概念。当然现在还有公司依然在依赖于Oracle 9i处理业务。
说到发行版,SQL Server 2008 R2现在提供下面这么些版本:
企业版
企业版包含所有的高级特性,适用于大规模、高容量的数据库需求。
标准版
标准版为那些不需要包含企业版高级特性的公司提供了一个相对便宜的数据库平台,大部分公司使用的都是标准版的数据库。
工作组版
工作组版适用于小的部门级别的应用。
Web版
这个适用于作为Web应用的低成本的后台解决方案。
Express版
这是一个很小的内嵌式的SQL Server引擎,通常用于本地数据存储或是小规模的系统开发。Express版可以免费下载并且自由分发。
Compact版
Compact版可以让用户开发Windows桌面或者是手持设备的应用。
开发版
所有企业版所拥有的功能开发版都有,不过它仅仅授权单个用户访问,主要用于开发或是测试目的。
除了企业版,SQL Server 2008 R2还为数据中心和数据仓库提供两个“白金版”,这两个版本分别称为数据中心版(Datacenter Edition)和并行数据仓库版(Parallel Data Warehouse Edition)。
对于Oracle 11g R2,发行版是这么样的:
企业版
这个版本提供了顶级的性能,同时价钱也是顶级的。像SQL Server的企业版一样,所有这个产品能提供的特性在这个版本里面都有。
标准版
这个和SQL Server标准版很像,Oracle标准版包含了大部分业务应用所需要的大部分特性。
标准版1
这个版本为小型工作组应用而设计,授权最小的用户为5。
Express版
这个目标客户是小规模应用或者是数据库开发入门,可以免费分发。现在Express版还处于10g R2版本。
下表提供了SQL Server和Oracle数据库发行版的直观的对比:
SQL Server Oracle
Enterprise Edition Enterprise Edition
Standard Edition Standard Edition
Workgroup Edition Standard Edition One
Express edition Express Edition
Web Edition X
Compact Edition X
Developer Edition Enterprise Edition
实例、数据库和表空间
SQL Server和Oracle之间第一个架构级别的差异就在于对实例(instance)和数据库(database)概念的定义了。
SQL Server中,实例一词用来代表一个包含了操作系统文件、内存结构、后台进程以及注册表信息的独立的应用服务。在Windows系统中用一个存在着停止和运行状态的服务来代表一个实例,当处于运行状态时,实例要占用一定的服务器内存以及生成一定数量的后台进程。
SQL Server实例的中心是数据库。一个SQL Server数据库指的是一个资料库以及操作数据所需要的程序代码,当实例没有运行时,实例中的数据库就不能够访问。
SQL Server有两种数据库:系统数据库(system databases)和用户数据库(user databases)。 在一个SQL Server实例安装完成之后,将会自动创建5个系统数据库:master, model, msdb, tempdb和resource。如果一个机器上面安装了多个SQL Server实例时,没有实例都会有自己单独的一套系统数据库。除了msdb数据库之外,其它数据库不能访问或是被损坏都会导致实例无法启动。相比之下用 户数据库由DBA或者是开发人员在数据库实例安装完毕、系统数据库都启动之后所创建的,这些数据库中保存着公司的业务资料。
简而言之,一个SQL Server实例总是要包含一些数据库(尽管有时只是那些系统数据库),一个数据库也总是要有一个(且仅有一个)与之关联的实例。
从物理角度说,一个SQL Server数据库表现为存储于磁盘上面的一组操作系统文件的集合。数据库文件分为两种:数据文件(data file)和事务日志文件(transaction log file)。 一个数据库至少要包含一个数据文件和一个事务日志文件,SQL Server数据库的资料主要是存在于数据文件中,事务日志文件用来记录发生在这些数据上面的变更记录,SQL Server在执行系统恢复的时候要用到它。一个数据文件或事务日志文件只能隶属于一个特定的数据库,不存在两个数据库共用一个数据文件或者是日志文件的 情况。一个数据量很大的数据库可以使用多个数据文件,这些数据文件能够被逻辑的组合成一个称为文件组(file group)的逻辑组。
在Oracle中,这一切看起来都有点反着来了。当Oracle启动时,它和SQL Server一样要先占用一些服务器内存用于执行操作,这个内存区域——著名的SGA(System Global Area)——被分为数个不同的结构,在创建SGA的同时也会启动一系列的后台进程用于和SGA进行交互,在这里这些分配的内存空间和后台进程组合起来就是Oracle实例了。请注意现在我们没有见到数据库的影子还,实际上Oracle实例在没有数据库或是数据库不能访问时也是跑的很好的,在安装Oracle时,我们可以选择只安装软件,完了之后再安装数据库。
Oracle中的数据包含了一组操作系统文件。不像SQL Server数据库,Oracle数据库并不能代表数据库对象的逻辑分组,它更像是表示包含多个存在于磁盘上的用来保存数据的文件的一个单个的集合名词。
组成Oracle数据库的文件可以分成三个类型:数据文件(data file)、重做日志文件(redo log file)和控制文件(control file)。 数据文件保存数据,Oracle中可以存在任意数量的数据文件;重做日志文件跟SQL Server的事务日志文件一样用来保存对数据更改的记录,在系统恢复阶段需要用到;控制文件是一些特别的小文件,用来保存一些至关重要的关于数据库的信 息,没有这个文件的话,实例就无法打开数据库。
除了数据文件、重做日志文件、控制文件之外,数据库还包含参数文件(parameter file)、密码文件(password file)和可选的归档日志文件(archive log files),后面很快会对这些文件类型展开讨论。
Oracle系统启动时,首先在内存中创建数据库实例,然后由实例找到保存在磁盘中的数据库,最后打开数据库让用户操作。当系统关闭时,实例会从内 存中清除掉:整个内存结构和后台进程都会消失,但是数据库依然存在于磁盘上,只是处于关闭的状态。之前也说过,Oracle实例可以在不打开数据库的情况 下运行——这是与SQL Server数据库最大的不同,SQL Server实例是不能够离开系统数据库而运行的。不过和SQL Server一样Oracle数据库在实例没有启动的情况下也是不能访问的。
一般来说Oracle实例和数据库之间是一对一的关系。一个实例对应着一个数据库,但是一个数据库却可以同时由多个实例去访问它。一个独立的 Oracle安装包含一个实例和一个供实例操作的数据库,而配置成RAC(Real Application Cluster)的安装则可以允许多个存在于不同机器上的实例访问存在于一个共享磁盘上面的数据库。
那Oracle中数据库对象的逻辑分组在那儿呢?在SQL Server中逻辑分组由数据库自己来完成,而在Oracle中,这项工作由表空间(tablespace)完 成,Oracle表空间是用来对表、视图、索引和其他数据库对象进行分组的逻辑结构。例如,你的Oracle产品库可以给HR应用一个单独的表空间,支付 应用则使用另外一个。一个数据库可以逻辑的分成若干个表空间,这些表空间在物理上则由一个或者多个数据文件组成。因此在Oracle中与SQL Server数据库等价的是表空间。
由于这两种结构在功能上相当类似,在SQL Server中建立数据库的过程和在Oracle中建立表空间的过程也非常相似。不管是建立数据库还是表空间,DBA都要首先指定一个名字,然后给新建的 数据库或者表空间分配一个或多个数据文件,并为每个数据文件指定初始大小和数据增长情况。
在SQL Server中可以做到让一个用户数据库离线或是只读,Oracle的用户表空间也一样可以。在SQL Server中可以让一个用户数据库中的一个或者多个数据文件只读,而Oracle用户表空间中的一个或者多个数据文件也同样能标记为离线。
不过数据库和表空间在某些方面还是有差别的:
• SQL Server中,数据文件可以用文件组逻辑的进行分组,而Oracle表空间就没有类似的概念。
• SQL Server的每个数据库都有自己的事务日志文件,而且在创建数据库的时候就要指定这些日志文件的属性。而在Oracle中整个数据库(意为所有的表空间)的事务日志都是记录在同样的一样重做日志中,因此也不存在说给每个表空间建立一个单独的日志文件的说法。
• SQL Server中,数据库可以设置成简单恢复模式(simple recovery mode),简单恢复模式指的是活动的数据库日志在checkpoint操作完成之后就会截断。Oracle也有类似的概念,这个稍后会说到,不过不能在表空间级别上进行这样的设置。
实例名和SID
SQL Server和Oracle都允许在同一个机器上面同时运行多个实例,多个实例的执行环境是完全独立的:就单个的数据库引擎而言,它并不知道也不关心有没有其他的实例在这个机器上运行着。
在SQL Server中这种机制通过实例这个概念来实现,SQL Server可以作为一个命名的(named) 或是 默认(default) 的实例来运行,默认实例的名字和运行它的Windows服务器的名字一样,显然一个系统的默认实例只可能存在一个,不过在一个机器上可以存在多个命名的实例,命令实例的名字格式为 HOSTNAME\INSTANCE_NAME ,同一个主机上每个运行实例的 INSTANCE_NAME 必须是唯一的,每个实例都有着自己的一套程序文件以及一些与其它实例共享的通用组件。
而Oracle也差不多,在安装Oracle的时候,DBA就需要指定一个 全局数据库名(Global Database Name)和系统标识符(SID, System Identifier)。Oracle中实例和数据库是完全不同的东西,一个全局数据库名用来在网络上唯一的识别一个数据库的存放位置,一个完整的名字通常是下面的格式database_name.network_domain_name。 SID则是用来识别一个与数据库关联的实例,大都数情况下一个实例关联一个单个的数据库,数据库名和SID名字会是一样。RAC环境中就不一样了,RAC 允许多个实例访问放在共享存储中的同一个数据库,此时的实例名和数据库名字将不一样。当然和SQL Server一样,一个Oracle数据库服务器上面是不允许两个实例使用同一个SID的,另外一点类似的就是在安装时一旦指定,不管是SQL Server实例名还是Oracle SID都是不能再修改了(译注:实际上Oracle从9i开始就提供一个叫nid的工具用来修改数据库名了)。
SQL Server DBA可以通过下面的语句查询当前登录系统的实例名:
1 SELECT @@SERVERNAME
Oracle DBA用来查询实例名和数据名的语句如下:

1 SELECT INSTANCE_NAME, HOST_NAME, VERSION, DATABASE_STATUS FROM V$INSTANCE;
2 SELECT NAME, DATABASE_ROLE, CREATED FROM V$DATABASE;
系统数据库和系统表空间
一个SQL Server实例需要有5个系统数据库(2005之前的是4个):master, model, msdb, tempdb和resource,一个Oracle数据库则最少需要3个系统表空间才能正常操作,它们是:SYSTEM, SYSAUX和TEMP。
master和resource数据库集中保存了SQL Server自身管理所需要的所有信息,里面保存了诸如系统配置,数据库列表和文件路径、终结点、连接服务器和用户帐户(或“登录”信息),系统级别的对象存储在只读的数据库”资源(resource)”中。
在Oracle中,SYSTEM表空间等价于master数据库,SYSTEM表空间包含了数据字典(data dictionary),也就是关于Oracle自身的元数据(metadata),这里的数据字典可以和SQL Server中的resource数据库进行类比。到这里你也许猜到了:如果SYSTEM不存在或是损坏了的话Oracle数据库是打不开的。
对于一个SQL Server实例,model数据库用作这个实例中所有新建的数据库的“模板”,对model数据库的任何修改都会反应到之后新建的其它数据库里面。在 Oracle中就没有这样的模板,不过在你新建一个表空间的时候,你可以指定这是一个永久的表空间或者是其他类似TEMP和UNDO一样的表空间,永久表 空间才是用来保存用户数据的。
SQL Server的tempdb用作整个实例的“试验田”,每次实例重新启动的时候tempdb都会重新创建。Oracle的TEMP表空间的作用类似:用来包括大的排序操作的中间结果。当然SQL Server的tempdb还能用来保存行版本(row versioning)所 需要的信息,当行版本启用后,行版本特性可以保证数据库引擎能将数据行的每次的修改记录保留下来,修改之前的行会保存在tempdb里面的版本库中,一般 查询会返回一个数据行上最后提交的版本,当一个使用了特定隔离级别的依赖行版本的读操作不再会阻塞其它修改同样数据的事务,这是因为读操作不会在数据行上 使用共享锁。不过这个特性需要在单个数据库上单独启用。
Oracle中使用一个单独的表空间——著名的UNDO表空间——来达成同样目的。UNDO表空间保存着被DML语句修改的数据块的读一致性的副 本。当用户开始对数据进行修改的时候,修改之前的数据块会被保存到UNDO表空间中,当另外一个用户需要查询这些数据的时候,他取到的实际上是UNDO表 空间中查出来的读一致性的版本。不像SQL Server的行版本,Oracle的UNDO不需要启用——因为它是属于Oracle并行访问机制的一部分。
最后一个要介绍的SQL Server中的msdb数据库,SQL Server代理服务需要操作这个库。SQL Server代理负责计划任务、警告、复制、日志传送以及其它的很多东西,代理服务的正常运行离不开msdb数据库。
在Oracle没有明确与mdsb数据对应的东西。SYSAUX表空间也是一个系统表空间,在安装过程中(译注:准确说应该为“数据库创建过程 中”)创建,它里面保存了诸如Oracle AWR(Automatic Workload Repository)信息、多维数据和多媒体数据,XML数据库等等。
v数据库实例结构
当Oracle实例启动之后,所看到的就是在服务器内存上的一个个不同内存块加上产生的与这些内存交互的后台进程。Oracle文档将这些内存结构和进程收的很详细。
由Oracle实例所占用的内存块成为SGA(System Global Area),它的大小可以通过调整Oracle初始化参数(initialisation parameter)进行修改,在SGA里边至少会创建3个不同的区域,它们分别是:
数据块缓存区(Database Buffer Cache)
这里缓存的是数据块。和SQL Server一样,用户不会直接的访问数据文件上的数据:当读取数据时,相关的数据块会从数据文件中拷贝到内存中;修改数据时也是修改内存中的数据,然后再由单独的进程将数据缓存区中被修改的数据写入到数据库中。
重做日志缓存(Redo Log Buffer)
SGA中的这个区域连续的记录着数据缓存区数据修改的记录,重做日志缓存中的内容会被写入到在线日志文件中去。
共享池(Shared Pool)
SGA中有一大块的内存用作共享池,共享池等价于SQL Server中的执行缓存(Procedure Cache)。它的主要作用就是缓存数据库中最近执行过的SQL语句。共享池由下面的模块组成:
数据字典缓存(Dictionary Cache)
数据字典缓存缓存了Oracle最近使用的数据字典信息。
库缓存(Library Cache)
这个区域包含了最近执行的SQL和PL/SQL语句和对应的执行计划。SQL区还能进一步分成共享区和私有区:共享SQL区保存的语句可以由多个用户使用而私有区保存的则是跟各个连接对应的绑定变量的信息。PL/SQL是Oracle对于行业标准SQL的程序扩展,当PL/SQL程序执行时,它的代码会拷贝到库缓存中的共享PL/SQL区中。除了缓存执行代码和执行计划外,库缓存还包含锁、阀以及字符集等信息。
根据你所使用的组件的不一样,Oracle的SGA中也可能存在其它一些可选的内存区域。在Oracle中使用Java应用时要使用到Java池(Java Pool),Oracle内置的备份恢复工具RMAN(Recovery Manager)要用到大池(Large Pool),当使用Oracle高级队列机制时要用到流池(Steams Pool)。
上面介绍的各个内存区域都是属于SGA的一部分,它们是通过一序列的进程(process)来和数据库进行交互。下面就开始介绍包括用户进程和服务器进程在内的Oracle进程了。
当用户或者是应用连接到Oracle数据库时就会产生一个用户进程(user process)。在一个两层的系统架构中,用户进程存在于客户端机器上;而在一个三层的系统架构中,用户进程由中间层产生。一旦用户进程连接到Oracle监听服务(Listener Service)时,监听器就会为这个用户会话产生一个服务器进程(server process)。 再说详细点就是,Oracle监听器是一个负责为Oracle处理近来连接的网络组件,监听器本身是一个单独的进程,负责监视着从客户端过来的连接请求, 如果监听器没有运行的话,数据库也就无法连接了。一旦连接建立,由监听器产生的服务器进程就开始接手处理用户操作数据库的请求了。大多情况下每个用户连接 会产生一个独立的服务器进程,不过Oracle也能配置成一个运行着多个预先创建好的服务器进程池的模式,此时用户进程连接到数据库实例之后将会直接从进 程池中分配一个进程。
任何时候Oracle实例中都会有多个后台进程在运行着,不过,有5个必须要有的。
写数据库(Database Writer)进程或称DBWn负责将数据缓存区中被修改的数据库写入到数据文件中。为提高系统系能Oracle可以最多创建20个这样的进程,DBWn中的n代表着一个单独的进程:n取值范围是0到9和a到j。
在DBWn进程将脏块写入到数据文件的同时,一个叫日志写入(Log Writer, LGWR)的进程也在降 日志缓存中的日志写入到在线日志中去。LGWR执行的要比DBWn进程频繁得多,主要原因有两点:首先是要尽快的将事务信息写入到磁盘当中,以保证当意外 宕机等事件发生时数据库能正常恢复,在一个就是日志缓存中的日志信息记录的不是实际的变化的数据,但是却是能够反应数据的变化——因此相比之下也就要小得 多了。
检查点(Checkpoint, CKPT)进程负责定期的将SGA中的内容同步到数据库中。当执行检查点时,它会调用DBWn进程将所有的脏块写入到数据文件中,同时将重做日志缓存中的内容写入到在线日志文件中,然后更新数据文件头和控制文件的相关信息。
如果某个访问数据库的进程意外的死掉的话,那进程监视器(Process Monitor, PMON)就会在 后台悄悄的清理掉这个死掉的进程,所进行的操作包括释放相应的锁、回收分配的资源已经将这个进程从活动进程中清理出去。PMON进程有点像一个UNIX的 daemon进程:它会定期的唤醒以检查看是否有清理工作要做。在必要的时候也能启动一个别的进程或被其他的后台进程使唤。
在一个实例崩溃之后重启时,Oracle会自动的调用系统监视器(System Monitor, SMON)进程,SMON会利用在线日志文件来完成崩溃恢复操作。
归档进程(Archiver, ARCn)是Oracle实例中可选的几种进程之一,这里的n和之前说的一样都是代表着单个的进程。只有在数据库开启了归档模式(archive log mode)之后才会启动ARCn进程,在在线日志中的内容满了之后,在Oracle覆盖这些记录之前ARCn进程会将这些内存保存到磁盘上,这些文件称为归档日志(archive log),这样的话在线日志内容就不会丢掉了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zjy198518
2012-02-06 · TA获得超过867个赞
知道小有建树答主
回答量:777
采纳率:80%
帮助的人:580万
展开全部
开放性
SQL Server
只能在Windows 上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且Windows平台的可靠性,安全性和伸缩性是非常有限的。它不象Unix那样久经考验,尤其是在处理大数据量的关键业务时。
Oracle
能在所有主流平台上运行(包括 Windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。
DB2
能在所有主流平台上运行(包括Windows)。最适于海量数据。DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%。
可伸缩性,并行性
SQL Server
并行实施和共存模型并不成熟。很难处理日益增多的用户数和数据卷。伸缩性有限。Oracle平行服务器通过使一组结点共享同一簇中的工作来扩展Window NT的能力,提供高可用性和高伸缩性的簇的解决方案。如果WindowsNT不能满足需要, 用户可以把数据库移到UNIX中。
DB2
DB2具有很好的并行性。DB2把数据库管理扩充到了并行的、多节点的环境。数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日志。数据库分区有时被称为节点或数据库节点。
安全性
SQL server
没有获得任何安全证书。
Oracle Server
获得最高认证级别的ISO标准认证。
DB2
获得最高认证级别的ISO标准认证。

性能
SQL Server
多用户时性能不佳
Oracle
性能最高, 保持WindowsNT下的TPC-D和TPC-C的世界记录。
DB2
适用于数据仓库和在线事物处理,性能较高。 客户端支持及应用模式。
SQL Server
C/S结构,只支持Windows客户,可以用ADO,DAO,OLEDB,ODBC连接。
Oracle
多层次网络计算,支持多种工业标准,可以用ODBC,JDBC,OCI等网络客户连接。
DB2
跨平台,多层结构,支持ODBC,JDBC等客户。
操作简便
SQL Server
操作简单,但只有图形界面。
Oracle
较复杂, 同时提供GUI和命令行,在Windows NT和Unix下操作相同。
DB2
操作简单,同时提供GUI和命令行,在Windows NT和Unix下操作相同。
使用风险
SQL Server
完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。
Oracle
长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。
DB2
在巨型企业得到广泛的应用,向下兼容性好。风险小
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式