TimesTenODBC应用开发.ppt
《TimesTenODBC应用开发.ppt》由会员分享,可在线阅读,更多相关《TimesTenODBC应用开发.ppt(109页珍藏版)》请在三一办公上搜索。
1、TimesTen ODBC 应用开发,zhaojunfeng 2008-03-14,2007-Proprietary and Confidential Information of Amdocs.Security Level Classification-Sensitive,Agenda,ODBC 程序结构如何使用ODBC句柄实现 SQL Statements异常捕捉性能方面考虑其他建议,2,ODBC 程序流程,CLOSE option,DROP option,ODBC 应用的句柄,Environment 句柄初始化 ODBC 调用接口ODBC 方法:SQLAllocEnv()和 SQLFre
2、eEnv()Connection 句柄存储数据源连接信息ODBC 方法:SQLAllocConnect()和 SQLFreeConnect()隐式分配一个特定的 Environment 句柄Statement 句柄存储SQL statement 信息ODBC 方法:SQLAllocStmt()和 SQLFreeStmt()隐式分配一个特定的 Connection 句柄,使用 ODBC 应用句柄,statement 句柄只能在初始阶段分配一次,并在结束阶段释放.在使用多线程编程中,statement 和 connection 句柄 应该属于线程结构体内.句柄不能用于多线程并发运行,如果想实现在多
3、个线程在不同的时间访问同一个句柄,那么应用必须通过一些信号量等方式的机制来实现。,SQL Statement 执行流程,SQLPrepareSQLBindParameterSQLExecute,Yes,Initialize,Terminate,If more processing,SQLFreeStmt,If repeat,No,SQLTransact,Repeatable Execution?,SQLBindParameterSQLExecDirect,绑定参数缓存,只需要Prepare 或者编译 SQL statements 及内建procedures一次,然后执行或者调用多次。尽量使用参
4、数化statements,在运行期使用变量方式来应用SQL statements和内建 procedure。一旦statement被prepared,尽快绑定参数和列变量。在程序开始的时候申明/分配一次需要用到的变量。变量属于全局范围的。如果使用到多线程,变量申明在线程内部。,绑定参数缓存示例,#define CHARLEN 20SQLINTEGER intBuf,nullData=SQL_NULL_DATA;SQLCHAR charBufCHARLEN;SQLFLOAT floatBuf;rc=SQLPrepare(hStmt,(SQLCHAR*)“insert into student.t
5、ab values(?,?,?)”,SQL_NTS);rc=SQLBindParameter(hStmt,1,SQL_PARAM_INPUT,SQL_C_SLONG,SQL_INTEGER,0,0,C 和 SQL 数据类型的绑定映射,SQL_CHAR,SQL_INTEGER(unsigned),SQL_C_CHAR,SQL_C_TIME,SQL_C_DATE,SQL_C_BINARY,SQL_C_BINARY,SQL_C_BINARY,SQL_C_DOUBLE,SQL_C_DOUBLE,SQL_C_FLOAT,SQL_C_CHAR,SQL_C_ULONG,SQL_VARCHAR,SQL_LON
6、GVARCHAR,SQL_DECIMAL,SQL_NUMERIC,SQL_BIT,SQL_TINYINT(signed),SQL_TINYINT(unsigned),SQL_SMALLINT(signed),SQL_SMALLINT(unsigned),SQL_INTEGER(signed),SQL_BIGINT,SQL_REAL,SQL_FLOAT,SQL_DOUBLE,SQL_BINARY,SQL_VARBINARY,SQL_LONGVARBINARY,SQL_DATE,SQL_TIME,SQL_TIMESTAMP,SQL_C_CHAR,SQL_C_CHAR,SQL_C_CHAR,SQL_
7、C_CHAR,SQL_C_BIT,SQL_C_STINYINT,SQL_C_UTINYINT,SQL_C_SSHORT,SQL_C_USHORT,SQL_C_SLONG,SQL_C_TIMESTAMP,ODBC 异常捕捉,所有 ODBC 方法都会有一个返回代码确保程序中已经捕捉!如果返回代码是SQL_ERROR 或者SQL_SUCCESS_WITH_INFO,那么调用ODBC方法 SQLError()获取详细信息获取(TimesTen)本地错误代码和错误信息获取 SQLSTATE(ODBC 错误代码),#define ERRMSGLEN 255SQLUCHAR sqlstate6;SQLINT
8、EGER native_error=0;SQLUCHAR ErrorMsgERRMSGLEN;SQLSMALLINT cbErrorMsg;rc=SQLError(hEnv,hDbc,hStmt,sqlstate,应用性能方面考虑(1/3),使用TimesTen ODBC直连方式会获得最佳性能尽量多次执行Prepare statements可以避免没有必要的参数重复绑定可使用 SQLBindCol()来代替 SQLGetData()这样可以减少运行期系统表锁的占用时间尽量避免数据转换尽量使用定长数据类型,应用性能方面考虑(2/3),尽量避免ALTER TABLE 操作 更新优化统计表尽量利用你
9、创建的索引尽量使用短交易来减少锁冲突有规则的进行checkpoint操作有规则的进行backups操作(如果使用增量备份,那么这个操作尤为重要),其他建议,检查连接属性配置文件(/.odbc.ini 文件).检查表的所属者owners.方法调用顺序或者游标状态不正确往往是应用程序不正确的信号。游标都和特定的statement句柄关联,(隐式和connection句柄关联)Transactions和特定的 connection 句柄关联如果statements 或者 connections 是跨线程共享的,那么需要应用来避免方法调用顺序和游标状态错误。,检查点和日志文件,Oracle Times
10、Ten定期将数据存储区和事务日志的更改写入磁盘如果需要恢复数据存储区,Oracle TimesTen将把磁盘上的数据存储区检查点与仍位于日志文件中的已完成事务合并在一起检查点和日志文件使用普通的磁盘文件系统,Replication TimesTen to TimesTen,Replication TimesTen to TimesTen是 Oracle TimesTen In-Memory Database的一个选项,它支持服务器间的实时数据复制,以获得高可用性和负载共享。数据复制可以是双机热备份(active-standby)或负载均衡(active-active)数据复制可以使用异步或同步
11、传输,数据复制可以包含冲突检测和冲突解决以及在故障服务器恢复后自动重新同步。,复制代理,Replication,配置复制后,将为每个数据存储区启动复制代理进程。如果为复制而配置了同一服务器上的多个数据存储区,则每个数据存储区将有一个单独的复制代理每个复制代理能够向一个或多个用户服务器发送更新,并从一个或多个主服务器那里接收更新复制代理通过 TCP/IP流套接字进行通信,Cache Connect to Oracle,Cache Connect to Oracle 是 Oracle TimesTen In-Memory Database的一个选项,它为位于应用程序层中的 Oracle 磁盘数据创
12、建实时、可更新的高速缓存Cache Connect to Oracle 能够将 Oracle 磁盘数据的子集加载到 TimesTen中,能够双向传播更新Cache Connect to Oracle 能够使对非高速缓存数据的 SQL请求的透传自动化Cache Connect to Oracle 能够在故障之后自动重新同步数据,Cache Connect to Oracle,高速缓存组是由一个或多个通过主键/外键关系以逻辑层次结构排列的表的集合。高速缓存组中的每个表都与 Oracle 数据库表相关一个高速缓存组表可以包含相关 Oracle 表中的所有行和列或行和列的一个子集可以通过 SQL语句创
13、建和修改高速缓存组,Cache Connect to Oracle,高速缓存组支持以下特性:应用程序可以对高速缓存组执行读取和写入操作可以自动或手动刷新高速缓存组(将 Oracle 数据库数据置于高速缓存组中)可以自动或手动清理高速缓存组(将高速缓存更新传播到 Oracle 表)可以自动跟踪对 Oracle 表或高速缓存组的更改,多种灵活的cache group,A.只读的cache group,定时把Oracle数据刷新到TimesTen里面,TimesTen里面的数据是只读的.可以通过改变PassThrough的属性,把对TimesTen的数据变更到Oracle里面,然后再通过Oracle
14、刷新到TimesTen里面B.同步的cahe group,写TimesTen的数据会先同步更新完Oracle数据库然后再更新到TimesTenC.异步的cache group,直接更新到TimesTen里面,TimesTen定时通过replication agent把数据批量更新到Oracle里面。如果Oracle当了,等Oracle起来后,TimesTen会自动同步到Oracle上面。D.用户管理的cahe group,用户自定义刷新,加载,卸载等。,TimesTen对行业标准的支持,支持多种操作系统,比如Linux,AIX,Solaris,Windows,HP-Unix等32位或者64位操
15、作系统支持用户的权限和认证管理,支持create user,grant,revoke操作没有tablespace的概念,使用的DSN的概念,没有存储过程,函数,嵌入式c支持多种常用的字符集,如ZHS16GBK,UTF8,US7ASCII等,TimesTen对行业标准的支持,支持常用的数据对象,比如table,index,view,materialized view,sequence支持常用的数据类型,比如number,char,varchar2,date等支持sql92标准来进行DDL操作,比如create table,drop table,或者是改变对象属性比如alter table 等支持
16、标准DML语法,如select,insert,update,delete,truncate,Timesten安装(hp平台),1.内核参数调整semmns是系统内系统用户可用的IPC信号总数,设置为大于或者等于4096(或8192等,推荐公式SEMMNS=SEMMNU=(SEMMNI*SEMMSL)shmmax 最大的共享内存段,以字节为单位,一般设置为内存的实际大小64位机上检测目录是否支持大文件系统(如果要设置DataStore大于2G,就必须设置大文件系统):#fsadm-F vxfs/dir_name设置大文件系统#/usr/sbin/fsadm-F xvfs-o largefiles
17、/dir_name,Timesten安装,2.目录,用户及组增加组TimesTen(也可通过sam):#groupadd g 600 TimesTen增加用户timesten并加入到sys,TimesTen组中:#useradd-u 600-g TimesTen-G sys d/ttinstall/TimesTen timesten 如果有Oracle安装组的话,也可以现在把timesten用户加入到Oracle安装组dba中,因为Cache Group需要对Oracle目录有访问的权限,Timesten安装,相关目录:#mkdir/etc/TimesTen#chmod 775/etc/Tim
18、esTen#chgrp R TimesTen/etc/TimesTen#chown R timesten:TimesTen/etc/TimesTen/etc/TimesTen目录用于TimesTen实例的注册,Timesten安装,3.FTP到需要安装TimesTen的主机上的一个目录,要求可用空间在500M以上,然后解包:tar xvf timesten604.hp64ipf.tar4.解包后会在当前目录下生成hp64ipf/目录,执行该目录下面的setup.sh命令 5.输入Instance name6.选择产品类型Oracle TimesTen In-Memory Database:完全
19、的内存数据库,和oracle数据库没有关系Cache Connect to Oracle:从oracle数据库cache数据到TimesTen内存数据库;也支持直接在内存数据库中建立实体表。,Timesten安装,7.选择组件 1 Client/Server and Data Manager2 Data Manager Only3 Client Only Client/Server 模式下的三个选择:客户端、服务器端、客户端+服务器端 8.选择安装路径9.选择TimesTen Daemon 监听端口,默认为 17000,Timesten安装,10.设置Access Control Access
20、 Control 提供了一个对TimesTen的初级的权限保护功能,它只是对谁能通过正常的途径(比如ttisql、JDBC及ODBC)访问到相应的Data Store做了初级的限制;并不是说,它对在操作系统级别上对Data Store的文件 以及 Log 文件的访问做除了安全保障。比如 root 用户,即使它不是TimesTen的用户,root用户可以做他想做的任何事情,比如删除Data Store文件等。所以安装的时候一定要注意,一般建议设置为 yes,Yes时才允许TimesTen创建新的用户,Timesten安装,11.设置Cache Connect to Oracle12.后面按照提示
21、默认安装,TimesTen 系统变量,下列为TimesTen安装之后,可能需要设置的系统变量:1.LIB、LIBPATH、LD_LIBRARY_PATH、SHLIB_PATH:指向TimesTen所用到的共享库,即$INSTALL_DIR/LIB 目录;如用到Cache Group,还需包含$ORACLE_HOME/LIB,不同的平台该变量的名字各有差异:SOLARIS LD_LIBRARY_PATHAIX LIBPATHHP-UX 32Bit SHLIB_PATHHP-UX 64Bit LD_LIBRARY_PAT($INSTALL_DIR/LIB)SHLIB_PATH($ORACLE_HO
22、ME/LIB)Tru64 UNIX LD_LIBRARY_PATH,TimesTen 系统变量,2.CLASSPATH:如用到JDK,则需要设置该变量指向相应的Jar文件目前支持的JDK有 JDK1.4、JDK5.0、BEAWeblogic Jrockit 5.03.ODBCINI:指向.odbc.ini 配置文件。当用户连接TimesTen的时候,TimesTen会按照下面的顺序查找相关的配置文件:1.环境变量ODBCINI所指向的.odbc.ini文件2.运行TimesTen的用户主目录下的.odbc.ini 文件3.环境变量SYSODBCINI所指向的 文件(非root用户才会执行该步)
23、,TimesTen 系统变量,ORACLE_HOME指向Oracle 数据库的安装目录,如果要用到Cache Group,该变量必须设置 PATH指向TimesTen的bin 目录,即$INSTALL_DIR/bin;如果用到Cache Group的话,还要包含Oracle的bin目录SYSODBCINI指向 配置文件,具体说明见 ODBCINI,TimesTen 系统变量,SYSTTCONNECTINI:当用Client/Server 模式访问TimesTen的时候,该变量指向客户端的 配置文件。客户端查找配置文件的顺序是:1.环境变量SYSTTCONNECTINI所指向的 配置文件。2./
24、3.$INSTALL_DIR/info/(非root用户安装)TMP/TMPDIR:指向TimesTen的临时目录。TimesTen的某些操作,比如ttRepAdmin duplicate、大的删除等会用到临时目录。该参数缺省设置为:HP-UX 和AIX 是/var/tmp;而Solaris、Linux、Tru64 UNIX 则是/tmp,TimesTen 使用(1)-启动和关闭,TimesTen 安装完之后,缺省是已经起来了的启动TimesTen:ttdaemonadmin-start 关闭TimesTen:ttdaemonadmin stop关闭TimesTen前,建议先断开所有连接Tim
25、esTen的应用,如果启动了Cache Agent和Replication Agent,建议也都先停掉,TimesTen 使用(1)-启动和关闭,ps-ef|grep timesten/tstenv/timeten/TimesTen/tt70/bin/timestend/tstenv/timeten/TimesTen/tt70/bin/timestenws/tstenv/timeten/TimesTen/tt70/bin/timestensubd/tstenv/timeten/TimesTen/tt70/bin/timestensubd/tstenv/timeten/TimesTen/tt70
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TimesTenODBC 应用 开发
链接地址:https://www.31ppt.com/p-5450899.html