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的方法还不奏效,还需下一步排除。