我使用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等;
-
分享到:
相关推荐
Oracle instantclient 连接数据库服务器
linux服务器上 oracle instantclient 客户端。Oracle Instant client 是oracle提供的简便客户端, 支持多种平台。 内容包含 oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-...
Oracle Instant Client 11.2.0.1.0是轻量级Oracle客户端,用于连接访问Oracle 9i、10g、11g 11.2.0.1.0版本的Oracle数据库。 Oracle Instant Client11.2.0.1.0 安装程序包含OCI/ OCCI、JDBC-OCI SDK(软件开发工具...
通过win7远程连接linux服务器上的oracle
linux连接oracle工具,适用于x86及arm架构 oracle-instantclient-basic-21.6.0.0.0-1.x86_64.rpm oracle-instantclient-basic-21.6.0.0.0-1.x86_64.zip oracle-instantclient-devel-21.6.0.0.0-1.x86_64.rpm oracle-...
Oracle Instant Client 12 C Oracle12C客户端解压可用,内含配置说明
oracle instant client 32位,提供使用方法,链接如下: http://blog.csdn.net/s592652578/article/details/79447996
linux环境中的oracle客户端远程安装包 oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64....
linux下oracle12g客户端,包含常用工具如:sqlplus、sqlldr、exp、imp,是官网以下版本的集合,方便大家使用。 instantclient-basic-linux.x64-12.2.0.1.0.zip instantclient-sqlplus-linux.x64-12.2.0.1.0.zip ...
Oracle Instant Client windows大全 包含32位64位各版本 instantclient-basic-win32-10.1.0.5-20060419 instantclient-basic-win32-10.2.0.5 instantclient-basic-win32-11.1.0.7.0 instantclient-basic-nt-11.2....
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-basiclite-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-jdbc-...
自己制作的这个小巧的客户端(文件全部... 可以在network\admin目录下配置tnsnames.ora,使用服务名访问Oracle,也可以直接使用IP地址访问Oracle。 在Win7 32位及Win8.1 64位系统(需要.net2.0环境)上测试通过。
oracle数据库instantclient_11_2,连接,使用navicat连接oracle11,亲测有用
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-basiclite-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-jdbc-...
Oracle Instant Client 11g base 绿色版(32位),安装方便
oracle Instant Client(11.2.0.4) for Linux x86-64 (64-bit) zip包,解压后添加path路径直接就能用了 export PATH=/opt/oracle/instantclient_11_2:$PATH
最近需要在appserver上安装oracle client,前几天刚下载下来的oracle 12c,就拿来尝尝鲜,并随笔记录下来安装过程;请大家多多指教;
Oracle Instant client 是oracle提供的简便客户端, 支持多种平台. 可从oracle网站下载,我这里为了方便上传到这儿,navacat for oracle15亲测可用!
注意通过ODBC连接Oracle数据库时,驱动程序应该选择Oracle in instantclient_10_2。 注意: 1.如果你的计算机上已经安装了Oracle客户端,就不要再安装Oracle InstantClient了,否则可能因为配置冲突而导致Oracle...
oracle即时客户端 instantclient-basic-linux.x64-11.2.0.4.0.zip