仔细读了一把McGraw.Hill.Microsoft.SQL.Server.2008.Administration.for.Oracle.DBAs的第二章,颇有感触。这种形式的书应该多出,通过对比,即可以复习以前掌握的知识,又能快速学到新技术,还能知晓两者之间的差异。来看看Oracle与SQL Server在Architecture下的异同吧。
High-Level
从High-Level 的层次来看,两者是一致的。都有Instance,Database的概念。
但是database扮演的角色却大有不同。
在Oracle中,一个实例只能有一个Database,或者在RAC模式下,多个实例对应一个Database。Database中包含多个Schema,比如存放数据字典的SYS,当然还有最常用的用户自己建的Schema。而在SQL Server中一个实例有且必有多个database(怎么感觉像数学公理,O(∩_∩)O~),至少包括system databases 和 user databases。这么看来,倒是可以把Oracle里的Schema理解为SQL Server里的Database。不啰嗦了,一图以蔽之。
Storage Model 存储模型
Oracle里通过TableSpace和数据文件把物理存储和逻辑存储隔离开来。上图左边那部分咋这么熟悉,好像在哪见过。翻看《OCP认证考试指南全册Oracle Database 10g》第六章找到了这张图,总算是没白花88元买这本书,O(∩_∩)O~。
Filegroups 跟 Tablespaces 的概念差不多。作为SQL Server存储结构的老大,Filegroups 能力不小,比如可以根据年份设置Filegroup,2009年一个,2010年一个。就如Oracle在建表时可以指定表空间一样,SQL Server同样可以指定Filegroup。
Segment 与 Index/Heap相差老远了,没得可比性。
SQL Server 里8个page组成一个Extent,Extent又可分为两种类型,统一区(uniform)或 混合区(mixed)。Oracle里的Extent就没整得这么复杂了。什么是统一区(uniform)或 混合区(mixed)?网上有这么一段:http://hi.baidu.com/%C3%FA%D3%E3/blog/item/ffe2c10b49773ea32eddd439.html
在一个统一区中,全部8个页都是来自同一个类似表或是索引之类的对象;在一个混合区中,页可以从属于不同的对象。在创建表或是索引时,通常都是从混合区中分配页。在表或索引的数据增长到足够填满8个或更多页的时候,就会自动的切换到统一区中去。
再稍微说明下,当表刚开始被创建时,从混合区拿个8K的页给它用,这个表慢慢长大,从混合区要了第二个,第三个。。。直到第八个。估计这时候,SQL Server被这个表弄烦了,怒吼一声,从第九个页开始,每次给你一个uniform,少来烦我了。混合区可以有很多小对象,统一区就只针对一个Object了。
Block 和Pagesde 也是大相径庭。SQL Server 里的Page固定为8K。Oracle可以通过参数修改Block。SQL Server 里添加数据文件后,都会赋予它一个唯一的文件ID。对于每一个数据文件,空间被分割成一个个8K的页,从0开始标记。
别看图上第一个文件分出了511页,实际上你不能拥有全部的页。为啥,被SQL Server 这个地主抽出了几页。第0页永远被用来记录文件头,第1页又称PFS,即Page Free Space,用来记录还剩多少空间。后面的几页的也是各有用途,有图为证:
不由联想到当今的房地产,暗叹一声,这SQL Server的“得页率”咋搞得跟当今的“得房率”一样。看看都是些啥用了我宝贵的页。
Physical Implementation 物理实现
SQL Server的一个Database通常由三种类型文件组成:primary,secondary,log。
Transaction Log Files 事务日志文件
SQL Server 的transaction log类似于Oracle的redo log/undo 表空间。每个Database都有自己的 transaction log,因而就具备自我恢复能力。类似于Oracle的SCN(System Change Numbers) 系统变更号,SQL Server 也整出个LSN,日志序列号。每条记录都包含关联的transaction ID,每当异常发生时,SQL Server 就会根据这些记录来回滚。
在Oracle里面,一般至少需要两个 redo 日志文件,实际用到的可能更多。但在SQL Server里面一个Transaction Log 就够用了。因为它内部又分了许多虚拟日志文件,称之为VLF。
在Oracle里,Redo文件可以有三种状态,当前在用是CURRENT,要求待命随时准备恢复的ACTIVE,不再用来做恢复,没有利用价值就成了INACTIVE。SQL Server 也有类似概念。残酷的Min LSN点,过了这个点你就是社会栋梁,还可以用来做回滚或恢复。但是不要以为你费尽九牛二虎之力挤过了那个点就可以高枕无忧了。长江后浪推前浪,前浪死在沙滩(Min LSN)上。Min LSN是会随着 transaction 事件不断前移的。
再来说说恢复模式吧。Oracle有NOARCHIVELOG,SQL Server有类似的SIMPLE。在SIMPLE模式下,日志越来越多,空间不够用了怎么办?不是还有之前没挤过Min LSN独木桥的兄弟嘛?过河拆桥还不会,Truncated掉。
SQL Server 有FULL 和BULK_LOGGED模式来对应Oracle的ARCHIVELOG。这种方式稍微人道一点,先给你备份一下,再咔嚓掉。O(∩_∩)O~,先摸摸你的头,再温柔一刀。
Database Snapshots 数据库快照
SQL Server 也有快照查询。下图展示了快照查询的原理。场景一,如果源数据没有修改,直接返回源数据查询结果。场景二,源数据里某条记录被修改了,在Update源数据的同时,会复制原来的记录,插到数据库快照。场景三,再来查询(快照查询语法),就会返回那时那刻的快照记录。
Inside the Instance 深度解剖
SQL Server主要由四大块组成:the protocol layer,the relational engine, the storage engine, and SQLOS.
Protocol Layer 协议层,顾名思义,主要就是通过各种协议来接收客户端请求,最常用的应该是TCP/IP了。
Relational Engine 又称query processor,从协议层接收到T-SQL事件后,开始解析,优化,最后执行。跟Oracle也挺相似的,一个SQL 语句过来后,过五关斩六将(parser, optimizer, row source,generator)才能最后到达SQL execution engine。
Storage Engine,这一层开始跟数据文件打交道,缓存和事务控制也在这一层引入。Transaction manager就是用来保证ACID(数据库事务正确执行的四个基本要素),并且跟Oracle一样用的都是Write ahead logging方式。
SQLOS,引用百科:将操作系统从SQL Server引擎中抽象出来,并提供服务以最大限度利用这些架构,同时保留现有架构。SQLOS对服务器的其他部分提供用户级的操作系统服务,这就是“SQLOS”名称的由来。SQL Server引擎中的组件利用SQLOS提供的服务,来调度单个或者多个任务、分配内存等。
Background Processes 后台进程
Oracle里面有很多后台进程,比如SMON,PMON,RECO,CKPT,DBWn等等。到了SQL Server里,也有一堆后台线程,例如Lazywriter,Checkpoint,Log writer,Deadlock/Lock monitor,Scheduler monitor,Resource monitor等等。
Client/Server Communication 客户端/服务器通信
先来温习下Oracle的通信方式。
客户端需要安装Oracle Net client。Oracle Net foundation layer先把请求打包成Oracle专有格式,Oracle Protocol Support layer把请求再度封装以TCP/IP或Named Pipes的方式发到服务器端。当服务器端返回请求结果后,操作则刚好相反,两次解析取得结果。
服务器端有个Listener,干什么用的(⊙o⊙)?我戏称为一次性用品,用来初始化连接,当连接建立起来后就没它什么事了。
再来看SQL Server。类似于Oracle client,SQL Server有SNAC (SQL Server Native Client),支持以OLE DB,ODBC,或者ADO.NET的方式连接到服务器。请求同样也会被再封装一下,自然是Microsoft的格式,叫什么TDS (Tabular Data Stream)。同样与Oracle相似,有个SQL Server Network Interface (SNI) protocol 层来打包和解包TDS数据包。
SQL Server就没有 Listener 的概念了,而是通过TDS Endpoint来侦听各种协议过来的客户端请求。
相关推荐
这是小弟为了一个Oracle项目的应急之作,我们的系统(Delphi的三层架构)一直运行在sql server下面, 当时客户指定需要的是支持Oracle版本的应用系统, 这个系统不小,如果要将里面的SQL全部转换为Oracle,需要...
一般的公司通常会在他们的信息系统架构中引入多种数据库平台,同时引入三到四种不同的RDBMS览...本文是以一个SQL Server DBA的觇度去构思和写作的,不过相信返对Oracle与家门了览SQL Server返一面也是徆有参考价值的。
C# CS、BS的EF+Linq开发架构,支持三种:SQLServer\Oracle\MySql数据库,可以结合MVC使用。
ArcSDE数据库架构(Oracle和SQLServer).pdf
2、支持SQLSERVER、MySql、ACCESS. 3、可选择简单三层架构和工厂模式三层架构 4、可选择不生成缓存代码、“缓存对象”、“聚合缓存依赖”及“缓存对象+聚合缓存依赖” 5、可选择要生成的层 6、可生成用户控件及后台...
目前,大多数应用程序使用的是Oracle数据库,而用户或多或少的使用了Oracle的一些特殊功能,而这些特殊功能在其他数据库中都未实现。为了方便用户的移植,DM实现了很多Oracle独特的功能和语法,很多Oracle的应用可以...
SQLServer是windows平台.NET架构下标配数据库解决方案,与Oracle、MySQL共同构成了DB-EnginesRanking的第一阵营,在国内外企业市场中有着广泛的应用。Mirroring是SQLServer最常用的高可用解决方案,具有自动故障转移...
一直以来,数据库架构实践、数据库优化应用等,是备受大家关注的传统话题,本届大会仍将继续邀请一批国内顶尖的技术专家来进行分享,包括Oracle应用实践、MySQL应用实践、SQL Server应用实践等。
第1章 什么是SQL注入 1.1 概述 1.2 理解Web应用的工作原理 1.2.1 一种简单的应用架构 1.2.2 一种较复杂的架构 1.3 理解SQL注入 1.4 理解SQL注入的产生过程 1.4.1 构造动态字符串 1.4.2 不...
B/S架构和C/S架构的区别和优缺点 C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的...
SQL注入是Internet上最危险、最有名的安全漏洞之一,本书是目前唯一一本专门致力于讲解SQL威胁的图书。本书作者均是专门研究SQL注入的安全专家,他们集众家之长,对应用程序的基本编码和升级维护进行全面跟踪,详细...
当前, xo可以为PostgreSQL,MySQL,Oracle,Microsoft SQL Server和SQLite3数据库生成表,枚举,存储过程和自定义SQL查询的类型。 注意:尽管xo生成的代码具有生产质量,但这不是xo的目标,也不是xo成为“银弹”的...
具有类似SQLServer2008的查询分析器。 便捷工具:搜索表和字段的功能。 便捷工具:自动生成数据库结构文档。 便捷工具:Web项目发布,方便网站日常的升级和更新。 便捷工具:C#到VB.NET代码转换器。
关于xo xo是用于基于数据库架构或自定义查询生成Go代码的命令行工具。...目前,xo可以为PostgreSQL,MySQL,Oracle,Microsoft SQL Server和SQLite3数据生成表,枚举,存储过程和自定义SQL查询的类型。
(7)支持对多种类型数据库生成代码:如SQLServer2000,SQLServer2005,Oracle,OleDb等。 2.数据库管理器。 类似SQLServer2000的管理界面,方便平常在代码编辑的时候想查看数据库的信息,并且可以很直观的查看...
一直以来,数据库架构实践、数据库优化应用等,是备受大家关注的传统话题,本届大会仍将继续邀请一批国内顶尖的技术专家来进行分享,包括Oracle应用实践、MySQL应用实践、SQL Server应用实践等。
(1) 数据库技术:SQL Server, Oracle, DB2, Access, SQL, T-SQL, PL/SQL (2) 软件开发架构:J2SE, J2ME, J2EE, MS.NET (3) 开发语言: Java, C#.NET, J#.NET, VB.NET (4) Ineternet技术:HTML, XML, Web ...
从一个“普通”的Oracle DBA(Oracle数据库管理员)转变为Oracle Applications DBA(Oracle应用程序数据库管理员),有两个内容你必须去弄清楚。第一个内容是如何成为一个Oracle Applications DBA(Oracle应用程序...