linux64位系统Oracle10g异构mysql查询搭建过程
一、系统环境介绍
Oracle数据库服务器操作系统:RHEL4.8 64位,IP:192.168.12.242
Oracle数据库版本:oracle 10g
Mysql数据库服务器操作系统:RHEL 4.8 32位,IP:192.168.5.186
Mysql数据库版本:mysql-5.1.47
二、安装所需软件包:
MySQL-client-5.1.50-1.glibc23.i386.rpm
http://gd.tuwien.ac.at/db/mysql/Downloads/MySQL-5.1/MySQL-client-5.1.50-1.glibc23.i386.rpm
MySQL-client-5.1.50-1.glibc23.x86_64.rpm
http://gd.tuwien.ac.at/db/mysql/Downloads/MySQL-5.1/MySQL-client-5.1.50-1.glibc23.x86_64.rpm
mysql-connector-odbc-3.51.27-0.i386.rpm
http://mysql.borsen.dk/Downloads/Connector-ODBC/3.51/mysql-connector-odbc-3.51.27-0.i386.rpm
mysql-connector-odbc-3.51.27-0.x86_64.rpm
http://mysql.borsen.dk/Downloads/Connector-ODBC/3.51/mysql-connector-odbc-3.51.27-0.x86_64.rpm
三、安装过程
1、在Oracle数据库服务器上安装mysql客户端(如果已经安装过的话,可以跳过)
rpm -ivh MySQL-client-5.1.50-1.glibc23.i386.rpm
rpm -ivh MySQL-client-5.1.50-1.glibc23.x86_64.rpm
如果安装的过程中遇到file /usr/bin/msql2mysql from install of MySQL-client-5.1.50-1.glibc23 conflicts with file from package mysql-4.1.22-2.el4这样的报冲突的情况,需要卸载mysql-4.1.22-2.el4,之后在重新安装。不过笔者在安装的过程中还遇到了:
[root@myora ~]# rpm -e mysql-4.1.22-2.el4
error: Failed dependencies:
libmysqlclient.so.14 is needed by (installed) cyrus-sasl-sql-2.1.19-14.i386
libmysqlclient.so.14(libmysqlclient_14) is needed by (installed) cyrus-sasl-sql-2.1.19-14.i386
这样的错误,处理的方法当然是卸载cyrus-sasl-sql-2.1.19-14.i386,之后在卸载mysql-4.1.22-2.el4。
测试是不是可以连接mysql数据库:
mysql -h 192.168.5.186 -uuser -ppassword
2、安装mysql-connector-odbc
rpm -ivh mysql-connector-odbc-3.51.27-0.i386.rpm
rpm -ivh mysql-connector-odbc-3.51.27-0.x86_64.rpm
其实对于上面的包,只需要安装32位的包就可以了,但是为了稳妥起见,笔者还是将64位的包也安装了上。
到这里所有的软件已经安装完毕,是不是很简单呢?但是笔者在之前的测试过程中走了很多的弯路,比如安装了mysql-connector-odbc-5.1.7-0.x86_64.rpm和mysql-connector-odbc-5.1.7-0.i386.rpm。造成一些的问题,这中间的区区折折真的是费了很多神。其实真正回来,安装了自己所需要的东西才发现,其实自己离真正的目的很近,有时候只需要退一步想想。
四、 配置Oracle服务器的/etc/odbc.ini文件,测试ODBC工作
(1)vi /etc/odbc.ini,填入如下内容:
[mysqlora]
Description = MySQL test database
Driver = mysql
SERVER = 192.168.5.186
USER =user
PASSWORD = password
PORT = 3306
DATABASE = test
Option = 3
charset = gbk
(2)less /etc/odbcinst.ini,为如下内容:
[mysql]
Description = MySQL driver.
Socket =
DRIVER = /usr/lib/libmyodbc3.so
UsageCount = 1
[MySQL ODBC 3.51 Driver]
DRIVER = /usr/lib64/libmyodbc3.so
UsageCount = 1
为了测试isql,我们将文件中的msyql相关部分DRIVER = /usr/lib/libmyodbc3.so改为DRIVER = /usr/lib64/libmyodbc3.so
在编辑好上面的文件之后,我们使用isql进行测试,命令为:
isql –v mysqlora如果显示:
Connected!
sql-statement
help [tablename]
quit
则说明isql是可以成功连接的。
在测试完毕之后我们再改回来,不然会出现下面注的内容2中的问题。这主要是以为64位系统使用的isql是64位的版本,因此在测试的过程中,如要测试isql的话,需要更改为64位的包。而使用odbc和MySQL连接时则是使用的是32位的libmyodbc3.so,因此需要在测试isql可用后恢复原设置。
五、编辑oracle的配置文件:
(1)编辑oracle的hs配置文件$ORACLE_HOME/hs/admin/initmysqlora.ora
vi $ORACLE_HOME/hs/admin/initmysqlora.ora,输入:
HS_FDS_CONNECT_INFO = mysqlora
HS_FDS_TRACE_LEVEL = debug #该参数需要在测试跟进完毕后,置为Off,不然会影响性能。
HS_FDS_TRACE_FILE_NAME = mysqlora.trc
HS_FDS_SHAREABLE_NAME = /usr/lib/libodbc.so
set ODBCINI = /etc/odbc.ini
set LD_LIBRARY_PATH = /usr/lib:/usr/lib64:$LD_LIBRARY_PATH
(2)编辑Oracle所在计算机的Oracle listener的配置文件,建立一个模拟Oracle Listener的监听方式,为将来建立dblink做准备
vi $ORACLE_HOME/network/admin/listener.ora 修改为
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /usr/oracle/product/10.2.0)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = mysqlora)
(ORACLE_HOME = /usr/oracle/product/10.2.0)
(PROGRAM = hsodbc)
(ENVS=LD_LIBRARY_PATH=/usr/oracle/product/10.2.0/lib32:/usr/lib64:/usr/lib:/usr/oracle/product/10.2.0/lib)
)
)
(3)使监听器生效。
su – oracle
lsnrctl reload
(4)编辑Oracle所在计算机中的tnsnames.ora文件,便于建立dblink。注意,此tnsnames的配置可以支持tnsping,但是不能支持sqlplus登录,只用于dblink
vi $ORACLE_HOME /network/admin/tnsnames.ora,加入如下内容:
mysqlora =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
( SID= mysqlora))
(HS=OK)
)
(5)在Oracle Database建立dblink
sqlplus / as sysdba
mysql> create public database link mysqlora
connect to "ora" identified by "ora"
using 'mysqlora';
要注意用户名和密码处需要用双引号,否则Oracle所传输的都是大写字母,可能无法登录进入MySQL。
(6)测试mysql表的查询。
在sqlplus中输入:
select * from dual@mysqlora;
注:
(1)如果搭建过程中,遇到
ERROR at line 1:
ORA-28545: error diagnosed by Net8 when connecting to an agent
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: preceding 2 lines from MYODBC3
这样的类似错误,请检查你的listener.ora,以确认无误,之后在进行尝试。
(2)笔者在搭建过程中,发现
ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[Generic Connectivity Using ODBC]DRV_InitTdp: errors.h (2112): ;
[unixODBC][Driver Manager]Can't open lib '/usr/lib64/libmyodbc3.so' :
/usr/lib64/libmyodbc3.so: cannot open shared object file: No such file or
directory (SQL State: 01000; SQL Code: 0)
ORA-02063: preceding 2 lines from MYSQLORA
将/etc/odbcinst.ini中的Driver = /usr/lib64/libmyodbc3.so改为Driver = /usr/lib/libmyodbc3.so或者是重装32位的mysql-connector-odbc-3.51.27-0.i386.rpm进行解决。