oci linux,linux我的世界

老铁们,大家好,相信还有很多朋友对于oci linux和linux我的世界的相关问题不太懂,没关系,今天就由我来为大家分享分享oci linux以及linux我的世界的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

如何在 Oracle Linux 上使用 PHP DTrace

DTrace是一个受欢迎的、“总是可用”的跟踪实用程序,用于识别开发和生产系统中的性能和行为问题。适用于 Oracle Linux的标准“UEK3”内核包括了 DTrace支持。通过跟踪 PHP核心和 PHP OCI8扩展中的用户探测器,我们可以有效地识别 PHP脚本问题。DTrace让您可以跟踪用户应用程序与操作系统之间的交互。

在 Oracle Linux上,DTrace实用程序需要一个 Oracle Unbreakable Linux Network(ULN)订阅。

安装 Oracle Linux和 Oracle Unbreakable Enterprise Kernel版本 3

首先,通过 Oracle E-Delivery安装 Oracle Linux 6.4。

安装 Oracle Linux 6.4之后,确保在 ULN中启用了“Unbreakable Enterprise Kernel Release 3 for Oracle Linux 6(x86_64)- Latest”频道。安装 UEK3内核:

# yum install kernel-uek

在 ULN中启用“Oracle Linux 6 Dtrace Userspace Tools(x86_64)- Latest”频道,安装 DTrace实用程序:

# yum install dtrace-utils

重新引导到新的 UEK3 3.8.13内核。

安装 PHP

需要使用--enable-dtrace参数构建 PHP。您可以安装一些启用了 DTrace的预先构建的评估版 RPM,请参见“使用 Oracle Linux“playground”预构建软件包的 DTrace PHP”。

也可以按照如下所述重新构建 PHP:

从 php.net下载 PHP 5.4.20或 PHP 5.5.4或更高版本,然后进行解压缩:

$ tar-xJf php-5.4.20.tar.bz2

$ cd php-5.4.20

配置 PHP:

$./configure\

--prefix=$HOME/p54\

--enable-dtrace\

--disable-all--disable-cgi\

--with-pear--enable-xml--enable-libxml--with-zlib

这将构建一个启用了 DTrace的最小的命令行 PHP。所有不需要的扩展均被禁用。您可根据需要包含其他扩展。

--prefix选项表示安装到一个本地目录,方便您查看安装的文件。用完快照之后,清理该目录很容易。

pear、xml和 zlib选项允许使用 pecl命令。

生成 PHP二进制文件并进行安装:

$ make

$ make install

将 php.ini-development复制到$HOME/p54/lib/php.ini,编辑该文件来设置时区,例如:

date.timezone= America/Los_Angeles

安装适用于 Oracle Database的 PHP OCI8

评估版 PHP RPM包括可以连接到 Oracle Database的 OCI8扩展;请参见前面提到的博文。

不过,如果您自己编译 PHP,需要手动将 PHP OCI8作为一个“共享的”扩展添加:

在 ULN上启用“Oracle Software for Oracle Linux 6(x86_64)”频道。

以 root用户身份安装 Oracle Instant Client:

# yum install oracle-instantclient12.1-basic oracle-instantclient12.1-devel

作为普通用户,设置 PHP的 PATH:

$ export PATH=$HOME/p54/bin:$PATH

如果需要访问 ,请设置一个 PEAR代理:

$ pear config-set http_proxy

设置用来启用 DTrace的环境变量 PHP_DTRACE,然后安装 PHP OCI8:

$ PHP_DTRACE=yes pecl install oci8-2.0.2

本文后面将要用到的 DTrace探测器定义基于 PHP OCI8 2.0.2,因此需要安装明确的版本。如果您要安装更高的版本,请查看探测器及其参数,了解最新版本中的小改进。

当提示 ORACLE_HOME目录时,无需输入文本,直接按 Return。安装将自动检测 Oracle Instant Client RPM。配置将继续,输出将包含类似下面的内容:

[... ]

checking for Oracle Database OCI8 support... yes, shared

checking PHP version... 5.4.20, ok

checking OCI8 DTrace support... yes

[... ]

configure: WARNING: OCI8 extension: ORACLE_HOME is not set,

looking for default Oracle Instant Client instead

checking Oracle Instant Client directory...

/usr/lib/oracle/12.1/client64/lib

checking Oracle Instant Client SDK header directory...

/usr/include/oracle/12.1/client64

checking Oracle Instant Client library version compatibility... 12.1

[... ]

再次编辑 php.ini,添加 PHP OCI8:

extension=oci8.so

确认安装:

$ php--ri oci8

oci8

OCI8 Support=> enabled

OCI8 DTrace Support=> enabled

OCI8 Version=> 2.0.2-dev

Revision=>$Id: b30fb4bef45d9f5ce8a56b736f1546ea0cff08ef$

Oracle Run-time Client Library Version=> 12.1.0.1.0

Oracle Compile-time Instant Client Version=> 12.1

Directive=> Local Value=> Master Value

oci8.max_persistent=>-1=>-1

oci8.persistent_timeout=>-1=>-1

oci8.ping_interval=> 60=> 60

oci8.privileged_connect=> Off=> Off

oci8.statement_cache_size=> 20=> 20

oci8.default_prefetch=> 100=> 100

oci8.old_oci_close_semantics=> Off=> Off

oci8.connection_class=> no value=> no value

oci8.events=> Off=> Off

Statistics=>

Active Persistent Connections=> 0

Active Connections=> 0

PHP OCI8安装说明

为了支持 DTrace,需要从 PECL安装 PHP OCI8 2.0,因为 PHP 5.4和 PHP 5.5包含的 PHP OCI8 1.4没有 DTrace探测器。将来,在 PHP 5.6发布后,您就能够在构建 PHP时配置支持 DTrace的 PHP OCI8。

当然,您可以通过 Oracle Instant Client zip文件安装 PHP OCI8,也可以仅使用现有的 ORACLE_HOME安装。

您可以在不包含或未配置 DTrace的 PHP版本上安装启用 DTrace的 PHP OCI8。这包括 PHP早期版本。您将能够跟踪 PHP OCI8探测器,但无法跟踪核心 PHP探测器。类似地,您可以在启用 DTrace的 PHP上安装禁用 DTrace的 PHP OCI8。

如果您使用 phpize和 configure(而不是 pecl)从 PECL安装 PHP OCI8 2.0,则仍需设置 PHP_DTRACE=yes。这是因为 PECL软件包有限的 configure脚本将忽略--enable-dtrace选项。

PHP OCI8 2.0配置脚本适合“真正的”DTrace使用,但 Linux SystemTap不会跟踪扩展。

注意,DTrace优化后的二进制文件产生的输出可能与我们所见到的代码不尽相同。

验证 PHP DTrace探测器

以 root用户身份启用 DTrace,允许普通用户记录跟踪信息:

# modprobe fasttrap

# chmod 666/dev/dtrace/helper

您可以使用 ACL软件包规则限制特定用户对设备的访问,而非使用 chmod命令。

作为普通用户运行 php,不带任何选项。PHP将启动,然后等待输入:

$ php

以 root用户身份列出可用的 DTrace探测器。列出了 PHP核心探测器和 PHP OCI8探测器:

# dtrace-l-m php-m oci8.so

4 php9559 php dtrace_compile_file compile-file-entry

5 php9559 php dtrace_compile_file compile-file-return

6 php9559 php zend_error error

7 php9559 php ZEND_CATCH_SPEC_CONST_CV_HANDLER exception-caught

8 php9559 php zend_throw_exception_internal exception-thrown

9 php9559 php dtrace_execute_ex execute-entry

10 php9559 php dtrace_execute_internal execute-entry

11 php9559 php dtrace_execute_ex execute-return

