EnterpriseDB与Oracle的兼容性- james long 博客- JavaEye技术网站

使用 Oracle 数据库的企业一般都会对开源数据库感兴趣,主要有以下三方面的原因:首先,通过部署开源数据库,这些企业可以显著降低数据库的总拥有成本(TCO),有时降幅甚至可高达90%;其次,它们通常可以从其他厂商(非Oracle)处获得更大的许可灵活性以及业务便利;{zh1},这些企业会发现其他一些厂商更渴望为它们提供出色的技术支持以及{zj0}的客户体验。然而,许多企业xx于将开源数据库用于一些简单的应用程序(如那些支持网站的应用程序),因为这些企业普遍认为开源数据库可能不够稳定、可靠或者可扩展性不够高,因而无法满足它们的关键任务应用需求;另外,企业可能还觉得更改数据库的代价(例如,与应用程序重新编码、人员重新培训相关的成本)可能会超出预期的节省目标。
为了满足这些企业的需求,EnterpriseDB企业版提供了最与众不同的功能:它能够运行针对 Oracle数据库编写的应用程序,而无需更改应用程序代码。EnterpriseDB 的数据库可以与 Oracle 的数据库兼容,因而使企业可以轻松利用对 Oracle 产品的现有投资,充分享受开源数据库带来的巨大益处。能够基于 EnterpriseDB 数据库来运行现有 Oracle 应用程序,就可以避免在通常情况下,将应用程序从 Oracle 数据库迁移到其他数据库时所需的代价高昂、耗时且充满风险的重新编码工作。另外,企业的 Oracle DBA 和数据库开发人员可以xx适应 EnterpriseDB 数据库环境,因而无需进行代价高昂的重新培训和重新招聘。
在位于英国牛津附近的企业性能中心(Enterprise Performance Enter),EnterpriseDB 数据库性能专家们对EnterpriseDB企业的性能进行了优化,使其运行速度比EnterpriseDB基础版(PostgreSQL)快50%以上。因此,能过EnterpriseDB我们可以获得一个具有高度可扩展性的数据库解决方案,该解决方案极其经济高效,令同类产品无法企及。实际上,许多客户反映,将其现有针对 Oracle 数据库的应用程序迁移到 EnterpriseDB 数据库后,应用程序性能与基于 Oracle 数据库运行的同样的应用程序相同,甚至更快。

  • SQL语义兼容


EnterpriseDB 数据库与 Oracle 数据库能够相互兼容的基础在于,前者能够识别和准确执行用 Oracle SQL 语言表示的数据库查询。另外,EnterpriseDB 数据库支持与 Oracle 数据库相同的数据类型、函数和变量,并可解决 Oracle 数据库与 EnterpriseDB 数据库在处理字段别名、公共同义词、序列以及 DUAL 表方面的不兼容问题。如:

  • 数据类型

CHAR、VARCHAR、VARCHAR2、NUMBER、CLOB、BLOB、DATE等

  • 数据库函数

TO_CHAR、TO_DATE、SYSDATE、DBMS_XXX等

  • 字段别名

与Oracle相同,在EnterpriseDB企业版中设定"字段别名"时可心省略"AS"关键字

  • SEQUENCE序列

与Oracle相同,可通过seq_name.CURRVAL 和 seq_name.NEXTVAL进行操作

  • DUAL表

EnterpriseDB企业版支持DUAL表,与Oracle数据库实现SQL语句兼容
等等……

  • PL/SQL过程语言兼容

EnterpriseDB企业版包括一种称为 EDB-SPL 的过程语言,该语言与 Oracle 的 PL/SQL 过程语言相匹配。与 PL/SQL 类似,SPL 是一种高效、块状结构的过程编程语言,可用于编写自定义过程、函数和触发器。EnterpriseDB SPL 和 Oracle PL/SQL 之间极大的相似性还使 EnterpriseDB企业版数据库能够支持 Oracle 式的过程包、函数或变量。

?

  • 块结构

与 PL/SQL 一样,SPL 过程、函数和触发器具有同样的块结构。一个块由最多三部分组成 - 一个可选的声明部分、一个强制可执行程序部分以及一个可选的异常部分。一个块至少必须有一个可执行程序部分,该部分包含一个或多个介于关键字 BEGIN 和 END 之间的过程语句。

?

  • 数据库包

EnterpriseDB企业版数据库支持 Oracle 式的数据库包。包是一种构造,用于构建可复用代码和采用面向对象的设计技术。包是一组通过数据库中通用包名称来识别的相关数据库对象的集合。这些数据库对象包括过程、函数和变量。
与Oracle数据库一样,EnterpriseDB企业版数据库包有以下两个主要部分组成:
●?? ?包规范:这是包含公共过程、函数和变量的公共接口,这些过程、函数和变量可以在包外由其他程序和应用程序引用。
●?? ?包体:包体包括在包规范中声明的过程和函数的实施逻辑,以及对不能由包以外的其他程序和应用程序访问的私有变量、过程和函数的声明以及逻辑。

  • 过程

EnterpriseDB SPL 中的过程与 Oracle PL/SQL 中的过程使用方式相同。过程是一些可作为单独程序语句调用的程序。调用的时候,过程可以有选择地以输入参数的形式接收来自调用程序的值,并有选择地以输出参数的形式向调用程序返回值。通过在 EnterpriseDB 数据库中输入过程代码,可将过程存储到数据库中。然后,可以通过其他程序调用该过程。

  • 函数

