linux连接oracle数据库

有时候需要通过linux服务器连接远程的oracle数据库,那么应该如何操作呢

环境:centos7

工具:

1、Oracle即时客户端(instantclient_18_5)

2、sqlplus软件包,用来执行sqlplus语句

3、cx_Oracle(可选,如果用python去连接就需要,否则不用)

依赖包:libaio

yum -y install libaio*

安装步骤:

1、首先将上述两个客户端文件解压到同一文件夹下,下图表示解压到/usr/local/instantclient_18_5路径下,如图:

2、在network/admin目录下创建文件tnsnames.ora文件,写入连接oracle数据库的文件内容,如图:

上图中HOST位置写入oracle的IP地址,PORT写上端口,SERVICE_NAME写数据库实例名,最左上角的名字可定义

3、接下来配置环境变量,修改文件vim /etc/profile,添加内容如下:

export ora_home=/usr/local           # instantclient_18_5所在目录
export PATH=$PATH:$ora_home/instantclient_18_5
export ORACLE_BASE=$ora_home
export ORACLE_HOME=$ORACLE_BASE/instantclient_18_5
export LD_LIBRARY_PATH=$ORACLE_HOME
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

4、 如果机器上没有其他 Oracle 软件会受到影响,请将 Instant Client 永久添加到运行时链接路径, 使用 sudo 或作为 root 用户:

sudo sh -c "echo /usr/local/instantclient_18_5 > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig

#注意:如果不配置这个库,那么将会出现错误提示,DPI-1047: 64-bit Oracle Client library cannot be loaded: "libclntsh.so: cannot open shared object file: No such file or directory"

4、接下来在linux命令窗口执行命令sqlplus登录oracle,命令如下:

sqlplus username/password@//ip:port/orcl
#注意:orcl名字为oracle的实例名字,每个系统不一定,以具体情况为准

执行查询命令后,如图:

从上图可以看出,通过Linux连接oracle成功,并可以查询数据

通过Python方式查询数据

环境:python3

模块名:json、subprocess、cx_Oracle、time

cx_Oracle模块可以通过pip3 install cx_Oracle的方式来安装  

python3脚本文件内容如下:

#!/usr/bin/python3
import cx_Oracle              #导入魔窟四
import subprocess
import time
import json
def get_value():
    ip = subprocess.getoutput("hostname -I")   #获取IP
    timestamp = int(time.time())
    result = []
    db = cx_Oracle.connect('username','password','ip:1521/orcl')
    r = db.cursor()
    sql = "select sysdate - (select max(insert_date) from t7107 ) from dual"
    r.execute(sql)
    get_all = r.fetchall()
    get_result = get_all[0][0]
    db.close()
    get_value = round(get_result,2)

标签