Chinaunix首页 | 论坛 | 博客
  • 博客访问: 134151
  • 博文数量: 48
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 38
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-22 17:03
文章分类
文章存档

2016年(1)

2015年(6)

2014年(12)

2013年(27)

2012年(2)

我的朋友

分类: Oracle

2015-01-19 18:36:22

原文地址:OCI 资料 (1) 作者:nighteblis

程序架构(OCI Program structure)

OCI应用程序最主要的目的是面向多用户的。

OCI用户使用一下基本的程序架构

1. 初始化OCI环境和线程

2. 分配必要的句柄建立服务器连接和用户的会话连接

3. 通过执行sql命令与数据库服务器进行数据交换,并执行相关的应用程序数据处理

4. 执行预备的命令或为下一次执行命令的预备

5. 终结用户的会话和服务器连接

6. 释放句柄资源

此图现实程序流程


有可能在实际的开发中与此图实际的过程有所不同,这取决于你的程序的不同实现的功能。例如你需要一些其他的专业的功能,例如多会话管理与事务管理或者使用对象等,都需要额外的步骤。 

所有的OCI功能调用都是在一个环境上下文调用的。一个OCI进程可以有多个环境上下文,如果一个环境需要任何进程级别的初始化,那么他将自动运作。

注意: 在一个OCI程序中,有多个活动的数据库连接或者数据库命令都是可能的。

OCI 数据结构(OCI Data Structure)

句柄和描述符是非常难于理解的数据结构,他们在OCI里有定义。他们可以被直接分配通过指定的分配调用,或者他们可以被OCI的函数隐式分配。

句柄和描述符存储的信息与数据,连接或程序的行为有关。

句柄(Handles)

几乎所有的OCI 调用都会包含一个或多个的句柄参数。一个句柄就是被OCI 库分配指定的一个指针,他指向一块存储的区域。你可以用句柄来保存上下文和连接信息等。(例如,一个环境或者服务上下文句柄)或者他存储的信息是OCI函数或者数据等(例如一个错误句柄或者描述句柄)。句柄可以使程序来维持数据更简单,库提供的这些远远要比你自己实现容易。

大多数OCI 程序需要访问存储在句柄中的信息,设定和获取属性OCI调用,OCIAttrGet() OCIAttrSet(),可以访问设定此信息。

如下列出了OCI句柄的定义。

Description  C Datatype  Handle Type

OCI environment handle OCIEnv OCI_HTYPE_ENV

OCI error handle OCIError OCI_HTYPE_ERROR

OCI service context handle OCISvcCtx OCI_HTYPE_SVCCTX

OCI statement handle OCIStmt OCI_HTYPE_STMT

OCI bind handle OCIBind OCI_HTYPE_BIND

OCI define handle OCIDefine OCI_HTYPE_DEFINE

OCI describe handle OCIDescribe OCI_HTYPE_DESCRIBE

OCI server handle OCIServer OCI_HTYPE_SERVER

OCI user session handle OCISession OCI_HTYPE_SESSION

OCI authentication information handle OCIAuthInfo OCI_HTYPE_AUTHINFO

OCI connection pool handle OCICPool OCI_HTYPE_CPOOL

OCI session pool handle OCISPool OCI_HTYPE_SPOOL

OCI transaction handle OCITrans OCI_HTYPE_TRANS

OCI complex object retrieval (COR) handle OCIComplexObject OCI_HTYPE_COMPLEXOBJECT

OCI thread handle OCIThreadHandle N/A

OCI subscription handle OCISubscription OCI_HTYPE_SUBSCRIPTION

OCI direct path context handle OCIDirPathCtx OCI_HTYPE_DIRPATH_CTX

OCI direct path function context handle OCIDirPathFuncCtx OCI_HTYPE_DIRPATH_FN_CTX

OCI direct path column array handle OCIDirPathColArray OCI_HTYPE_DIRPATH_COLUMN_ARRAY

OCI direct path stream handle OCIDirPathStream OCI_HTYPE_DIRPATH_STREAM

OCI process handle OCIProcess OCI_HTYPE_PROCESS

