1.Oracle为客户端开启会话有两种方式:共享服务和专用服务。在专用服务情况下,监听器为连接请求创建新进程(Unix环境下是Process,Windows下我想应该是Thread吧);共享服务情况下,监听器将客户请求交给Dispatcher,由Dispatcher安排多客户的作业。SQL Server在默认情况下自动为客户端连接创建线程,当有非常多的客户连接时,SQL Server可以使用线程池管理多会话,这类似于Oracle的共享服务。
2.Oracle的内存管理分三块:SGA、PGA、UGA;在MSDN中并没有提及怎样控制SQL Server的内存分配,只是提到SQL Server的虚拟地址空间分成缓冲池占用空间和其余空间,且SQL Server有动态内存管理机制。
3. Oracle的实例一次只能管理一个数据库,数据库在集群环境下可由多个实例管理。而SQL Server单个实例一次能管理多个数据库。Oracle数据库存储方式有OS文件、裸分区、ASM等,SQL Server的数据库存储只能是系统文件。
4. Oracle数据库包含表空间,表空间可以使用多个文件存储数据,表空间就类似于SQL Server中的文件组。区是物理连续上连接的存储空间,区中包括最小I/O单位——块(Oracle)或页(SQL Server)。但SQL Server页大小是8KB,区包含8个页;Oracle不同表空间可以有不同的块大小,区的大小和保护块的数量也不固定。SQL Server的页由一个数据库对象独占,物理储存的数据库对象只有索引和表两种;而Oracle中的段由数据库对象定义,且其存储的对象复杂得多,有表段、索引段、回滚段、临时段等等,所以在一个聚簇段中的块可能被多个表使用。
5. Oracle使用FREELIST管理可以块,通过设置PCTFREE和PCTUSED控制快在何种条件下可用;SQL Server使用GAM、SGAN记录可用页,使用PFS跟踪页的使用状况。
6. SQL Server的表有两种方式组织数据的物理存储,一种是无序的堆组织,这Oracle是类似的;另一种是由聚簇索引决定数据排序方式,Oracle也可有索引组织方式,但不同于SQL Server,它依键排序数据,不增加一个索引用于聚簇,不会有额外的开销。此外,Oracle的聚簇表是多表存储在相同段上,像SQL Server的混合区可以包含不同表的页,但Oracle的聚簇表是一组含有相同列的表可以储存在相同的块中,聚簇表的可以有索引或Hash方式组织数据
7. Oracle创建表分区会创建不同的段,SQL Server 2005通过分区方案将不同分区存储到不同的文件组。Oracle有三种分区方法,SQL Server使用分区函数。Oracle 11g中还将加入时段分区、系统分区等。
8. SQL Server的索引只有B-树,Oracle有B-树、位图、函数、位图连接和可扩展索引。
9. Oracle的重做日志与SQL Server的事务日志都使用循环写入策略,Oracle使用多个重做日志文件,SQL Server也可使用多个日志文件,但将日志文件分成多个虚拟日志,以虚拟日志为单位进行循环。