12 php9559 php dtrace_execute_internal execute-return

13 php9559 php dtrace_execute_ex function-entry

14 php9559 php dtrace_execute_ex function-return

15 php9559 php php_request_shutdown request-shutdown

16 php9559 php php_request_startup request-startup

17 php9559 oci8.so php_oci_dtrace_check_connection oci8-check-connection

18 php9559 oci8.so php_oci_do_connect oci8-connect-entry

19 php9559 oci8.so php_oci_persistent_helper oci8-connect-expiry

20 php9559 oci8.so php_oci_do_connect_ex oci8-connect-lookup

21 php9559 oci8.so php_oci_pconnection_list_np_dtor oci8-connect-p-dtor-close

22 php9559 oci8.so php_oci_pconnection_list_np_dtor oci8-connect-p-dtor-release

23 php9559 oci8.so php_oci_do_connect oci8-connect-return

24 php9559 oci8.so php_oci_do_connect_ex oci8-connect-type

25 php9559 oci8.so php_oci_error oci8-error

26 php9559 oci8.so php_oci_statement_execute oci8-execute-mode

27 php9559 oci8.so php_oci_create_spool oci8-sesspool-create

28 php9559 oci8.so php_oci_create_session oci8-sesspool-stats

29 php9559 oci8.so php_oci_create_session oci8-sesspool-type

30 php9559 oci8.so php_oci_statement_create oci8-sqltext

PHP手册中详细记载了核心 PHP探测器。PHP OCI8探测器如下所述。

在用户终端,用 Ctrl-C停止 php可执行文件。

$ php

^C

$

PHP OCI8 2.0 DTrace探测器概述

静态 PHP OCI8 2.0探测器可分为“用户”探测器和“维护者”探测器。后者对于 PHP OCI8维护者更有用,可在扩展开发期间验证功能。所有探测器均以参数形式返回数据。官方文档中详细介绍了 PHP OCI8 DTrace探测器。

在 OCI8 2.0.2中,用户探测器包括:

oci8-connect-entry—由 oci_connect()、oci_pconnect()和 oci_new_connect()启动。在建立数据库连接之前触发。

char*username—连接用户名。

char*dbname—数据库连接字符串。

char*charset—指定的字符集。

long session_mode— OCI_SYSDBA(0x2)、OCI_SYSOPER(0x4)和 OCI_CRED_EXT(1<<31)的二进制“或”(或者过去我所使用平台上的-2147483648)。默认情况下,设置为 0。

int persistent—如果调用了 oci_pconnect(),则设置为 1;否则设置为 0。

int exclusive—如果调用了 oci_new_connect(),则设置为 1;否则设置为 0。

oci8-connect-return—在连接的末尾触发。

void*connection—连接结构的地址。

oci8-check-connection—如果 Oracle错误可能已经导致连接失效,则启动。

void*connection—连接结构的地址。

int is_open—如果 errcode或 server_status指示连接无效且必须重新创建,则为 0。

long errcode— Oracle错误编号。

unsigned long server_status—为 Oracle库的一个指示器,指示连接是否无效。如果因为 errcode指示连接无效导致 is_open为 0,则 server_status为其默认值 1。

oci8-sqltext—执行 oci_parse()时启动。

void*connection—连接结构的地址。

char*sql—所执行的 SQL语句的文本。

oci8-error—如果发生 Oracle错误,则启动。

int status— Oracle返回失败的 Oracle库调用的状态,如-1代表 Oracle的 OCI_ERROR,1代表 Oracle的 OCI_SUCCESS_WITH_INFO。请参见 Oracle的 oci.h,了解所有定义。

long errcode— Oracle错误编号。

oci8-execute-mode—指示 oci_execute()调用的提交状态。

void*connection—连接结构的地址。

unsigned int mode—传递给 Oracle库的模式,如 OCI_NO_AUTO_COMMIT(0x00)、OCI_DESCRIBE_ONLY(0x10)或 OCI_COMMIT_ON_SUCCESS(0x20)。