分配和释放句柄(allocating and freeing handles

你的程序需要为相应的环境句柄分配所有的句柄(除了bind,define thread 句柄)。一般环境句柄作会为分配句柄的参数。那么这样的话,则分配的句柄则将与指定的那个环境句柄关联起来。

bind define 句柄是用来和命令句柄相关的,而且包含一些信息关于命令解析。

注意: binddefine是被oci库在运行某些函数时被自动调用的,不需要用户手动分配。

以下是句柄的层次图



环境句柄被分配和初始化的是一个叫 OCIEnvCreate() 或者 OCIEnvNlsCreate() 其中之一是OCI程序必须需要的(因为一个环境句柄的分配是所有程序所必须的)。所有用户可分配的句柄是用OCI句柄分配调用来进行初始化分配的(OCIHanleAlloc())

一个应用程序必须释放所有的句柄当他们不在被使用时。释放的函数调用是OCIHandleFree()

注意:当以个父层的句柄被释放,所有他的子句柄都会将被释放。例如,当一个命令句柄释放,则关联于他的binddefine句柄也将被释放。

错误异常句柄也是非常重要的。它可以手机错误的报告更容易,用来方便查找错误。

介绍几个句柄:

服务上下文和交互句柄(service context and associated handles)

顾名思义是用来建立与服务器连接并交互的句柄。服务器上下文包括3个句柄作为它的属性,服务器连接,用户会话,事务。



句柄属性

所有的OCI句柄都有属性,这些可以用来存放一些信息。有些OCI 函数需要那些指定的句柄属性被设定以后才能被调用。例如,当OCISessionBegin() 需要被调用的时候,用户名和密码需要在调用之前先设定。

还有一些OCI的函数在执行完毕之后,将返回的信息直接返回给某个句柄。比如当OCIStmtExecute() 执行一个sql查询后,查询的列表项信息将会返回到statement 句柄。

OCI 描述符

OCI 描述符和定位符是数据结构用来组织指定的数据信息。

Description C Datatype OCI Type Constant

snapshot descriptor OCISnapshot OCI_DTYPE_SNAP

LOB datatype locator OCILobLocator OCI_DTYPE_LOB

FILE datatype locator OCILobLocator OCI_DTYPE_FILE

read-only parameter descriptor OCIParam OCI_DTYPE_PARAM

ROWID descriptor OCIRowid OCI_DTYPE_ROWID

ANSI DATE descriptor OCIDateTime OCI_DTYPE_DATE

TIMESTAMP descriptor OCIDateTime OCI_DTYPE_TIMESTAMP

TIMESTAMP WITH TIME ZONE descriptor OCIDateTime OCI_DTYPE_TIMESTAMP_TZ

TIMESTAMP WITH LOCAL TIME ZONE descriptor OCIDateTime OCI_DTYPE_TIMESTAMP_LTZ

INTERVAL YEAR TO MONTH descriptor OCIInterval OCI_DTYPE_INTERVAL_YM

INTERVAL DAY TO SECOND descriptor OCIInterval OCI_DTYPE_INTERVAL_DS

complex object descriptor OCIComplexObjectComp OCI_DTYPE_COMPLEXOBJECTCOMP

advanced queuing enqueue options OCIAQEnqOptions OCI_DTYPE_AQENQ_OPTIONS

advanced queuing dequeue options OCIAQDeqOptions OCI_DTYPE_AQDEQ_OPTIONS

advanced queuing message properties OCIAQMsgProperties OCI_DTYPE_AQMSG_PROPERTIES

advanced queuing agent OCIAQAgent OCI_DTYPE_AQAGENT

advanced queuing notification OCIAQNotify OCI_DTYPE_AQNFY

the distinguished names of the database servers in a registration request

OCIServerDNs OCI_DTYPE_SRVDN

 

每个描述符的类型的作用如下      

·  OCISnapshot - used in statement execution

·  OCILOBLocator - used for LOB (OCI_DTYPE_LOB) or FILE (OCI_DTYPE_FILE) calls

·  OCIParam - used in describe calls

·  OCIRowid - used for binding or defining ROWID values

·  OCIDateTime and OCIInterval - used for datetime and interval datatypes

·  OCIComplexObjectComp - used for complex object retrieval

·  OCIAQEnqOptions, OCIAQDeqOptions, OCIAQMsgProperties, OCIAQAgent - used for Advanced Queuing

·  OCIAQNotify - used for publish-subscribe notification

·  OCIServerDNs - used for LDAP-based publish-subscribe notification


阅读(1565) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~