我使用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;
|
|
---------------------------------------------------- |
|
AMERICAN_AMERICA.AL32UTF8 |
设置本地字符集变量为上面查到的那个!
|
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等;
-
分享到:
相关推荐
在Linux环境中,Oracle Instant Client是用于连接到Oracle数据库服务器的重要工具。这个软件包提供了一组客户端库和实用程序,使得应用程序无需在服务器端运行就可以执行SQL查询和管理Oracle数据库。在本例中,我们...
- **下载**:首先,你需要从Oracle官方网站下载适用于你的操作系统的Instant Client版本,例如在本例中是`instantclient-basic-windows.x64-11.2.0.4.0`。 - **解压**:将下载的压缩包解压到一个合适的目录,通常...
以下是关于Oracle Instant Client以及其在Linux环境下使用的关键知识点: 1. **Oracle Instant Client组件**: - **Basic包**:这是基础组件,包含Oracle客户端必须的库文件,如oci.dll,用于基本的SQL和PL/SQL...
3. 远程数据库访问:在没有完整Oracle客户端的服务器或工作站上,可以通过Instant Client连接远程Oracle数据库。 4. 服务器监控工具:许多第三方工具依赖于Oracle Instant Client来监控Oracle数据库状态。 综上所述...
Oracle Instant Client是Oracle公司提供的一款轻量级的数据库连接工具,主要用于在不安装完整Oracle数据库服务器的情况下,使得应用程序能够与Oracle数据库进行通信。这个压缩包文件"Oracle_Instant_Client_12.2....
标题中的"instantclient_12_2"表明这是Oracle Instant Client的12.2版本,适用于处理与Oracle 12c数据库相关的连接需求。 Oracle Instant Client的主要特点包括: 1. **体积小**: 相比完整的Oracle客户端,Instant ...
Oracle Instant Client是Oracle公司提供的一款轻量级的数据库连接工具,它允许应用程序在不安装完整Oracle Database的情况下与Oracle数据库进行通信。在这个打包的版本中,包括了Basic组件和SDK组件,方便用户一次性...
- `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 Instant Client的一个关键组件,为Linux用户提供了一个轻便的数据库访问解决方案,特别适合于需要在远程或独立环境下使用SQL*Plus或...
Oracle Instant Client是Oracle公司提供的一款轻量级的数据库连接工具,主要用于在不安装完整Oracle数据库客户端的情况下,允许应用程序连接到远程Oracle数据库服务器。这个“instantclient_12_1”压缩包包含了该...
它提供了基本的数据库连接功能,如OCI(Oracle Call Interface)和NLS(National Language Support),使得应用程序能够连接到远程Oracle数据库服务器,并处理多语言数据。 安装"oracle-instantclient11.2-basic-...
Oracle Instant Client是Oracle公司提供的一款轻量级的客户端软件,用于连接到Oracle数据库服务器,而“instantclient_18_5.zip”是一个包含了该客户端组件的压缩包文件。这个版本号18.5指的是Oracle Database 18c的...
"instantclient_11_2.zip" 是一个包含Oracle Instant Client 11.2版本的压缩包,适用于64位操作系统。 Oracle Instant Client主要包含以下组件: 1. **oci.dll**: Oracle Call Interface (OCI) 库,它是Oracle...
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"是一个用于64位Windows系统的Oracle Instant Client基础版,它包含了连接Oracle数据库所需的最基本功能,适合那些需要快速、轻量...
Oracle Instant Client是一款轻量级的数据库连接工具,用于在客户端计算机上实现对Oracle数据库服务器的快速访问。这个软件包提供了必要的库和实用程序,使得应用程序能够连接到Oracle数据库,而无需完整安装Oracle ...
Oracle Instant Client广泛应用于各种场景,如开发、测试、数据分析以及远程数据库访问等,尤其在需要在服务器或轻量级环境中建立Oracle数据库连接时,它是一个理想的选择。总的来说,Oracle Instant Client 12.2....
Oracle Instant Client是Oracle公司提供的一款轻量级的数据库连接工具,主要用于在Linux环境下与Oracle数据库进行通信。这个压缩包文件“instantclient-linux.x64-11.2.0.4.0_oracle.zip”包含了Oracle Instant ...