透明网关
用途: 可以在Oracle数据库中通过dblink访问非Oracle数据库的数据信息。
概念: 透明网关是一种代理机制,通过它可以实现Oracle数据库对非Oracle数据的透 明访问。
环境: Oracle11g,MySQL ODBC驱动 ,(同一服务器上可以有MySQL也可以没有, 但一定得有要连接的非Oracle数据库的ODBC 驱动)。
https://dev.mysql.com/downloads/connector/odbc/
配置:
1. 开始——管理工具——数据源(ODBC)——系统DSN——(无显示驱动,要自己添加),添加你想为其添加数据源的驱动程序(即下载的ODBC驱动)——点击完成之后,会出现MySQL...connector/odbc进行配置。
具体内容:
2. DataSourceName: 是自定义的,不区分大小写;后续配置init*.ora时会用到。
3. TCP/IP Server: 要连接的非Oracle数据库所在服务器的IP地址;
4. 默认端口号:3306,要是端口号被占用,TEST测试时,会报错:
Connect failed [mysql][ODBC 5.3(a)] can’t connect to mysql server on ‘ip地址’(10060)
(错误也可能是防火墙导致)
5. user: 非Oracle数据库的用户名:eg:MySQL的用户名是root;要大写,否则会报错:
Connect failed [MySql][ODBC 5.3(a) Driver] Access denied for user ‘root’@’WIN-FPJK73HCG35’ (using password:YES)
(要是MySQL和Oracle在一台服务器上应该不需要大写,不太确定......?!......)
6. password:
7. Database: 数据库名,一般得大写,统一服务器不确定;
8. Character Set: 若乱码可配置改为别的格式;在detail中修改。
9. Test:测试是否连接成功,连接成功会弹出 connection successful...
----------------------------------------------------------------------------------------------
完成之后进行透明网关的配置:
init*.ora listener.ora tnsnames.ora
1. init*.ora在Oracle的安装路径下;app\Administrator\product\11.2.0\dbhome_1\hs\admin
2. Listerner.ora和tnsnames.ora在
app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN
3. init*.ora命名规则* 需要注意 * ,SID和SID_NAME必须一致
HS_FDS_CONNECT_INFO = <odbc data_source_name>
HS_FDS_TRACE_LEVEL = <trace_level>
参数说明:
HS_FDS_CONNECT_INFO=ODBC数据源管理中的DSN名称(在2中的自定义DataSourceName)
HS_FDS_TRACE_LEVEL=OFF
(追踪级别参数,出于性能考虑一般不配置或者配置为OFF,若网关需要跟踪日志,则配置为Debug,跟踪文件存放在hs\trace目录)
4. 配置网关监听:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=dg4odbc)
(ORACLE_HOME=f:\app\Administrator\product\11.2.0\dbhome_1)
(PROGRAM=dg4odbc)
)
)
SID_NAME: 3个值必须保持一致,是网关的SID
ORACLE_HOME: 是Oracle的安装目录
PROGRAM: 指定监听服务响应 ODBC连接请求的可执行程序
5. 需要重启监听服务,才能成功:
Lsnrctl stop
Lsnrctl start
6. 配置TNS:
dg4odbc =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
(CONNECT_DATA=
(SID=dg4odbc)
)
(HS=OK)
)
1)这儿最上边的dg4odbc是默认的,需要咱自己定义TNS连接名称(创建dblink时会用到)
2)必须是SID,SERVICE_NAME不可以,不知道为啥......?!......
3)PROTOCOL 有两种TCP和IPC,资料显示dg4odbc时就用TCP,未知......
4)HS:指定连接的是非Oracle数据库,必须有。
----------------------------------------------------------------------------------------------
配置dblink
可以在sqlplus中创建dblink,也可以在Oracle数据库进行创建:
创建语句:
Create database link 自定义名 connect to “用户名(ROOT)” idntified by “密码” using ‘TNS连接名’;
(一般用户名和密码都用双引号括起来,避免Oracle在大小写上做自动转换,TNS连接名用单引号)
测试可以在Oracle数据库中查非Oracle数据的信息:
Eg: select * from user@orcltomysql;
User表是MySQL的,orcltomysql是dblink自定义的值;
增删查改都一样,只需要在表的后面@dblinkname。
----------------------------------------------------------------------------------------------
补充:
1. ODBC数据源管理器:
应用程序要访问一个数据库,首先必须用ODBC注册一个数据源,管理器根据数据源提供的数据库位置,数据库类型及ODBC 驱动程序等信息,建立起ODBC与具体数据库的联系。(只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接)
2. DNS:
Data Source Name: 数据源名称
DNS为ODBC定义了一个确定的数据库和必须用到的ODBC驱动程序。每个ODBC程序定义为该驱动程序支持的一个数据库创建DNS需要的信息.。 (安装一个ODBC驱动程序以及创建一个数据库之后,必须创建一个DNS)
DNS分三种:
1)用户数据源:
这个数据源对于创建它的电脑来说是局部的,并且只能被创建它的用户使用。
2)系统数据源:
这个数据源属于创建它的计算机并且属于这台计算机而不是创建它的用户。(任何用户只要拥有适当的权限就可以访问这个数据源)
3)文件数据源:
这个数据源对底层的数据文件来说是确定的,即,这个数据源可以被任何安装了合适驱动程序的用户使用。
遇见的错误:
ORA-12154:TNS:无法解析指定的连接标识符
“TNS”:could not resolve the connect identifier specified
错误原因:(HS=OK)写成了HS=(OK)
-------------------------------------------------------------------------------------
ORA-12560:TNS:协议适配器错误
(未解决)
--------------------------------------------------------------------------------------
ORA-12541:TNS:无监听程序
1)服务开启
2)Sqlplus检验(tnsping 实例名)
3)Tnsnames.ora文件,中修改localhost值胃本机的IP地址
4)重新配置监听名称:
Dos命令——netca,在弹出的窗口中进行监听程序配置;
重新配置
Tnsping 实例名 进行验证
--------------------------------------------------------------------------------------
TNS-01155:在listener.ora中指定SID_LIST_LISTENER参数不正确
NL-00303:NV 字符串中存在语法问题,监听程序未启动。
错误原因:配置SID_LIST_LISTENER时少了一个“)”。
--------------------------------------------------------------------------------------
ORA-00987:用户名缺失或者无效。(创建dblink时的错误)
错误原因:创建dblink时,用户名和密码都用了单引号,需要用双引号。
--------------------------------------------------------------------------------------
ORA-00911:无效字符......
错误原因:cmd中dos 命令创建时多了一个“;”
--------------------------------------------------------------------------------------
ORA-01017:invalid username/password;logon denied
错误原因:登录时大小写或者错误
--------------------------------------------------------------------------------------
ORA-02063:preceding line from
(不记得怎么解决得了)
--------------------------------------------------------------------------------------
ORA-28500:连接ORACLE到非Oracle系统时返回此信息:
[Microsoft][ODBC驱动管理器]未发现数据源名称并且未指定默认驱动程序<IM002>
错误原因:init*.ora配置文件中的HS_FDS_CONNECT_INFO=......名称与DSN不一致
--------------------------------------------------------------------------------------
ORA-28500:连接ORACLE到非Oracle系统时返回此信息:
[Microsoft][ODBC驱动管理器]未发现数据源名称并且未指定默认驱动程序<IM002>
错误原因:将ODBC创建连接时,创建在用户DNS下,而不是系统DNS下。
--------------------------------------------------------------------------------------
ORA-28500:连接ORACLE到非Oracle系统时返回此信息:
[MySql][ODBC 5.3 <a> Driver Access denied for user ‘...’@’CN-20170414RWMN’<using password :YES><HY000,NativeErr=1045>......]
错误原因:创建dblink是用户名小写了
--------------------------------------------------------------------------------------
ORA-02047:无法联接运行中的分布式事务
(重启之后就好了,未知)
--------------------------------------------------------------------------------------
安装MySQL ODBC 驱动时报错:
ERROR 1918.Error installing ODBC driver MySql ODBC 5.3 ANSI Driver,ODBC error 13:无法加载MySQLODBC 5.3......驱动程序的安装例程,因为存在系统错误代码126:找不到指定的模块。......
错误原因:系统缺少文件
下载VC 地址:
http://www.pc6.com/softview/SoftView_94058.html
--------------------------------------------------------------------------------------