注:最新的 OCI8 2.0.6中包含 oci8-connection-close探测器,有几个探测器现在也具有 client_id参数和指向语句结构的指针。

维护者探测器如下所示。参数描述请参考 PHP OCI8源代码。

oci8-connect-p-dtor-close

void*connection

oci8-connect-p-dtor-release

void*connection

oci8-connect-lookup

void*connection

int is_stub

oci8-connect-expiry

void*connection

int is_stub

long idle_expiry

long timestamp

oci8-connect-type

int persistent

int exclusive

void*connection

long num_persistent

long num_connections

oci8-sesspool-create

void*session_pool

oci8-sesspool-stats

unsigned long free

unsigned long busy

unsigned long open

oci8-sesspool-type

int type

void*session_pool

PHP OCI8 2.0中的探测器代替了 PHP OCI8 1.4中使用的 oci_internal_debug()跟踪。该函数已变成一条空指令,不执行任何操作。

使用 PHP OCI8和 DTrace

执行以下步骤。

创建一个简单的 PHP文件 oci8.php来查询数据库:

<?php

error_reporting(0);

ini_set('display_errors','Off');

function do_query($c,$sql)

{

$s= oci_parse($c,$sql);

if(!$s)

return;

$r= oci_execute($s);

if(!$r)

return;

while(($row= oci_fetch_row($s))!= false){

foreach($row as$item){

echo$item."";

}

echo"\n";

}

}

$c= oci_new_connect('hr','welcome','localhost/pdborcl');

do_query($c,"select city from locations where rownum< 5 order by 1");

do_query($c,"select something from does_not_exist");

?>

创建一个 D脚本 user_oci8.d来探测 oci8.php的执行:

#!/usr/sbin/dtrace-Zs

# This script is for OCI8 2.0.2

php*:::oci8-connect-entry

{

printf("PHP connect-entry\n");

printf("\t username%s\n", arg0? copyinstr(arg0):"");

printf("\t dbname%s\n", arg1? copyinstr(arg1):"");

printf("\t charset%s\n", arg2? copyinstr(arg2):"");

printf("\t session_mode%ld\n",(long)arg3);

printf("\t persistent%d\n",(int)arg4);

printf("\t exclusive%d\n",(int)arg5);

}

php*:::oci8-connect-return

{

printf("PHP oci8-connect-return\n");

printf("\t connection 0x%p\n",(void*)arg0);

}

php*:::oci8-connection-close

{

printf("PHP oci8-connect-close\n");

printf("\t connection 0x%p\n",(void*)arg0);

}

php*:::oci8-error

{

printf("PHP oci8-error\n");

printf("\t status%d\n",(int)arg0);

printf("\t errcode%ld\n",(long)arg1);

}

php*:::oci8-check-connection

{

printf("PHP oci8-check-connection\n");

printf("\t connection 0x%p\n",(void*)arg0);

printf("\t is_open%d\n", arg1);

printf("\t errcode%ld\n",(long)arg2);

printf("\t server_status%lu\n",(unsigned long)arg3);

}

php*:::oci8-sqltext

{

printf("PHP oci8-sqltext\n");

printf("\t connection 0x%p\n",(void*)arg0);

printf("\t sql%s\n", arg0? copyinstr(arg1):"");

}

php*:::oci8-execute-mode

{

printf("PHP oci8-execute-mode\n");

printf("\t connection 0x%p\n",(void*)arg0);

printf("\t mode 0x%x\n", arg1);

}

使用 OCI8 2.0.6,一些参数的数值需要调整,才能满足现在一些新增参数的需要。

以 root用户身份启动 D脚本。该脚本将暂停,等待探测器触发:

# chmod+x user_oci8.d

#./user_oci8.d

(稍后,体验完 PHP之后,可以使用 Ctrl-C关闭此终端。)

