热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

加速Pro*C应用程序到DB2嵌入式SQLC的迁移

作为DB2中的Oracle兼容性的持续增强的一部分,自DB2Linux,UNIX,andWindows(LUW)9.7fixpack5版本起,DB2中受支持的OraclePro*C特性的数量开始增加。随着DB2V10.1中相关特性的不断增加,迁移现有Pro*c应用程序成为

作为 DB2 中的 Oracle 兼容性的持续增强的一部分,自 DB2 Linux, UNIX, and Windows (LUW) 9.7 fixpack 5 版本起,DB2 中受支持的 Oracle Pro*C 特性的数量开始增加。随着 DB2 V 10.1 中相关特性的不断增加,迁移现有 Pro*c 应用程序成为

本文中的技巧和技术有助于加速 Pro*c 的迁移。文中的所有内容都基于一些实时迁移项目。

嵌入式 SQL 是执行嵌入在宿主语言应用程序中的 SQL 语句的一种方式。嵌入式 SQL 应用程序首先连接到,然后执行这些嵌入式 SQL。这些 SQL 可以动态执行,也可以静态执行。最常用的宿主语言是 C 和 C++。在可以编译应用程序之前,构建嵌入式 SQL 应用程序涉及两个主要步骤:PREP(或 PRECOMPILE)和 BIND。

命令 PREP 用于读取源代码、解析嵌入式 SQL 并将它转换成 DB2 运行时服务 API 调用,然后将输出写入一个新的源文件中。BIND 用于将应用程序中的 SQL 语句绑定到目标数据库。默认情况下,绑定操作是 PRECOMPILE 步骤自身完成的,但也可以将它扩展为单独的一个步骤。

完成绑定后,就生成了针对 SQL 语句的访问计划,并将这些计划存储在目标数据库内的一个包中。完成 PRECOMPILE 和 BIND 步骤之后,就可利用特定于宿主语言的开发工具对应用程序进行编译和链接。稍后我们会讨论获得嵌入式 SQL 支持的这些步骤的语法。32 位和 64 位的嵌入式 SQL 应用程序都可以利用嵌入式 SQL 源代码进行开发。在 Oracle 数据库中,基于 C/C++ 的嵌入式 SQL数据库应用程序支持是 Pro*C/C++;在 DB2 LUW 中,则为嵌入式 SQL C/C++。

在本文当中,我们将了解嵌入式 SQL C/C++ 和 Pro*C/C++ 之间的主要差别,但我们会重点介绍将基于 Pro*C/C++ 的应用程序从 Oracle 迁移到 DB2 LUW 的一些技巧和技术。请参阅最新的 DB2 LUW 文档,了解目前受支持的特性。

DB2 上的 Oracle 兼容性支持

通常,将应用程序从一个 RDBMS 迁移到另一个 RDBMS 非常困难。但是,自 DB2 LUW 9.7 fixpack 5 版本起,增加了一些新的 SQL 和 PL/SQL 功能,这些功能提高了从 Oracle 数据库迁移到 DB2 的速度。在最新的 DB2 LUW(DB2 LUW 10.1)版本中,这些功能得到了进一步的增强。

对这些功能的支持是原生支持。DB2 为数据类型、标量函数、包、语言元素、内置包和 PL/SQL 过程语言提供了原生支持。通过本地支持,在 DB2 引擎中,能够采用与其他 DB2 原生语言元素相同的完整性和效能级别提供对这些功能的支持。这样,就可以利用 DB2 提供的原有速度和效率来执行它们。Oracle 的兼容特性消除了转换大多数 Oracle 数据库对象(包括 PL/SQL)的需求,并使得将为 Oracle 编写的应用程序迁移到 DB2 的任务变得更轻松。

要启用一个或多个 DB2 兼容特性,则需要使用 DB2_COMPATIBILITY_VECTOR 注册表变量。该变量是一个十六进制值,该变量中的每个位代表一个 DB2 兼容特性。利用这个向量,可以选择启用特定功能(通过设置 DB2_COMPATIBILITY_VECTOR 的特定位),也可以启用所有特性,将这个注册表变量设置为 ORA。可以通过 db2set 设置此变量,建议在创建数据库之前设置该变量,并在数据库生命周期期间持续保持所选的兼容水平。关于该变量的详细讨论超出了本文的讨论范围。

Pro*C/C++ 支持

如上所述,DB2 LUW 提供了许多兼容特性,这些特性有助于将基于 Pro*C/C++ 的应用程序从 Oracle 迁移到 DB2 中的嵌入式 SQL C/C++。通过将 PRECOMPILE 的选项 COMPATIBILITY_MODE 设置为 ORA,可以启用这些兼容特性。例如,对于名为 myapp1.sqc 的文件,可以通过运行 db2 PRECOMPILE myapp1.sqc BINDFILE COMPATIBILITY_MODE ORA 命令来启用兼容特性。

