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

推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • CMake跨平台开发实践
    本文介绍如何使用CMake支持不同平台的代码编译。通过一个简单的示例,我们将展示如何编写CMakeLists.txt以适应Linux和Windows平台,并实现跨平台的函数调用。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
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社区 版权所有