金句:如果没把握,最好先Google一下。
1、严格按照 https://oracle.github.io/odpi/doc/installation.html#linux 教程一步步做
包括下载的软件的版本,安装的位置,都按照要求准确实施
过程中要求安装 libaio ,本来是使用yum方式即可
但是采取各种方法
(1)用系统自带的yum
提示:
This system is not registered with RHN.
RHN support will be disabled.
Setting up Install Process
原因是这个linux版本并没有花钱注册RHN服务,没办法直接从官方下载
(2)换软件源
yum软件源配置文件位置为
cd /etc/yum.repos.d/
公司版本的linux对应的配置文件名称是 rhel-debuginfo.repo
先用 mv rhel-debuginfo.repo rhel-debuginfo.repo_sysbak 命令 备份
然后下载、试用了各种yum源的配置文件,包括:
wget http://docs.linuxtone.org/soft/lemp/CentOS-Base.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
等等
下载之后,都需要用 yum clean all 和 yum makecache 命令清除和生成一下本地缓存
但是,并没有什么卵用,于是尝试下载文件离线安装:
地址:https://pkgs.org/download/libaio
下载的rpm版本,直接执行
rpm -ivh libaio-0.3.109-13.el7.x86_64.rpm
报错了:
warning: libaio-0.3.109-13.el7.x86_64.rpm: Header V3 RSA/SHA256 signature: NOKEY, key ID f4a80eb5
error: Failed dependencies:
rpmlib(FileDigests) <= 4.6.0-1 is needed by libaio-0.3.109-13.el7.x86_64
rpmlib(PayloadIsXz) <= 5.2-1 is needed by libaio-0.3.109-13.el7.x86_64
缺少依赖包
于是,根据https://blog.csdn.net/jinwufeiyang/article/details/52069498 教程的方法
执行,注意后面的两个参数是不检测依赖包和强制安装
rpm -ivh libaio-0.3.109-13.el7.x86_64.rpm --nodeps --force
结果如下:
warning: libaio-0.3.109-13.el7.x86_64.rpm: Header V3 RSA/SHA256 signature: NOKEY, key ID f4a80eb5
Preparing... ########################################### [100%]
1:libaio ########################################### [100%]
error: unpacking of archive failed: cpio: Bad magic
虽然最后还是有报错,不过从后面验证来看,算是成功了
然后,执行程序进行验证
首先,需要到新安装的python虚拟环境的/bin目录下,执行 source activate 这个指令确实是需要source来执行的,不信可以vim activate文件看看,里面第一行写着呢。如果今后有类似的文件,都可以这么效仿一下。
执行成功之后
命令提示符前面会有个新的标记 (虚拟环境名称)
例如这样:(pyenv) [root@webreport2 pyenv]#
这时候就可以执行 python3 spidey.py 了
此处插播,如果oracle客户端安装不正确的话,会报错:
执行命令:
(pyenv) [root@webreport2 oracle]# python3 /app/pyenv/spider.py 2018-09-04 2018-09-05
报错:
Traceback (most recent call last):
File "/app/pyenv/spider.py", line 229, in <module>
main(viewdate)
File "/app/pyenv/spider.py", line 93, in main
sqlresult = query('dw_user.t_ciitc_sign_dict')
File "/app/pyenv/spider.py", line 50, in query
conn = cx_Oracle.connect('dw_user/dw_user@10.1.65.118:1521/octopus_srv1')
cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "libclntsh.so: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html#linux for help
从字面意思来看,安装错误就是找不到对应的系统文件。
此处的原因,是一开始按照网上的“野教程”实施的,另外考虑下载的客户端程序版本也不对,导致的问题。
后续严格执行 https://oracle.github.io/odpi/doc/installation.html#linux 的要求
再次执行命令:
(pyenv) [root@webreport2 pyenv]# python3 spider.py 2018-09-04 2018-09-05
报错:
Traceback (most recent call last):
File "spider.py", line 229, in <module>
main(viewdate)
File "spider.py", line 93, in main
sqlresult = query('dw_user.t_ciitc_sign_dict')
File "spider.py", line 50, in query
conn = cx_Oracle.connect('dw_user/dw_user@10.1.65.118:1521/octopus_srv1')
cx_Oracle.DatabaseError: ORA-24454: client host name is not set
这么看来,oracle客户端是正常工作了,可以反馈正确的oracle错误了。从错误来看,是主机名称配置不对。但程序里用的是ip地址。
网上找答案,参考的这篇 https://blog.csdn.net/cd_home/article/details/80309167
执行:
sudo /bin/bash -c "echo '127.0.1.1 ${HOSTNAME}' >> /etc/hosts"
再次执行命令,就正常了
(pyenv) [root@webreport2 pyenv]# python3 spider.py 2018-09-04 2018-09-05
共65家数据待导入
insert into dw_user.T_CIITC_SIGN_LOG_AREA (C_CONTENT,T_INSERT_TM) values('安邦2018-09-04日数据导入完毕','2018-09-07 11:22:13')
安邦2018-09-04日数据导入完毕
insert into dw_user.T_CIITC_SIGN_LOG_AREA (C_CONTENT,T_INSERT_TM) values('安诚2018-09-04日数据导入完毕','2018-09-07 11:22:35')
安诚2018-09-04日数据导入完毕
insert into dw_user.T_CIITC_SIGN_LOG_AREA (C_CONTENT,T_INSERT_TM) values('安华2018-09-04日数据导入完毕','2018-09-07 11:22:48')
安华2018-09-04日数据导入完毕
insert into dw_user.T_CIITC_SIGN_LOG_AREA (C_CONTENT,T_INSERT_TM) values('安联2018-09-04日数据导入完毕','2018-09-07 11:22:53')
查看 配置文件 vim /etc/hosts
多了一行
127.0.1.1 webreport2
因此可见前面所提的主机名称配置不对,是运行程序的主机的名称没有被解析(不是数据库主机),这个似乎和python程序有关。今后类似的报错也可以考虑这个方法