Oracle Pro*C/C++ 和嵌入式 SQL C/C++ 的主要区别

让我们来查看一下 Oracle Pro*C/C++ 和嵌入式 SQL C/C++ 之间的一些主要差别:

  • DB2 中的静态包支持:在 DB2 LUW 中,可以采用两种方式执行 SQL 语句:静态和动态。对于静态执行,需要在 PRECOMPILE(预编译)时了解语句语法(必须在 PRECOMPILE 时了解 SQL 语句中引用的列名称和表)。PRECOMPILE 为 SQL 语句生成访问计划,并将其存储在数据库中定义的包中。Oracle Pro*C/C++ 语句无法静态执行上述语句。Oracle Pro*C/C++ 仅支持动态 SQL 语句执行。动态执行的 SQL 语句是已经构建/准备好的,在运行时执行。由于静态执行的性能优于动态执行,因此,DB2 LUW 中的嵌入式 SQL 应用程序的表现非常良好。
  • 包维护:为静态执行创建的包存储在数据库中,所以,如果嵌入式 SQL 语句中发生任何变化,都需要重新绑定包。仅对静态 SQL 执行有这样的要求,对动态 SQL 执行没有这样的要求。如果存储在包中的 SQL 语句中的数据库对象引用发生了改变,那么该包需要重新绑定。
  • PRECOMPILE 阶段需要数据库连接:在 PRECOMPILE 阶段,需要数据库连接。

推荐阅读
  • 本文介绍了编程语言的基本分类,包括机器语言、汇编语言和高级语言的特点及其优缺点。随后详细讲解了Python解释器的安装与配置方法,并探讨了Python变量的定义、使用及内存管理机制。 ... [详细]
  • 在开发板的启动选项中看到如下两行:7:LoadBootLoadercodethenwritetoFlashviaSerial.9:LoadBootLoadercodethenwri ... [详细]
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • 本文探讨了SSD购买后是否需要进行4K对齐的问题,并详细解释了4K对齐的原理及其重要性。通过对比机械硬盘与固态硬盘的结构,文章深入分析了4K对齐对SSD性能的影响,并提供了具体的对齐方法。 ... [详细]
  • 本文将详细探讨PHP中C的作用,并对比其他编程语言如Java和C的特点及其适用场景。 ... [详细]
  • 一关于t1表和testtb的索引设计二把主键放到二级索引的后面,会否占据更多的物理空间?三InnoDB的主键该如何选择,业务ID和自增 ... [详细]
  • 本文详细介绍了如何在Windows操作系统中通过Samba服务访问Red Hat Linux中的资源,包括配置Samba服务器、设置工作组名称、添加用户和共享目录等步骤。 ... [详细]
  • MySQL 5.7 服务端在 Windows 上的安装与配置
    本文详细介绍了在 Windows 系统上安装和配置 MySQL 5.7 服务端的方法,包括 my.ini 配置文件的设置、初始化数据库、启动服务以及设置用户权限等步骤。 ... [详细]
  • 大数据领域的职业路径与角色解析
    本文将深入探讨大数据领域的各种职业和工作角色,帮助读者全面了解大数据行业的需求、市场趋势,以及从入门到高级专业人士的职业发展路径。文章还将详细介绍不同公司对大数据人才的需求,并解析各岗位的具体职责、所需技能和经验。 ... [详细]
  • Java毕业设计项目:“传情旧物”网站(含源码与数据库)
    本项目介绍了如何配置和运行“传情旧物”网站,包括所需的技术栈、环境配置以及具体的操作步骤。 ... [详细]
  • 本文为初学者提供了一条清晰的学习路线,帮助他们逐步成长为优秀的Web开发人员。通过十个关键步骤,涵盖从基础到高级的各个方面,确保每位学习者都能找到适合自己的学习方向。 ... [详细]
  • 8个IDC大数据基础定义解析丨IDC
    本文针对IDC数据行业相关名词术语进行解析,分为4组相关概念,希望大家读完 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 本文讲述了一位80后的普通男性程序员,尽管没有高学历,但通过不断的努力和学习,在IT行业中逐渐找到了自己的位置。从最初的仓库管理员到现在的多技能开发者,他的职业生涯充满了挑战与机遇。 ... [详细]
  • 理解GiST索引的空间构造原理
    通过空间思维解析GiST索引的构建方式及其在空间数据检索中的应用。 ... [详细]
author-avatar
Wobu想说
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有