ORACLE本身并没有针对MYSQL的透明网关,因此ORACLE访问MYSQL需通过ODBC的透明网关完成。出于简单说明,ORACLE安装在Windows系统下。
第一步: 安装MYSQL ODBC驱动
由于是ORACLE访问MYSQL, 因此MYSQL ODBC驱动 必须安装在ORACLE所在的服务器上。可下载安装mysql-connector-odbc-*.msi安装,或者在安装mysql社区版时选择安装connector-odbc。 需要说明的是,并不是每次都能安装成功connector-odbc。
第二步:创建MYSQL ODBC数据源
在管理工具->数据源(ODBC)->系统DSN中添加MYSQL的ODBC数据源。假设取名“KEYMYSQL”A。可以在配置过程中测试连接,确保能够连通。
第三步: 创建init.ora
在$ORACLE_HOME\HS\ADMIN\目录下有一个initdg4odbc.ini文件。 在当前目录下,复制一命名规则为init.ora的文件,例如initmysql.ora ,这里“mysql”B就是网关的sid.。 该文件中两行可以如下配置:
HS_FDS_CONNECT_INFO
= keymysql
HS_FDS_TRACE_LEVEL
= NO
其中HS_FDS_CONNECT_INFO的值就是第二步配置的ODBC数据源 “KEYMYSQL”A中的值。
第四步: 将网关添加监听中
在数据库服务器上修改$ORACLE_HOME\network|admin\下的listener.ora文件,在SID_LIST_LISTENER添加标红这段:
SID_LIST_LISTENER
=
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME =
E:\app\Administrator\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS =
"EXTPROC_DLLS=ONLY:E:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC =
(SID_NAME = mysql)
(ORACLE_HOME =
e:\app\Administrator\product\11.2.0\dbhome_1)
(PROGRAM = dg4odbc)
)
)
这里 需要说明的是,一是,SID_NAME的值就是第三步网关“mysql”B的值,和第二步ODBC数据源的值无关, 二是ORACLE_HOME是你数据库中实际的$ORACLE_HOME值不要直接拷贝忘了改。
第五步:配置别名
在数据库服务器上修改$ORACLE_HOME\network|admin\下的tnsname.ora文件,添加数据库别名:
MYSQLSERVER
=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =
localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = mysql)
)
(HS = OK)
)
其中“MYSQLSERVER”C是别名, SERVICE_NAME的“mysql”对应的是第三和第四步中的SID
第六步: 创建数据库连接
执行以下SQL:
create
database link mysqllk
connect to "root"
identified by "root" using ‘MYSQLSERVER’;
其中“mysqllk”是database link
,
第七步: 测试
假设MYSQL中有个表t,在ORACLE中执行:
Select * from t@ mysqllk;
如果返回值正确,则表示配置过程。
PS:由于MYSQL是UTF8字符集,ORACLE数据库是US7ASCII字符集,读取MYSQL中的中文会返回乱码,网上一些,例如在init.ora中配置HS_LANGUAGE和HS_NLS_NCHAR的方法还不奏效,还需下一步排除。