四、 配置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进行解决。