1.3.1 新思路:Oracle兼容特性
从DB2 V9.7开始,DB2新引入了Oracle兼容特性。通过Oracle兼容特性,DB2提供了与Oracle相同的并发模式、与Oracle相同的交互模式,以及与Oracle相同的开发模式,这从技术上解决了老张所面临的棘手问题。
1.与Oracle相同的并发模式
从1.1.3节了解到:Oracle的默认隔离级是快照(Snapshot),在这种隔离级下,写入事务不会阻塞读取事务;DB2默认隔离级是游标稳定性(Cursor Stability),但是在这种隔离级下,写入事务会阻塞读取事务。这种不一样的并发模式对应用程序的开发和调试带来了很大的困难。
在DB2 V9.7及以后的版本中,只要在CS隔离级别下将DB参数cur_commit(当前已提交)设置为ON,并发模式就和Oracle完全一样了,如表1-2所示。
表1-2 cur_commit设为ON后DB2 CS隔离级别下的行为
情况
是否阻塞
读取遇到读取
否
读取遇到写入
否
写入遇到读取
否
写入遇到写入
是
关于如何设置DB参数,如何更好地提升DB2的并发性能,请参阅本系列之设计优化篇《DB2设计与性能优化--原理、方法和实践》以及运维篇《运筹帷幄DB2》。
2.与Oracle相同的交互模式
在Oracle中,很多开发人员非常熟练地使用SQL *PLUS和数据库交互,例如,执行DDL脚本、设置控制变量、列格式化输出等。从DB2 V9.7开始引入了DB2 CLPPlus,其实现了和SQL *PLUS一样的交互模式。关于 DB2 CLPPlus,请参阅本书2.3.2节中DB2 CLPPlus的有关内容。
3.与Oracle相同的开发模式
如表1-3所示,从DB2 V9.7开始,DB2 提供了与Oracle一样的开发模式,包括Oracle数据类型、Oracle SQL方言、PL/SQL扩展语言、Oracle内置包以及Oracle JDBC扩展,以实现从Oracle到DB2从容转身。例如Oracle数据库提供的内置包,诸如DBMS_OUTPUT、DBMS_SQL、DBMS_ALERT、DBMS_PIPE、DBMS_JOB、DBMS_LOB、DBMS_UTILITY、UTL_FILE、UTL_MAIL和UTL_SMTP等都在DB2中实现了。
表1-3 DB2提供的Oracle兼容模式
Oracle
DB2
Oracle数据类型
支持
Oracle SQL方言
支持
PL/SQL扩展语言
支持
Oracle内置包
支持
Oracle JDBC扩展
支持
下面我们重点讲述一下DB2内嵌的SQL PL和PL/SQL双编译器。如图1-3所示,从DB2 V9.7开始引入了PL/SQL支持,其实现原理是在DB2引擎内部包含了两个编译器:SQL PL编译器和PL/SQL编译器。这两个编译器产生公共代码,公共代码在DB2 SQL统一运行时引擎内运行。另外,我们也可以看出:IBM Optim开发工具也和运行时引擎有机地整合在了一起,以更好地支持应用开发的需要,这样应用开发人员就可以方便地开发和调试PL/SQL代码了。
图1-3 DB2内置PL/SQL编译器
那么,DB2通过内嵌PL/SQL编译器的方式实现原生态地支持PL/SQL语言,会带来什么好处呢?SQL PL编译器是为了支持一直专注于DB2 SQL PL的开发者;PL/SQL编译器提供了Oracle兼容模式支持,用以满足转用DB2的Oracle开发者的需要。这是一个巨大的进步,它使得使用PL/SQL语言专为Oracle数据库编写的应用可以无缝迁移到DB2数据库。具体来说,表现在以下三点:
开发人员可以继续选择自己最熟悉的语言进行开发,这为熟悉PL/SQL语言的开发者带来了非常大的便利。
应用开发商只需要编写一套PL/SQL源代码,就可以同时支持Oracle和DB2。
统一运行时引擎保证PL/SQL和SQL PL具有相同的性能。
【责任编辑:云霞 TEL:(010)68476606】
点赞 0