热门标签 | 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 阶段,需要数据库连接。

推荐阅读
  • 如何使用PyCharm及常用配置详解
    对于一枚pycharm工具的使用新手,正确了解这门工具的配置及其使用,在使用过程中遇到的很多问题也可以迎刃而解,文中有非常详细的介绍, ... [详细]
  • Python第三方库安装的多种途径及注意事项
    本文详细介绍了Python第三方库的几种常见安装方法,包括使用pip命令、集成开发环境(如Anaconda)以及手动文件安装,并提供了每种方法的具体操作步骤和适用场景。 ... [详细]
  • 磁盘健康检查与维护
    在计算机系统运行过程中,硬件或电源故障可能会导致文件系统出现异常。为确保数据完整性和系统稳定性,定期进行磁盘健康检查至关重要。本文将详细介绍如何使用fsck和badblocks工具来检测和修复文件系统及硬盘扇区的潜在问题。 ... [详细]
  • 本文探讨了使用C#在SQL Server和Access数据库中批量插入多条数据的性能差异。通过具体代码示例,详细分析了两种数据库的执行效率,并提供了优化建议。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 本文详细介绍了Linux系统中软链接和硬链接的概念、创建方法及其应用场景。通过实例解释了两者的区别,包括如何防止误删文件及软链接在跨文件系统时的优势。 ... [详细]
  • 本文详细介绍了如何在预装Ubuntu系统的笔记本电脑上安装Windows 7。针对没有光驱的情况,提供了通过USB安装的具体方法,并解决了分区、驱动器无法识别等问题。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 本文详细介绍了在 MySQL、SQL Server 和 Oracle 数据库中如何使用分组和排序功能。涵盖了聚集函数的应用、HAVING 子句的作用以及特定数据库中的独特方法,如 SQL Server 的 ROW_NUMBER() 函数和 Oracle 的相关特性。 ... [详细]
  • 本文详细介绍了 iBatis.NET 中的 Iterate 元素,它用于遍历集合并重复生成每个项目的主体内容。通过该元素,可以实现类似于 foreach 的功能,尽管 iBatis.NET 并未直接提供 foreach 标签。 ... [详细]
  • 本文介绍了一种在 MySQL 客户端执行 NOW() 函数时出现时间偏差的问题,并详细描述了如何通过配置文件调整时区设置来解决该问题。演示场景中,假设当前北京时间为2023年2月17日19:31:37,而查询结果显示的时间比实际时间晚8小时。 ... [详细]
  • 云计算的优势与应用场景
    本文详细探讨了云计算为企业和个人带来的多种优势,包括成本节约、安全性提升、灵活性增强等。同时介绍了云计算的五大核心特点,并结合实际案例进行分析。 ... [详细]
  • This pull request introduces the ability to provide comprehensive paragraph configurations directly within the Create Note and Create Paragraph REST endpoints, reducing the need for additional configuration calls. ... [详细]
  • 本文介绍如何在SQL Server中创建动态SQL存储过程,并提供详细的代码实例和解释。通过这种方式,可以更灵活地处理查询条件和参数。 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
author-avatar
无名有名我无名_593
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有