环境:oracle 11.2.0.1.0 RHEL5.3 64bit mysql Server version: 5.5.91:下载[ODBC Driver Manager] unionODBC2.2.14,解压后放入/u01/app/tools/unionodbc 目录下[oracle tools]$ ls /u01/app/tools/unionodbc/bin include lib2:下载mysql-connector-odbc-3.51.30-linux-rhel5-x86-64bit.tar.gz解压重命名到my5 [oracle@szmlserver12_32 tools]$ ls /u01/app/tools/my5 odbc.ini unionodbc3:配置 ODBC data source for MySQLConnector/ODBC driver[oracle tools]$ cat /u01/app/tools/odbc.ini [myodbc3]Driver = /u01/app/tools/my5/lib/libmyodbc3.soSERVER = 22.4.22.16PORT = 3306USER = softPASSWORD = Ugfd3589DATABASE = estoreOPTION = 3SOCKET = 4:设置环境变量[oracle tools]$ cat ~/.bash_profile PATH=$PATH:$HOME/binexport PATHexport ORACLE_BASE=/u01/appexport ORACLE_HOME=/u01/app/oracleexport ORACLE_SID=hidbexportexport LD_LIBRARY_PATH=$ORACLE_HOME/lib:/u01/app/tools/unionodbc/libexport ODBCINI=/u01/app/tools/odbc.iniexport PATH=$ORACLE_HOME/bin:$PATH:/u01/app/tools/unionodbc/bin红色为新增部分5:测试连接成功[oracle tools]$ isql myodbc3 -v+---------------------------------------+| Connected! || || sql-statement || help [tablename] || quit || |+---------------------------------------+SQL> 6:配置listener.ora[grid@wonder ~]$ cat /u01/app/11.2.0/grid/network/admin/listener.ora# listener.ora Network Configuration File: /u01/app/11.2.0/grid/network/admin/listener.ora# Generated by Oracle configuration tools.LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = wonder.easou.com)(PORT = 1521)) ) )ADR_BASE_LISTENER = /u01/app/11.2.0ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON # line added by AgentSUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFFSID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME= myodbc3) (ORACLE_HOME= /u01/app/oracle) (PROGRAM = dg4odbc) (ENVS=LD_LIBRARY_PATH=/u01/app/oracle/bin:/u01/app/tools/unionodbc/lib:/u01/app/tools/my5/lib) ) )7:配置tnsnames.ora,最后增加如下内容myodbc3= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SID = myodbc3) )(HS = OK) )8:配置HS[oracle@wonder tools]$ cat /u01/app/oracle/hs/admin/initmyodbc3.ora HS_FDS_CONNECT_INFO = myodbc3HS_FDS_TRACE_LEVEL = offHS_FDS_SHAREABLE_NAME = /u01/app/tools/unionodbc/lib/libodbc.soHS_LANGUAGE=american_america.we8iso8859p1HS_NLS_NCHAR=UCS2## ODBC specific environment variables#set ODBCINI= /u01/app/tools/odbc.ini9:重启监听[grid@wonder ~]$ lsnrctl stop[grid@wonder ~]$ lsnrctl start10:配置DBLINKcreate database link myodbc connect to "soft" identified by "Ugfd3589" using 'myodbc3'; --前面要双引号才不报错SQL> select count(*) from "acct_user"@myodbc; COUNT(*)----------
13
但是发现 select * from "acct_user"@myodbc 时,只会显示一条数据,晕倒了,经google发现,通过更新驱动可以得到解决
下面的步骤是在上面的基础上更换了最新ODBC 5.5.2解决了问题,以及一oracle主机连接2个mysql服务器例子:
下载mysql-connector-odbc-5.2.2-linux-glibc2.3-x86-64bit.tar
http://www.mysql.com/downloads/connector/odbc/#downloads1:更换配置odbc.ini[oracle@wonder hs]$ cat /u01/app/tools/odbc.ini[mysql203]Driver = /u01/app/tools/my5/lib/libmyodbc5w.soSERVER = 120.2.93.3PORT = 3306USER = search_weiPASSWORD = aaaaDATABASE = search_weiOPTION = 3SOCKET = [mysql213]Driver = /u01/app/tools/my5/lib/libmyodbc5w.soSERVER = 125.91.0.213PORT = 3306USER = droidPASSWORD = bbbbDATABASE = droidOPTION = 3SOCKET =2: hs/admin 中[oracle@wonder hs]$ ls admin/extproc.ora initmysql203.ora listener.ora.sampleinitdg4odbc.ora initmysql213.ora tnsnames.ora.sample[oracle@wonder hs]$ cat admin/initmysql213.ora HS_FDS_CONNECT_INFO = mysql213HS_FDS_TRACE_LEVEL = debugHS_FDS_SHAREABLE_NAME = /u01/app/tools/unionodbc/lib/libodbc.soHS_LANGUAGE=american_america.we8iso8859p1HS_NLS_NCHAR=UCS2#SELECT NULL COLUMNHS_FDS_SQLLEN_INTERPRETATION = 32 #DIRECT ACESS MYSQL INT COLUMHS_FDS_FETCH_ROWS=1set ODBCINI= /u01/app/tools/odbc.ini[oracle@wonder hs]$ cat admin/initmysql203.ora HS_FDS_CONNECT_INFO = mysql203HS_FDS_TRACE_LEVEL = debugHS_FDS_SHAREABLE_NAME = /u01/app/tools/unionodbc/lib/libodbc.soHS_LANGUAGE=american_america.we8iso8859p1HS_NLS_NCHAR=UCS2set ODBCINI= /u01/app/tools/odbc.ini3: tnsnames.ora mysql213= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SID = mysql213) ) (HS = OK) )mysql203= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SID = mysql203) ) (HS = OK) )4: listener.oraSID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME= mysql203) (ORACLE_HOME= /u01/app/oracle) (PROGRAM = dg4odbc) (ENVS=LD_LIBRARY_PATH=/u01/app/oracle/bin:/u01/app/tools/unionodbc/lib:/u01/app/tools/my5/lib) ) (SID_DESC= (SID_NAME= mysql213) (ORACLE_HOME= /u01/app/oracle) (PROGRAM = dg4odbc) (ENVS=LD_LIBRARY_PATH=/u01/app/oracle/bin:/u01/app/tools/unionodbc/lib:/u01/app/tools/my5/lib) ) )5:重启监听6:分别建立到3和203的dblink,验证通过create database link mysql203 connect to "search_wei" identified by "aaaa" using 'mysql203';select * from "t_info_stat"@mysql203;SQL> create database link mysql213 connect to "droid" identified by "bbbb" using 'mysql213';select * from "ums_module"@mysql213;哈哈!大功搞成!