linux64位系统Oracle11g异构mysql透明网关搭建过程(dg4odbc)

linux64位系统Oracle11g异构mysql透明网关搭建过程(dg4odbc)

第一部分ODBC配置

一、所需的包

mysql-connector-odbc-5.1.8-1.rhel5.x86_64.rpm

mysql-connector-odbc-5.1.8-1.rhel5.i386.rpm

unixODBC-2.2.11-7.1.x86_64.rpm

unixODBC-2.2.11-7.1.i386.rpm

.

二、  配置Oracle服务器的/etc/odbc.ini文件,测试ODBC工作

(1)vi /etc/odbc.ini,填入如下内容:

[myodbc]
Descriptio      = mysql
Driver          = mysql
Server          = 123.25.12.5
USER            = root
PASSWORD        = mysql123
Database        = test
Port            = 3306
Socket          =/var/lib/mysql/mysql.sock
Option          = 3
Charset          = gbk
Stmt            =

(2)vi etc/odbcinst.ini,为如下内容:

[mysql]
Description     = mysql
Driver          = /usr/lib/libmyodbc5.so
Driver64        = /usr/lib64/libmyodbc5.so
Setup           = /usr/lib/libodbcmyS.so
Setup64         = /usr/lib64/libodbcmyS.so
UsageCoun       = 1
CPTimeout       =
CPReuse         =

(3)测试 isql -v myodbc

+---------------------------------------+

| Connected!                            |

|                                       |

| sql-statement                         |

| help [tablename]                      |

| quit                                  |

|                                       |

+---------------------------------------+

能够连接上表示ODBC配置成功

如果报如下错误:
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect
通过设置环境变量来解决

export ODBCINI=/etc/odbc.ini
export ODBCSYSINI=/etc

第二部分ORACLE配置

一、在/opt/oracle/product/OraHome/hs/admin/目录下,配置init+myodbc.ora文件,  init myodbc.ora命名方式为init+服务名+.ora。添加如下内容

# HS init parameters
#
HS_FDS_CONNECT_INFO = myodbc
HS_FDS_TRACE_LEVEL = OFF
HS_FDS_SHAREABLE_NAME = /usr/lib64/libmyodbc5.so
HS_LANGUAGE=AMERICAN_AMERICA.ZHS16GBK

HS_FDS_SQLLEN_INTERPRETATION=32
HS_LONG_PIECE_TRANSFER_SIZE=1258291

# ODBC specific environment variables
#
#set DBCINI=<full path name of the odbc initilization file>
set DBCINI=/etc/odbc.ini

HS_FDS_CONNECT_INFO为服务名,与前面保持一致

HS_FDS_TRACE_LEVEL为日志跟踪级别,使用时可以设为debug

HS_FDS_SHAREABLE_NAME为ODBC驱动

二、修改tnsnames.ora文件,添加如下内容

MYODBC =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.105)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = MYODBC)
    )
    (HS = OK)
  )

其中SID为前面定义的服务名

HOST为本机的机器名或者IP

PORT为本机的数据库监听器端口

 

三、修改listener.ora文件,如下内容

# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC=
          (SID_NAME = myodbc)
          (ORACLE_HOME=/opt/oracle/product/OraHome)
          (PROGRAM = dg4odbc)
    )
  )


SZNDCRM =
     (ADDRESS_LIST=
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.105)(PORT = 1521))
      (ADDRESS=  (PROTOCOL=ipc)(KEY=PNPKEY))
  )



ADR_BASE_SZNDCRM = /opt/oracle

SID_NAME为服务名

PROGRAM为使用dg4odbc驱动

 

四、重新启动listener,基本内容如下:

lsnrctl stop
lsnrctl start

lsnrctl status

Service "mysql" has 1 instance(s).

  Instance "mysql", status UNKNOWN, has 1 handler(s) for this service...

如果看到mysql这个服务,则表示listener.ora配置成功

 

五、创建oracle中创建数据库链接

sqlplus scott/tiger

create database link ln_mysql connect to "root" identified by "mysql123" using 'myodbc';

 

测试查看mysql中的表

select * from "mytest"@ln_mysql;

 c1 c2
---------- ----------
1    a
2    b

 

注:

(1)在搭建好之后导数据时候发现

1 2 3 4 5 6 

中间总是有一个空格

解决办法是在odbc.ini中加入

Charset  = gbk

(2)如果搭建过程中,遇到

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,以确认无误,之后在进行尝试。

(3)如果搭建过程中,遇到

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进行解决。

(4) 如果搭建过程中,遇到

ERROR at line 1:

ORA-28511: lost RPC connection to heterogeneous remote agent using

SID=ORA-28511: lost RPC connection to heterogeneous remote agent using

SID=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=s1.db.sns.mdc.139.com)(PORT=1521))

(CONNECT_DATA=(SID=my23_3322)))

ORA-02063: preceding line from LN_MY23_3322

Process ID: 18585

Session ID: 96 Serial number: 207

在initmy23_3322.ora文件中添加如下参数

HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P1

 

(5) 从异种数据库拷贝大数据量时,报错如下

insert into auth_user select * from auth_user@ln_my23_3322

*

ERROR at line 1:

ORA-03113: end-of-file on communication channel

Process ID: 19180

Session ID: 96 Serial number: 227

 

有如下报错:

ORA-07445: exception encountered: core dump [npixfc()+243] [SIGSEGV] [ADDR:0x7FFF086B7C08] [PC:0x59BAB0D] [Address not mapped to object] []

ORA-28511: lost RPC connection to heterogeneous remote agent using SID=ORA-28511: lost RPC connection to heterogeneous remote agent using SID=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=s1.db.sns.mdc.139.com)(PORT=1521))(CONNECT_DATA=(SID=my23_3322)))

ORA-02063: preceding line from LN_MY23_3322

机器内存有限无法再提供更多的内存,这可能是个BUG,暂没有找到解决办法

 

转自 http://yinxiulei.cn

posted @ 2012-08-14 15:35  尹修磊  阅读(1640)  评论(0编辑  收藏  举报