此文章是为了记录在ubuntu虚拟机中搭建连接windows本地oracle数据库过程的总结。而搭建此连接的目的是为了接下来的python的学习,模拟在linux环境中,python脚本进程与数据库底层交互的方式。此次搭建过程找了网上很多的方法,此文章将对安装过程中出现的一些坑进行说明。
- 配置的前提
- 配置的步骤
前提
- 需要在windows本地已经安装完全且可以使用的oracle
- 一个安装好的ubuntu虚拟机,且关闭与本地windows之间的防火墙,具体方法请百度。
- 虚拟机与windows可以网络互通,即相互ping两端的ip地址是可以ping通的。
步骤
1. 先下载oracle的linux版的客户端连接程序包(下载需注册Oracle账户免费下载)。
下载地址链接:https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
由于是准备安装在linux环境中,所以要下载.rpm文件,下载时请注意自己oracle的版本对应下载。
由于我windows本地安装的oracle是10g版本,本地windows使用的sqlplus是10.2.0.1.0
所以为了保证虚拟机环境与本地尽量一致,因此在官网下载的linux客户端版本是
oracle-instantclient-basic-10.2.0.5-1.x86_64.rpm
oracle-instantclient-sqlplus-10.2.0.5-1.x86_64.rpm
将其复制到ubuntu虚拟机中后,进行解压安装,因为是rpm文件,因此使用rpm命令解压文件时,出现了以下问题
问题一:
rpm:RPM should not be used directly install RPM packages.use Alien instead! rpm:However assuming you know what are you doing .....
用rpm无法直接解压安装。
解决办法:安装alien代替rpm进行解压安装
执行命令: sudo apt-get install alien
问题二:
briup@briup-virtual-machine:~$ sudo apt-get install alien
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
alien : 依赖: debhelper (>= 7) 但是它将不会被安装
依赖: dpkg-dev 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
在安装alien时候出现了依赖报错,原因在于已经安装的各软件之间版本冲突问题,出现了不兼容。
已尝试的办法有:
i. 切换下载源,将ubuntu的网站切换成了阿里云,但尝试无效。
ii. 根据一些网站提供的方法,依赖中出现了(>=数字) 就直接安装该数字的版本,如上面的debhelper (>= 7),即安装sudo apt-get install debhelper = 7 后出现问题,未找到该安装包。可当安装上文中不匹配的第二个包dpkg-dev时,又出现了以下报错
dpkg-dev : 依赖: libdpkg-perl (= 1.17.5ubuntu5) 但是 1.17.5ubuntu5.3 正要被安装
推荐: build-essential 但是它将不会被安装
推荐: fakeroot
推荐: libalgorithm-merge-perl 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
于是再次尝试将这些不匹配的安装包一个个用sudo apt-get install 包名 进行安装时,依然有新的版本不匹配报错或者找不到安装包报错(切换了仓库源依然找不到)。
可能原因:有一些包在以前安装其他软件的时候已经安装过,因此在此时安装时会自动匹配,而不会重新安装,但是以前安装的版本与现在的软件可能出现冲突,因此强行寻找匹配的软件包很难找到。
解决办法:
将涉及的已经安装的软件包全部卸载,用此次的安装包重新安装。
使用命令: sudo apt-get remove 安装包名
等全部卸载完全后,再重新安装rpm与alien即可成功安装。
2. 安装完alien之后,首先使用alien解压两个rpm文件
alien oracle-instantclient-basic-10.2.0.5-1.x86_64.rpm
alien oracle-instantclient-sqlplus-10.2.0.5-1.x86_64.rpm
解压完成后生成两个同名.deb文件,再用dkpg去进行安装
dpkg -i oracle-instantclient-basic_10.2.0.5-2_amd64.deb
dpkg -i oracle-instantclient-sqlplus_10.2.0.5-2_amd64.deb
结束后便已经安装完成。默认安装路径为(/usr/lib/oracle/11.2/client64)
3. 切换到路径/usr/lib/oracle/10.2.x.x(即版本号)/client64下,新建文件夹/network/admin
cd /usr/lib/oracle/10.2.0.5/client64
mkdir -p /network/admin
再切换到/usr/lib/oracle/11.2/client64/network/admin下
cd /usr/lib/oracle/10.2.0.5/client64/network/admin
新建文件tnsnames.ora
4.找到本地windows所安装的oracle中的tnsnames.ora文件,将其直接复制到虚拟机的tnsnames.ora文件中。
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 此处是你的本地windows名,可在电脑属性里查看)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
5.修改环境变量
vim /etc/profile(可能需要切换至root等管理员权限才能修改)
export ORACLE_HOME=/usr/lib/oracle/10.2.x.x(即版本号)/client64 export TNS_ADMIN=$ORACLE_HOME/network/admin export NLS_LANG='simplified chinese_china'.ZHS16GBK export LD_LIBRARY_PATH=$ORACLE_HOME/lib export PATH=$ORACLE_HOME/bin:$PATH
添加完成后对其进行保存
生效环境变量:source /etc/profile
6.测试
echo $ORACLE_HOME
输出结果:
/usr/lib/oracle/10.2.0.5/client64
sqlplus briup(数据库用户名)/root(数据库用户密码)@XE
显示结果:
SQL*Plus: Release 10.2.*.5.0 - Production on ****** 7 13:3**** 2022 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. ********: Oracle Database 10g ****** Release 10.2***1.0 - Production
问题:此处显示连接正常,但是出现了中文乱码现象
解决办法:
在本地oracle中执行以下sql:
SQL> select userenv(‘language’) from dual;
结果为:
USERENV('LANGUAGE')
--------------------------------------------------------------------------------
SIMPLIFIED CHINESE_CHINA.AL32UTF8
SQL>
因此将之前修改的环境变量(/etc/profile)中的
export NLS_LANG=‘simplified chinese_china’.ZHS16GBK’
值修改为oracle中查询到的SIMPLIFIED CHINESE_CHINA.AL32UTF8
即export NLS_LANG=“SIMPLIFIED CHINESE_CHINA.AL32UTF8”
保存退出即可。
再次打开sqlplus后结果如下:
SQL*Plus: Release 10.2.0.5.0 - Production on 星期二 6月 7 13:37:41 2022 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. 连接到: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
自此配置结束。
下面便可以在ubuntu虚拟机中,对本地的oracle数据库进行对应的操作了。



