加速Pro*C应用程序到DB2嵌入式SQL 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 阶段,需要数据库连接。

时间: 2024-12-20 15:40:57

加速Pro*C应用程序到DB2嵌入式SQL C的迁移的相关文章

什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,Proc增删改查

 1 什么是Pro*C/C++ 1.通过在过程编程语言C/C++中嵌入SQL语句而开发出的应用程序 2.什么是嵌入式SQL 1.在通用编程语言中使用的SQL称为嵌入式SQL 2.在SQL标准中定义了很多中语言的嵌入式SQL 3.各个厂商对嵌入式SQL的具体实现不同 3.什么是Pro*C/C++ 1.在C/C++语言中嵌入SQL语句而开发出的应用程序. 2.目的:使c/c++这种效率语言称为访问数据库的工具. 4.嵌入式SQL的载体是宿主语言 宿主语言          Pro程序 C/C++

基于嵌入式SQL和C语言多线程的DB2 workload开发

由于程序示例代码的重用性较高,可以大大的提高需要使用这种 DB2 workload 的软件http://www.aliyun.com/zixun/aggregation/18863.html">自动化测试人员,使用 C 语言多线程访问 DB2 的软件开发人员的工作效率. 众所周知,在使用 DB2 数据库的实际生产环境中, 我们会遇到各种各样的应用,例如基于不同的开发语言,基于不同的体系架构或者基于不同的数据库连接方式等等.针对这些不同的 workload, 我们从事 DB2 性能监控工具测

将Siebel 7电子商务应用程序从DB2 UDB V8迁移到DB2 9

本文将引领您完成 Siebel 7 数据库环境从 DB2 UDB Version 8 到 DB2 9 的升级.您将了解一 些必要的步骤以及完成迁移过程所需的工具和命令. 本文首先介绍了 DB2 9 中的一些新特性,并 展示了 Siebel 应用程序如何利用这些特性.本文详述了 UNIX 和 Windows 操作系统在预迁 移和实际迁移过程中的工作,最后介绍完成迁移后需要执行的步骤. DB2 9 中的新特性 pureXML:DB2 9 天生就支持 XML 数据存储.这使得可以将格式良好的 XML

OLTP应用程序的DB2调优技巧

简介 DB2 Universal Database(UDB)是第一个支持多媒体和Web的关系数据库管理系统,它的功能非常强大,足以满足大公司的需求,并且它非常灵活,足以满足中小企业的要求.DB2 产品系列软件和因特网技术的结合使我们可以方便地跨不同平台访问信息.使用信息并且保证信息安全.全世界有30 多万家公司的6000 多万个DB2 用户依赖于 IBM 数据管理解决方案. DB2 UDB 为大多数需要电子商务的应用程序(比如电子商务.企业资源计划.客户关系管理.供应链管理.Web自助服务和商业

《PIC微控制器项目设计:C语言》一2.1 mikroC Pro for PIC程序的结构

2.1 mikroC Pro for PIC程序的结构 本文讲的是PIC微控制器项目设计:C语言一2.1 mikroC Pro for PIC程序的结构,图2.1显示了一个mikroC Pro for PIC程序最简单的结构.这个程序使连接到PIC单片机RB0端口(PORTB的第0位)上的发光二极管(LED)按1s的间隔闪烁.如果在这个阶段你没有理解程序的操作过程,请不要担心,随着内容的进展,一切都会清楚的.在图2.1中使用的一些编程语句将在下面进行详细描述. 程序员使用注释阐明程序或编程语句的

Java程序员在写SQL程序时候常犯的10个错误

  Java程序员编程时需要混合面向对象思维和一般命令式编程的方法,能否完美的将两者结合起来完全得依靠编程人员的水准: 技能(任何人都能容易学会命令式编程) 模式(有些人用"模式-模式",举个例子,模式可以应用到任何地方,而且都可以归为某一类模式) 心境(首先,要写个好的面向对象程序是比命令式程序难的多,你得花费一些功夫) 但当Java程序员写SQL语句时,一切都不一样了.SQL是说明性语言而非面向对象或是命令式编程语言.在SQL中要写个查询语句是很简单的.但在Java里类似的语句却不

C语言中嵌入式SQL语句

原文:[转载]C语言中嵌入式SQL语句 http://blog.csdn.net/cnlht/archive/2007/12/12/1930960.aspx原文地址 实验内容: 掌握SQL Server 2000的预编译程序NSQLPREP.EXE的使用(以课本例题1进行调试): 实验步骤: 一.数据库环境配置 1.创建xuesheng数据库,建立student表等: 2.关闭sql server 2000服务管理器: 3.将devtools文件夹拷贝到:C:\Program Files\Mic

db2数据库sql报错信息

sqlcode sqlstate 说明 000 00000 SQL语句成功完成   01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 01568 动态SQL语句用分号结束 +100 02000 没有找到满足SQL语句的行 +110 01561 用DATA CAPTURE定义的表的更新操作不能发送到原来的子系统 +111 01590 为2型索引设置了SUBPAGES语句 +117 01525 要插入的值的个数不等于被插入表的列数

SQL Server应用程序中的高级SQL注入

server|程序|高级 介绍: SQL是一种用于关系数据库的结构化查询语言.它分为许多种,但大多数都松散地基于美国国家标准化组织最新的标准SQL-92.典型的执行语句是query,它能够收集比较有达标性的记录并返回一个单一的结果集.SQL语言可以修改数据库结构(数据定义语言)和操作数据库内容(数据操作语言).在这份文档中,我们将特别讨论SQLSERVER所使用的Transact-SQL语言. 当一个攻击者能够通过往query中插入一系列的sql语句来操作数据写入到应用程序中去,我们管这种方法定