EnterpriseDB SPL 中的函数与 Oracle PL/SQL 中的函数使用方式相同。函数是可作为表达式调用的程序。计算完成后,函数会返回一个值,该值在该函数所嵌入的表达式中被替代。函数可以有选择地以输入参数的形式采用来自调用程序的值。除了返回值以外, 函数还可以有选择地以输出参数的形式向调用程序返回其他值。然而,在函数中使用输出参数并非一种值得提倡的编程方法。函数可用于语句中任何会出现表达式的地方。

  • 触发器

EnterpriseDB SPL 中的触发器与 Oracle PL/SQL 中的触发器使用方式相同。触发器是一个代码块,该代码块具有给定的名称,与表相关联,被存储在数据库中。当发生某些针对表的事件时,代码块即被执行。当代码块被执行时,即形象地称触发器被"触发"。
与 Oracle 数据库类似,EnterpriseDB企业版支持行级触发器和语句级触发器。对于受触发事件影响的每一行,行级触发器将被"触发"一次。与此相对应,对于每条触发语句,语句级触发器将触发一次,而无需考虑受触发事件影响的行的数量。
和 Oracle 数据库一样,对于语句级触发器,可以在触发语句之前或之后由 EnterpriseDB企业版执行触发器代码块,对于行级触发器,可以在受触发事件影响之前或之后由 EnterpriseDB企业版执行触发器代码块。

  • 匿名块

在 EnterpriseDB企业版数据库中,过程代码块可以像在 Oracle 数据库中一样,被方便地执行。这类代码块称为匿名块。匿名块是未命名的,并且未被存储在数据库中。可以从应用程序缓冲区执行和删除匿名块,除非重新在应用程序中输入块代码,否则匿名块不可被再次执行。对于快速、一次性程序(如测试程序),匿名块非常有用。

  • 数据词典视图

EnterpriseDB企业版提供了针对其数据词典的视图,这些视图与通常使用的 Oracle 数据词典视图非常像。这些视图使熟悉 Oracle 数据库的数据库管理员和开发人员能够快速查找词典信息,而无需了解新的数据词典格式。

  • SQL*Plus工具兼容

EDB*Plus是一个工具程序,它提供一个命令行方式的用户界面,用于访问EnterpriseDB企业版。在EDB*Plus中,可以使用标准SQL命令,SPL匿名代码块,和EDB*Plus命令。EDB*Plus 命令与Oracle 的SQL*Plus命令兼容,并且提供各种功能,包括:
●?? ?查询某些数据库对象
●?? ?执行存储过程
●?? ?对SQL命令的输出结果进行格式化
●?? ?执行批量处理脚本
●?? ?记录输出

  • SQL*Load快速写入兼容

EDB*Loader的一些特性可以改善加载文本文件(text)到数据库的性能。EDB的标准加载命令是"COPY",但是它有一些重要的限制使得加载的时间明显增加。
{dy}个限制就是"COPY"命令不能处理固定长度格式的文件(fixed width file formats)。但是许多文件都是这种格式的,要使用EnterpriseDB数据库,这些文件就必须被转换成不受限制的文件格式,这就导致了文件从底层被重写了两次。
另一个主要的限制就是"COPY"命令缺少错误处理机制。当使用"COPY"命令时,如果要加载文件中的某一行是不合法的,则所有的行都将被抛弃,并且整个文件都要被重新加载。
EDB*Loader可以将不合法的记录转移到discard文件中,从而使得发生错误时,整个文件的处理仍可继续。这样用户可以在批量加载处理完成后,单独地检查discard文件中的问题数据。
然而,EDB*Loader{zj1}戏剧性的功能还是它的直接路径加载(Direct Path load),直接路径加载忽略了影响批量处理性能的大量处理步骤,因此性能更好,但它也需要遵循完整的原子性操作,也即要么全做,要么一点也不做。
直接路径加载利用控制文件中定义的列的描述信息来解析输入的行,然后将文件中的数据转换为列的数据类型,并创建一个内部数据结构。之后,这个数据结构将直接被格式化成EnterpriseDB数据库的数据块。新创建的块又直接写入到数据目录中,从而略过了许多处理过程,因此能够更快地加载。
?

Copy加载和直接路径加载对比

  • DBLink链接兼容

一个数据库链接(Database Link)定义了从一个数据库服务器到另一个数据库服务器的通信信道。使用数据库链接的好处是:它允许用户能够访问一个远程数据库的对象,这样,该用户便被绑定到远程对象的用户权限集中。
数据库链接同时也是分布式数据库的基础,应用程序可以同时访问分布式环境中的多个数据库。例如,一个客户端可以从本地库中发起一个简单的查询,而连接远程数据库的表。数据库的位置和使用的平台对于客户端应用程序来说是透明的。
?

数据库链接

  • 应用开发驱动兼容

EnterpriseDB企业版支持所有用于开发Oracle数据库应用程序的最常用的编程语言。
编程语言?? ?支持的驱动程序
C?? ?√
C++?? ?√
JDBC?? ?√
ODBC?? ?√
Perl?? ?√
PHP?? ?√
Ruby?? ?√
.NET?? ?√

{zx1}评论

  • lib 写道软件的质量、进度、费用是项目管理永恒的话题!!英雄所见略同,所以,建议 ...
    -- by

  • 软件的质量、进度、费用是项目管理永恒的话题!!
    -- by

  • ivorytower 写道xiaojing3517 写道我的BLOG很少人评论和发 ...
    -- by

  • xiaojing3517 写道我的BLOG很少人评论和发言,欢迎更多拍砖!这一句是 ...
    -- by

  • 我的BLOG很少人评论和发言,欢迎更多拍砖! 这一句是重点
    -- by
郑重声明:资讯 【EnterpriseDB与Oracle的兼容性- james long 博客- JavaEye技术网站】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——