在另一个窗口中运行命令行 PHP。显示成功查询的输入:

$ php oci8.php

Beijing

Bern

Bombay

Geneva

在运行 D脚本的 root终端,将显示 PHP执行期间触发的探测器:

#./user_oci8.d

dtrace: script'user_oci8.d' matched 0 probes

CPU ID FUNCTION:NAME

1 18 php_oci_do_connect:oci8-connect-entry PHP connect-entry

username hr

dbname localhost/pdborcl

charset

session_mode 0

persistent 0

exclusive 0

0 23 php_oci_do_connect:oci8-connect-return PHP oci8-connect-return

connection 0x7f64e112cff0

0 31 php_oci_statement_create:oci8-sqltext PHP oci8-sqltext

connection 0x7f64e112cff0

sql select city from locations where rownum< 5 order by 1

0 27 php_oci_statement_execute:oci8-execute-mode PHP oci8-execute-mode

connection 0x7f64e112cff0

mode 0x20

0 31 php_oci_statement_create:oci8-sqltext PHP oci8-sqltext

connection 0x7f64e112cff0

sql select something from does_not_exist

0 27 php_oci_statement_execute:oci8-execute-mode PHP oci8-execute-mode

connection 0x7f64e112cff0

mode 0x20

0 26 php_oci_error:oci8-error PHP oci8-error

status-1

errcode 942

0 17 php_oci_dtrace_check_connection:oci8-check-connection PHP oci8-check-connection

connection 0x7f64e112cff0

is_open 1

errcode 942

server_status 1

0 25 php_oci_connection_close:oci8-connection-close PHP oci8-connect-close

connection 0x7f64e112cff0

(将-q添加到 user_oci8.d的/usr/sbin/dtrace参数将隐藏 CPU和 ID详细信息。)

在多 CPU计算机上,探测器可能不会顺序出现,具体取决于哪个 CPU正在处理探测器。显示探测器时间戳将有助于消除混淆,例如:

php*:::oci8-connect-entry

{

printf("PHP connect-entry at%lld\n", walltimestamp);

}

从 user_oci8.d DTrace输出中,您可以看到以下内容:

发起的连接(oci8-connect-entry)。连接到 localhost/pdborcl数据库的用户 hr。因为 exclusive和 persistent均为 0,所以是一个 oci_connect()调用。未请求任何显式的字符集。请求的是默认的会话模式(oci_connect的第五个可选参数)。

对两条 SQL语句进行分析(oci8-sqltext),并以 0x20(即 OCI_COMMIT_ON_SUCCESS)模式执行(oci-execute-mode)。

生成了(oci8-error)一条 Oracle错误— ORA-942(表或视图不存在)。

该错误导致要验证连接状态(oci8-check-connection)。is_open的值为 1,表示连接正常。

通过这些信息,您可以跟踪有问题的语句执行和连接问题。

总结

DTrace是一个非常强大的实用程序,本文只是有关其用法的只言片语。通过上述示例,可将 PHP OCI8跟踪与核心 PHP跟踪相集成。您可以设置 PHP函数调用的时间,计算调用的次数。您可以深入了解 PHP进行的操作系统调用。Bryan Cantrill在 DTrace和 PHP(演示)中发布了一些核心 PHP跟踪的示例。(注意,博客平台升级导致其博文中的一个反斜杠显示为两个反斜杠。而且,您不再需要单独的 PHP DTrace扩展。)Brendan Gregg的 DTrace Toolkit包含许多有用的 DTrace脚本。还有各种不同的博客。

记住,DTrace的目的是始终启用其功能,适合开发和生产(此过程最需要 DTrace)。DTrace的设计意味着探测器不受监视时零开销。

如何连接到linux上的oracle数据库

装好oracle数据库,我们准备用PLSQL Developer这个软件来连接服务器的数据库!

下面简单介绍设置此软件并连接oracle数据库的方法:

一、下载并安装好PLSQL Developer(绿色版的也可以);

