`
yuanyu5237
  • 浏览: 162741 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux下使用oracle instantclient远程连接服务器

 
阅读更多

我使用securecrt远程到服务器上,想从这台服务器访问另外一台机器上的oracle。用的是redhat,64位机器。服务器上的oracle版本11.2。

1,先下载软件,http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

因为我既想用sqlplus访问,又想写php程序访问,所以下载了:

oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm 

oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm 

oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm

---> 安装软件直接 rpm -ivh oracle*

2,看一下安装好后,目录/usr/lib/oracle/11.1/client/lib/是否存在,或者名称是否和我这个一致,不一致改成你的,执行:

vi /etc/ld.so.conf.d/oracle-lib.conf 加入/usr/lib/oracle/11.2/client64/lib/

ldconfig

3,下载http://pecl.php.net/package/oci8里的软件oci8-1.4.7.tgz,自己选好版本

tar xzf oci8-1.4.7.tgz

cd oci8-1.4.7

phpize

./configure --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64/lib/

make && make install

4,在/etc/php.ini中加入:extension = "oci8.so";接着使用php -m查看模块是否已经被加载,或者重启apache,在phpinfo中查看是否有oci模块。

5,实际上安装了oracle instantclient之后就不需要再安装庞大的oracle客户端了,但到目前为止不论写程序还是用sqlplus去连数据库都会报错,连接方式:sqlplus '用户名/"密码"'@数据库服务名  (这里使用单双引号是为了避免密码中含有特殊字符@)

报错:ORA-12154: TNS: 无法解析指定的连接标识符

这是因为没有指定tnsnames.ora

6,在/usr/lib/oracle/11.2/client64目录下新建mkdir -p network/admin,然后在admin目录下新建tnsnames.ora,写入类似下面的内容:

 

#tnsnames.ora Network Configuration File: /usr/lib/oracle/11.2/client64/network/admin/tnsnames.ora
SDHE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.203.49)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dhe)
    )
  )
DHE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.191.23)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dhe)
    )
  )

 或者直接从oracle服务器端将相同目录下的这个文件拷贝过来。

再新建sqlnet.ora,写入:

 

SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

 7,配置环境变量:在~/.bashrc中写入:

 

export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$PATH:$ORACLE_HOME/bin

 8,再次用sqlplus登录, sqlplus '用户名/"密码"'@dhe,成功!此时,如果你的用户只有读权限,想读取某个库中某个表的数据,select * from 库名.表名

9,此时使用退格键会出现乱码,在~/.bashrc中写入stty erase ^H;查询中文也会乱码,请执行

 

sqlplus user/pass@ip/sid (sqlplus登录方式有很多种,此处不一一列举)

#得到如下结果:

SQL> select userenv('language') from dual; 

USERENV('LANGUAGE')

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

AMERICAN_AMERICA.AL32UTF8

设置本地字符集变量为上面查到的那个!

 


vim ~/.bashrc
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

10,如果想使用向上箭头键来获取历史命令,请安装并配置rlwrap,我没有试过~

11,如果想写一个php程序来检验配置,可参考下面的程序:

 

<?
$dbconn=OCILogon("dev","!@#","dhe");
if($dbconn){
    echo "yes";
}else{
    echo "no";
}
$sql ="select name from dhe.user";
$stmt = OCIParse($dbconn, $sql);
if(!$stmt) {
echo "<h1>ERROR - Could not parse SQL statement.</h1>";
OCILogoff($dbconn);
exit;
}
OCIExecute($stmt);
while( OCIFetchInto($stmt, $result_array) )
{
    echo "name=$result_array[0]\n";
}
OCILogoff($dbconn);
?>

 12,总结:我花了一天多的时间来配置这个,主要一开始不清楚是否需要安装oracle客户端(不是指instantclient),而且我访问的是别人的数据库,需要开权限,不清楚权限是否开通,我能使用的用户只有读取权限,这让我的操作受限,还有密码中含有@符号的问题也折腾了我很久,最后php程序怎么写,好像oracle的php api有两套,我也不清楚,当然最大的问题还是自己经验不足。

13,参考了很多文章不一一列举,如有问题,或本文有误,请回复指正,谢谢!

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

后续:

1,使用php test.php能成功访问oracle,但放到apache下,用浏览器访问则报错,无法解析指定的连接标识符

原因是我启动apache时使用service httpd restart,没有引入环境变量,所以自己写一个启动脚本:

 

#!/bin/bash

service httpd stop

export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$PATH:$ORACLE_HOME/bin
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

#service httpd start
/usr/sbin/apachectl start
echo "Start httpd:                                            [  OK  ]"

 2,查出中文乱码,在OCILogon("dev","@#","dhe", "gb2312");最后一个参数设置字符编码:gbk,utf8等;

-

分享到:
评论

相关推荐

    liunx oracle-instantclient9版本basic、sqlolus、tool安装包

    在Linux环境中,Oracle Instant Client是用于连接到Oracle数据库服务器的重要工具。这个软件包提供了一组客户端库和实用程序,使得应用程序无需在服务器端运行就可以执行SQL查询和管理Oracle数据库。在本例中,我们...

    oracle客户端 Oracle Instant Client

    - **下载**:首先,你需要从Oracle官方网站下载适用于你的操作系统的Instant Client版本,例如在本例中是`instantclient-basic-windows.x64-11.2.0.4.0`。 - **解压**:将下载的压缩包解压到一个合适的目录,通常...

    oracle instantclient-basic-linux.x64-11.2.0.4.0.zip

    以下是关于Oracle Instant Client以及其在Linux环境下使用的关键知识点: 1. **Oracle Instant Client组件**: - **Basic包**:这是基础组件,包含Oracle客户端必须的库文件,如oci.dll,用于基本的SQL和PL/SQL...

    windows oracle 客户端 instant client 12.2

    3. 远程数据库访问:在没有完整Oracle客户端的服务器或工作站上,可以通过Instant Client连接远程Oracle数据库。 4. 服务器监控工具:许多第三方工具依赖于Oracle Instant Client来监控Oracle数据库状态。 综上所述...

    Oracle_Instant_Client_12.2.0.1.0_linux64

    Oracle Instant Client是Oracle公司提供的一款轻量级的数据库连接工具,主要用于在不安装完整Oracle数据库服务器的情况下,使得应用程序能够与Oracle数据库进行通信。这个压缩包文件"Oracle_Instant_Client_12.2....

    oracle连接客户端instantclient_12_2

    标题中的"instantclient_12_2"表明这是Oracle Instant Client的12.2版本,适用于处理与Oracle 12c数据库相关的连接需求。 Oracle Instant Client的主要特点包括: 1. **体积小**: 相比完整的Oracle客户端,Instant ...

    Oracle Instant Client (Basic+sdk)打包

    Oracle Instant Client是Oracle公司提供的一款轻量级的数据库连接工具,它允许应用程序在不安装完整Oracle Database的情况下与Oracle数据库进行通信。在这个打包的版本中,包括了Basic组件和SDK组件,方便用户一次性...

    oracle instant client

    - `instantclient_11_2`:这表示是Oracle Instant Client的11.2版本。这个版本可能包含了基本的连接库、SQL*Plus命令行工具、OCI(Oracle Call Interface)库以及其他的实用工具。 2. **Oracle OCI (Oracle Call ...

    oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm

    总结来说,"oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm"是Oracle Instant Client的一个关键组件,为Linux用户提供了一个轻便的数据库访问解决方案,特别适合于需要在远程或独立环境下使用SQL*Plus或...

    instantclient_12_1全部下载

    Oracle Instant Client是Oracle公司提供的一款轻量级的数据库连接工具,主要用于在不安装完整Oracle数据库客户端的情况下,允许应用程序连接到远程Oracle数据库服务器。这个“instantclient_12_1”压缩包包含了该...

    oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64/sqlplus/devel

    它提供了基本的数据库连接功能,如OCI(Oracle Call Interface)和NLS(National Language Support),使得应用程序能够连接到远程Oracle数据库服务器,并处理多语言数据。 安装"oracle-instantclient11.2-basic-...

    instantclient_18_5.zip

    Oracle Instant Client是Oracle公司提供的一款轻量级的客户端软件,用于连接到Oracle数据库服务器,而“instantclient_18_5.zip”是一个包含了该客户端组件的压缩包文件。这个版本号18.5指的是Oracle Database 18c的...

    instantclient_11_2.zip

    "instantclient_11_2.zip" 是一个包含Oracle Instant Client 11.2版本的压缩包,适用于64位操作系统。 Oracle Instant Client主要包含以下组件: 1. **oci.dll**: Oracle Call Interface (OCI) 库,它是Oracle...

    oracle64位客户端 Instant Client v11.2.0.3.0(64-bit)

    Oracle 64位客户端Instant Client v11.2.0.3.0是Oracle...总之,Oracle 64位客户端Instant Client v11.2.0.3.0是一个高效、轻量级的解决方案,用于在64位环境下建立与Oracle数据库的连接,满足各种开发和运维需求。

    oracle官方64位客户端-instantclient-basic-windows.x64-11.2.0.4.0.zip

    总的来说,"oracle官方64位客户端-instantclient-basic-windows.x64-11.2.0.4.0.zip"是一个用于64位Windows系统的Oracle Instant Client基础版,它包含了连接Oracle数据库所需的最基本功能,适合那些需要快速、轻量...

    instantclient_11_2 64位与32位压缩包下载地址(百度云)

    Oracle Instant Client是一款轻量级的数据库连接工具,用于在客户端计算机上实现对Oracle数据库服务器的快速访问。这个软件包提供了必要的库和实用程序,使得应用程序能够连接到Oracle数据库,而无需完整安装Oracle ...

    oracle官方64位客户端-instantclient-basic-windows.x64-12.2.0.1.0

    Oracle Instant Client广泛应用于各种场景,如开发、测试、数据分析以及远程数据库访问等,尤其在需要在服务器或轻量级环境中建立Oracle数据库连接时,它是一个理想的选择。总的来说,Oracle Instant Client 12.2....

    instantclient-linux.x64-11.2.0.4.0_oracle.zip

    Oracle Instant Client是Oracle公司提供的一款轻量级的数据库连接工具,主要用于在Linux环境下与Oracle数据库进行通信。这个压缩包文件“instantclient-linux.x64-11.2.0.4.0_oracle.zip”包含了Oracle Instant ...

Global site tag (gtag.js) - Google Analytics