QUOTE:
Visual Studio 与 Oracle 的集成
现在我们再来看 Oracle 与 Visual Studio 的集成情况
Oracle Explorer
Oracle 提供 Oracle Explorer 供 Visual Studio 用户浏览 Oracle 数据库之用。开发人员可以查看标准的数据库对象,如表、视图、存储过程、触发器等。此外,开发人员还可以查看某些特定于 Oracle 的对象,如同义词和包。可以单击 Database Diagrams 节点并查看 Oracle 数据库的实体关系图。可以使用表设计器在 Oracle 中创建表结构。请参见图 11。
也可以使用 Oracle Explorer 来启动一个简单的编辑器,从而处理存储过程、触发器和函数。该编辑器支持上下文敏感的帮助;可以在 PL/SQL 存储过程中突出显示某一工作,并按 F1 来启动帮助。Oracle Explorer 允许通过拖放存储过程、视图或表来生成数据库驱动的代码。请参见图 12。
项目支持
Oracle 10g 没有等效于 SQL Server 项目的组件,因此无法通过 Visual Studio 将所有不同的数据库对象作为一个相干整体来管理。Oracle 不提供应用程序开发模板,因此无法通过 Visual Studio 将数据库对象自动部署到数据库。缺少 Visual Studio 项目支持是 Oracle 与 Visual Studio 集成的主要缺点之一,这将大大降低开发效率。
调试存储过程
Oracle 与 Visual Studio 的集成不涉及通过 Visual Studio 来调试存储过程。开发人员必须使用完全不同的工具如 Jdeveloper 来调试 PL/SQL 存储过程,或者采用拙笨的方法,如使用跟踪文件。调试是应用程序开发的一个重要组成部分,没有集成的最先进的调试器是 .NET 框架开发人员的另一个巨大缺憾。
BI 组件的集成
Oracle 也提供了一个重要的 BI 平台,它包括:
• 用于分析的 Oracle OLAP Option
• 用于数据挖掘的 Oracle Data Mining Option
• 用于设计和生成报表的 Oracle Reports
• 用于 ETL 的 Oracle Warehouse Builder
• 用于开发 OLAP 应用程序的 Oracle BI Bean
除了另收费外,Oracle 的 BI 平台对开发人员来说的最大缺点就是它们不与 Visual Studio 集成。BI 应用程序的首选开发框架是 JAVA 而不是 .NET 框架。此外,Oracle 为开发和管理 Jdevelopers、Oracle Discoverer 和 Oracle 企业管理器等 BI 组件所提供的工具都是基于 HTML 的,无法与 Visual Studio 集成。
与 Visual Studio 的集成:结束语
Oracle 在与 Visual Studio .NET 集成中所作的决策是正确的。当前的集成是向正确方向迈进中的一步,但还没有达到 SQL Server 2005 和 Visual Studio 之间深入而全面的集成水平。SQL Server 2005 和 Visual Studio 是当今市场上数据库和 IDE 的最佳组合。这两个产品的无缝集成实践了 Microsoft 的“Better Together”宣言。
QUOTE:
基于 SOA 的应用程序开发
XML 支持比较
XML 是作为许许多多现代应用程序数据交换事实上的标准而出现的。它也是基于 SOA 的应用程序和 Web 服务的一项核心技术。数据库将必须支持这些应用程序,使它们能够存储、查询和更新 XML 文档。Oracle 和 SQL Server 都为开发基于 XML 的应用程序提供全面支持。
固有的 XML 类型和 XQuery
Oracle 和 SQL Server 都有一个固有的 XML 类型,也就是说它们实际上都“了解”每一列包含有一个 XML 文档。这意味着:
• 在将 XML 文档存储到在数据库中以前,它们将参照某一 XML 架构验证 XML 文档。
• 允许使用业界通用的 XQuery 查询语言以及 XPATH 来查询所存储的 XML 文档。
请注意,Oracle 10g Release 1 不支持 XQuery。Oracle 宣称它们将在 Oracle 10g Release 2 中支持 XQuery。
不过,这两个数据库所提供的 XML 支持是有些差别的。
索引
索引对于快速执行查询是必不可少的。SQL Server 2005 支持 XML 字段的元素、值和路径上的 B*Tree 索引。索引可大大加速查询执行。SQL Server 2005 还支持其他索引,因此可以通过 PATH 索引、PROPERTY 索引和 VALUE 索引加快其他类型的 XML 数据查询。Oracle 仅提供常规文本索引和函数索引,也就是没有专门针对 XML 的索引。
更新 XML
目前所定义的 XQuery 仅支持 XML 内容的读/获取。它没有定义存储在数据库中的 XML 的更新方法。Oracle 提供两种方法来处理这一问题:
• 替换整篇 XML 文档:如果 XML 文档是作为文本对象存储在数据库中,则 Oracle 允许用新文档替换整篇文档。如果 XML 文档很大且只更新一小部分,则这种方法的效率很低。
• 分解 XML 文档:在这种方法中,必须将 XML 文档分开并作为对象-关系对象存储在数据库中。然后可以使用标准的 SQL 调用来更新 XML 文档的适当部分。这就要求开发人员必须知道 XML 文档映射到基础的对象-关系对象的方式。
显然,这两种方法都有缺点。
SQL Server 2005 是通过扩展 Xquery 以包含更新操作来处理这一问题的。SQL Server 2005 提供了一种用于添加和删除子树以及更新标量值的语言。这使得开发人员得以更轻松、更高效地处理 SQL Server 2005 XML 数据类型。
XML 架构集合和架构演变
SQL Server 允许在同一 XML 列中存储多个不相关的 XML 文档。这一功能是通过创建由一个或多个 XSD 架构组成的 XML SCHEMA COLLECTION 来实现的。SQL Server XML 架构集合限定了可以存储在 XML 列中的 XML 文档类型。用户可以将新的顶级 XML 架构组件和顶级元素添加到现有的架构命名空间中。
此功能提供了一种得体的 XML 数据迁移方式。如果这些架构中有的随着时间的推移而演变了并创建了新的架构命名空间,则可以将演变的 XML 架构添加到同一 XML 架构集合中。XML 列中的现有 XML 实例像以前一样继续存在,同时符合新架构命名空间的实例也可添加到该 XML 列中并被索引。
Oracle 没有可比的功能。Oracle 只支持单根的 XML 实例。在 Oracle 中,可能要使用一种“伞式”架构,在这种架构中必须修改顶级元素类型来适应演变的架构。只有架构通过派生进行演变时,它才不需要任何更改。因此在 Oracle 中架构演变是受限的和非统一的。
Web 服务支持比较
SQL Server 2005
SQL Server 2005 为 Web 服务提供了固有支持 。它可以充当 Web 服务提供者,也可以充当 Web 服务使用者。
Web 服务提供者:
SQL Server 提供了一种非常简单易用的机制,用以支持外部应用程序使用标准协议(如 SOAP)通过 HTTP 以 Web 服务的形式调用存储过程、Transact-SQL 语句和用户定义的函数。通过提供 SOAP/HTTP 访问,即使是零资源占用的客户程序(如 Web 浏览器)也能访问数据库,因为客户设备上不再需要 Microsoft 数据访问组件(MDAC)堆栈。
实现对 SQL Server 的 SOAP/HHTP 访问对于开发人员来说非常容易。他们只需创建一个 HTTP 端点并指定该端点公开的所有数据库对象。其余事情都可交给 SQL Server 来做。SQL Server 集成了身份验证和安全特性,因此只有授权用户才能调用存储过程。SQL Server 利用了 Microsoft Windows Server™ 2003 的内核模式 https.sys 驱动程序,因此无需安装 IIS。这简化了管理。
Web 服务使用者
由于 SQL Server 集成了 .NET CLR,因此可以从数据库内部轻松地调出到外部 Web 服务。
加上 Visual Studio,SQL Server 是一个用于开发和部署基于 SOA 的应用程序的功能强大的平台。
QUOTE:
Oracle Database 10g
Oracle Database 也可以充当 Web 服务提供者和使用者。Oracle 提供了一个称为 JPublisher 的工具,用于简化通过 Java 进行的数据库访问和创建以数据库逻辑为中心的 Web 服务。以下是对该工具的的一个简述。
Web 服务提供者
JPublisher 可以生成 Java“包装”类、各种数据库对象如 PL/SQL 包、存储过程、SQL 查询和服务器端 Java 类。这些 Jpublisher 生成的 java 类可通过 Oracle Application Server Web Services Assembler 工具公开为 Web 服务。
Web 服务使用者
Oracle 提供两种方法从数据库内部调出到 Web 服务。第一种方法是手动使用 SOAP。第二种方法是使用 Jpublisher 创建 Java 代理类。生成的代理类可以通过 Java 服务器端类或 PL/SQL 调用。
差别
尽管 Oracle 10g 和SQL Server 2005 都能用作 Web 服务使用者和提供者,但二者之间也有差别,它们对于 .NET 平台开发人员来说具有非常重要的意义。这些差别包括:
• Oracle Database 10g 需要一个附加产品,即 Oracle 应用服务器,以便生成和使用 Web 服务。Oracle 应用服务器必须单独购买。这样就延长了学习曲线,降低了开发效率。如前所述,SQL Server 不需要 IIS 或任何附加产品。
• 要使用 Oracle 10g 的 Web 服务功能,开发人员必须了解 Java 和/或 PL/SQL。显然这对于 .NET 平台开发人员来说毫无意义。
• Oracle 的 Web 服务功能没有通过任何方式与 Visual Studio 集成。Oracle 为此提供的主要 IDE 是 JDeveloper。再次重申,这乃是 .NET 开发人员面对的一个重大障碍。
异步消息传递支持比较
分布式自主程序执行单元之间可靠的异步通信是开发基于 SOA 的应用程序所必需的一个关键技术。传统上都是依靠消息队列系统,如 IBM 的 MQ Series(现在称为 WebSphere MQ)。比较而言,将消息队列系统与数据库集成有许多优点。因此 Oracle 和 SQL Server 都将可靠的异步消息队列分别集成到了 Oracle 10g 和 SQL Server 2005 中,分别为 Oracle Advanced Queuing 和 SQL Server Service Broker 。本文不对它们的特性和功能进行深入探讨。下面是 Oracle Advanced Queuing 和 SQL Server Service Broker 所共有的主要功能的简明摘要。
• 二者都能保证消息一次送达目的地。
• 二者都允许发送方和接收方共存于同一数据库、同一计算机中,或者分布在网络上。
• 二者都使用队列来永久存储消息。队列作为表完整地存储在数据库中。二者都提供对队列的 SQL 访问。二者都能将消息无限期地保留在队列中。
• 二者都实现了消息队列系统与数据库的集成,因此无需外部事务协调程序来协调队列系统和数据库。
差别
虽然两个数据库都提供了类似的核心功能,但 SQL Server 通过提供更高级别的抽象使 Service Broker 能够轻松用于临时的应用程序开发人员。顾名思义,Oracle Advanced Queuing 提供一个队列作为主要的手段。所有使用 Oracle Advanced Queuing 的 API 都是基于队列操作的,如入队和出队。其主界面是 JMS,即 Java 消息服务。
SQL Server Service Broker 提供了一组更高级别的抽象,如对话、协定和服务。开发人员不必处理低级队列操作,如果他们不想的话。Service Broker 还支持服务程序自动激活,而 Oracle Advanced Queuing 不提供这一功能。
Advanced Queuing 提供的许多功能 Service Broker 目前还不支持,如发布-订阅通信模式、在发给订户途中转换消息的功能和管理传送时间表的功能。
事件通知服务比较
SQL Server 2005
Microsoft SQL Server 通知服务使开发人员能够轻松开发和部署用于生成和向用户发送通知的应用程序。通知是个性化的及时消息,可以发送给多种设备。
通知反映了订户的意愿。订户通过输入订阅来表达对信息的兴趣。例如,“当 Adventure Works 的股票价格达到 70.00 美元时通知我,”或者“当我团队正在编写的策略文档更新时通知我。”
通知可能在触发事件发生时生成并发送给用户,也可能按照用户预先指定的时间表生成和发送。用户的订阅指定了生成和发送通知的时间。
通知可以发送给多种设备。例如,可以发送给用户的移动电话、个人数字助理 (PDA)、Microsoft Windows Messenger 或电子邮件帐户。因为这些设备会经常伴随用户,所以这些通知最适合于发送高优先级信息。
QUOTE:
Oracle Database 10g
Oracle 没有可与 SQL Server Notification Services 直接相比的功能。若要获得同等功能,开发人员必须对来自 Oracle 数据库的若干技术(如 Oracle Advanced Queuing、作业调度和触发器)以及来自 Oracle 应用服务器的技术(如 Oracle 应用服务器无线系统) 进行组合。Oracle Advanced Queuing 有一个规则引擎,它可以将事件和订户进行匹配,Oracle 应用服务器无线系统也能够像 SQL Server 通知服务那样使用无线和手持设备将事件传送给订户,但这需要开发人员集成这些系统,因此交付这样一个系统会花费较多的时间和金钱。
Query Notification Services 比较
SQL Server 2005
SQL Server 2005 引入了通知支持功能,以支持 SQL Server 查询 。利用该支持功能可以将命令发送给 SQL Server,并在再次执行这条命令所得到的结果不同于最初结果的情况下请求生成通知。这是通过使用依赖项对象来实现的,该对象会检测基础数据的更改时间。通过任一客户端 API 如 ADO.NET、OLE DB、Open Database Connectivity (ODBC)、Microsoft Active Data Objects (ADO) 或 SOAP 发送给服务器的命令都可能包含一个需要通知的标记。对于作为请求一部分执行的每一条语句,服务器都会创建一个“通知订阅”,它会针对请求中包含的每一条语句激发一次。通知是通过一个应用程序可以轮询的 SQL Service Broker 队列来传送的,并且使用激活服务或在通知可用时便作出响应的分块语句。查询通知对实现诸如数据库驱动的 Web 站点之类的应用程序中的结果缓存是非常有用的。
Oracle Database 10g
Oracle 的 ADP.NET 版本是 Oracle Data Provider for .NET (ODP)。ODP 没有等效于 SQL Server Query Notification 的任何功能和产品。若要实现类似功能,必须将若干产品进行组合,如 Oracle Web 缓存 和 Oracle Java 对象缓存 ,二者都是独立的产品,并作为 Oracle 应用服务器的一部分来销售。这两种产品都不与 Visual Studio .NET 集成。顾名思义,Java 对象缓存只对 Java 有用,因此对于 .NET 平台开发人员毫无意义。
比较总结
关于作者
Mitch Ruebush 是 ING DIRECT, fsb 的一名 .NET 体系结构设计师,同时也是 MCSD、MCDBA、MCSE、MCT。He 是一名 Microsoft Regional Director 和 Visual C# MVP,一直从事基于各种 Windows 和 UNIX 平台的开发工作,具有 15 年的工作经验。他曾在 Microsoft DevDays、Microsoft Security Summit、Visual Studio .NET 2002 Launch、用户组会议和 MSDN 网络广播上发表演讲。他目前认为 C# 和 .NET 开发是最受欢迎的开发平台,但他也在 Windows 和 Linux/UNIX 上用 C、C++、Java、VB、VB.NET、PL/SQL 和 T/SQL 设计和开发解决方案。他还是 MCAD/MCSD:Visual Basic .NET Windows and Web Applications Study Guide、MCAD/MCSD:Visual Basic .NET XML Web Services and Server Components Study Guide 和 MCSE:Windows Server 2003 Network Security Design Study Guide for Sybex 的合著者。
本文是与 A23 Consulting 合作撰写的。
版权说明
本文为初步文档,在文中所述软件的最终商业版本发布之前,可能会有重大改变。
本文所含信息代表了 Microsoft 公司在本文发布时的观点。因为 Microsoft 必须顺应不断变化的市场条件,这些信息不应被视为 Microsoft 方面的承诺,同时 Microsoft 也不能保证本文发布之后其他任何信息的准确性。
本白皮书仅供参考。MICROSOFT 对本文档中的信息不提供任何形式的(包括明示或暗示的)保证。
用户有责任遵守所有适用的版权法。在版权法所赋予权利的前提下,未经 Microsoft Corporation 明确的书面许可,任何人不得将本文复制、存储或引入可检索系统,或是以任何形式或通过任何方式(电子、机械、影印、录制或其他方式)传播本文的任何部分。
本文主题可能涉及 Microsoft 的专利、专利申请、商标、版权或其它知识产权。除非获得 Microsoft Corporation 明确的书面许可,否则提供本文档并不代表许可您使用这些专利、商标、版权或其他知识产权。
2005 Microsoft Corporation。保留所有权利。
Microsoft、IntelliSense、Visual Basic、Visual Studio 和 Windows Server 是 Microsoft 公司在美国和/或其他国家的注册商标或商标。
本文中提及的实际公司和产品的名称可能是其各自所有者的商标。
[ 本帖最后由 xiaoxinlucky 于 2008-1-22 17:49 编辑 ]