二、下载并解压

Oracle免安装版的客户端:

三、建立tns配置文件。

1、在解压的:“nstantclient-basic-nt-11.2.0.3.0”文件夹的下面建文件夹,路径像这样“nstantclient-basic-nt-11.2.0.3.0\neidown\admin“,其实这个倒是无所谓的,只是看起来与服务端上的更接近而已,与文章后面的环境变量要对应。

2、拷贝服务端目录“$ORACLE_HOME$\network\admin\tnsnames.ora”到客户端的“nstantclient-basic-nt-11.2.0.3.0\neidown\admin“目录,这个文件的内容如下:(也可自行建立)

# tnsnames.ora Network Configuration File:/home/oradb/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

ORCL=

(DESCRIPTION=

(ADDRESS=(PROTOCOL= TCP)(HOST= localhost.localdomain)(PORT= 1521))

(CONNECT_DATA=

(SERVER= DEDICATED)

(SERVICE_NAME= orcl.localdomain)

)

)

复制代码以上的代码做个简要的介绍,本例中安装在linux中的oracle数据库,其环境配置如下:

ORACLE_BASE=/home/oradb/oracle

ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

ORACLE_SID=orcl

PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib

LANG=C

复制代码拷贝到客户端后,用记事本打开它,修改如下几个参数:

# tnsnames.ora Network Configuration File:/home/oradb/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

ORCL=

(DESCRIPTION=

(ADDRESS=(PROTOCOL= TCP)(HOST= 192.168.1.10)(PORT= 1521))

(CONNECT_DATA=

(SERVER= DEDICATED)

(SERVICE_NAME= orcl.localdomain)

)

)

复制代码重要:以上除了HOST是服务器ip外,其他三个红字必须与服务端的这个文件一致,否则连接的时候将会导致ORA-12514错误。

四、设置PLSQL Developer程序的oci库路径。

运行PLSQL Developer程序,在弹出的登录框点“取消”

在菜单“工具-首选项”中的“连接”中,

找到“Oracle主目录名”,输入

解压的:“nstantclient-basic-nt-11.2.0.3.0”文件夹的路径比如:

"D:\PLSQL\instantclient_11_2"

找到“OCI库”,输入

解压的:“nstantclient-basic-nt-11.2.0.3.0”文件夹下oci.dll文件的路径,比如:

"D:\PLSQL\instantclient_11_2\oci.dll"

如下图:

五、设置windows的环境变量

(右键“我的电脑”-属性-高级-环境变量)

添加2个系统变量:

1、是指向TNS文件所在目录的,这个目录是Oracle的TNS文件所在目录。TNS文件就是保存了连接信息的文件tnsnames.ora。

本例中 TNS_ADMIN的值: D:\Program Files\PLSQL Developer\instantclient_11_2\network\admin

2、是指定数据库使用的编码。如果不设置成以下值,那么连接上数据库后,你看到的所有中文的内容将会是乱码,都是一堆问号。

本例中 NLS_LANG值:AMERICAN_AMERICA.AL32UTF8

如下图:

如果服务器中的数据库字符编码是GBK则设置为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

如果设置不对会乱码。

注意:设定了环境变量之后,要注销或者重启电脑生效。

Oracle的oci和thin的不同

Features of ORACLE JDBC Drivers:

1.JDBC Oci此驱动类似于传统的ODBC驱动。因为它需要Oracle Call Interface and

Net8,所以它需要在运行使用此驱动的JAVA程序的机器上安装客户端软件

2.JDBC Thin这种驱动一般用在运行在WEB浏览器中的JAVA程序。它不是通过OCI or Net8,而是通过Java

sockets进行通信,因此不需要在使用JDBC Thin的客户端机器上安装客户端软件

连接Oracle数据库提供了两中方式OCI方式和thin方式,OCI方式是通过本地动态连接库和Oracle进行套接字通讯,速度和安全性比较

好,thin方式是通过远程访问Oracle。一般情况,OIC方式用于服务器端开发的数据库连接方式而thin方式可用于applet等需要远程访问数

据库的方式。

-----------------------------------------------------------

根据oracle的说法,java程序连接oracle数据库时,用oci驱动要比用thin驱动性能好些。主要的区别是使用thin驱动时,不需要安装oracle的客户端,而使用oci时则要安装oracle的客户端。

从使用thin驱动切换到oci驱动在配置来说很简单,只需把连接字符串java:oracle:thin:@hostip:1521:实例名换为java:oracle:oci@本地服务名即可。如:

从jdbc:oracle:thin:@10.1.1.2:1521:shdb改成jdbc:oracle:oci8:@shdb

但这里这台机需安装oracle数据库的客户端并配置本地服务名,同时还需指定NLS_LANG环境变量,NLS_LANG环境变量是用来控制客户端

在显示oracle数据库的数据时所用的字符集和本地化习惯。通常把NLS_LANG的字符集部分指定为数据库所用的字符集则就不会存在java显示的乱

码问题了。

对于oracle数据库客户端的安装,有二种选择,一是老实的用oracle数据库的安装光盘安装对应版本的oracle客户端。二是下载oracle提从的即时客户端,即时客户端是不用安装的,把下载包解压即可。

要使java web正常的通过oci驱动访问oracle,还需要客户端正确的配置一下相关变量。主要如下:

对于windows系统并使用oracle客户端时:

1.把%ORACLE_HOME%\lib加到PATH环境变量.

2.

把%ORACLE_HOME%\jdbc\lib\classes12.jar加到CLASSPATH环境变量里.也可以把classes12.jar拷贝到tomcat的comman\lib目录下。

对于windows系统并使用oracle的即时客户端时(假定即时客户端解压在d盘):

1.把d:\instantclient_10_2加到PATH环境变量

2.

把d:\instantclient_10_2\classes12.jar加到CLASSPATH环境变量里.也可以把classes12.jar拷贝到tomcat的comman\lib目录下。

对于linux系统并使用oracle客户端时:

1.在使用tomcat的用户主目录下的.bash_profile文件中加入

exprot ORACLE_HOME=/u01/app/oracle/product/9.2.0.4

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

2.把classes12.jar拷贝到tomcat的comman\lib目录下。

对于linux系统并使用oracle即时客户端时:

1.在使用tomcat的用户主目录下的.bash_profile文件中加入

exprot ORACLE_HOME=/instantclient_10_2

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

2.

把instantclient_10_2目录下的classes12.jar拷贝到tomcat的comman\lib目录下。

如果一个tomcat下带了几个应用,且几个应用都要连接oracle数据库时,则要注意的时,不要在每个应用的WEB-INF/lib目录下放入

oracle的classes12.jar/zip文件。而应该把classes12.jar/zip文件放到tomcat的common/lib目录下。否则会出来ojdbclib9/10库重复加载的错误。

使用oracle即时客户端是,本地服务名的建立可以在目录instantclient_10_2下建立tnsnames.ora下添加连接串,如:

SHDB=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL= TCP)(HOST= 10.1.1.236)(PORT= 1521)))

(CONNECT_DATA=

(SERVICE_NAME= shdb)

)

)

总结:

从使用上来说,oci必须在客户机上安装oracle客户端或才能连接,而thin就不需要,因此从使用上来讲thin还是更加方便,这也是thin比较常见的原因。

原理上来看,thin是纯java实现tcp/ip的c/s通讯;而oci方式,客户端通过native java

method调用c library访问服务端,而这个c library就是oci(oracle called

interface),因此这个oci总是需要随着oracle客户端安装(从oracle10.1.0开始,单独提供OCI Instant

Client,不用再完整的安装client)

它们分别是不同的驱动类别,oci是二类驱动, thin是四类驱动,但它们在功能上并无差异。

阅读剩余
THE END