window下oralce10G使用dblink连接到mysql

来源:互联网 发布:淘一兔淘宝号查询 编辑:程序博客网 时间:2024/06/06 03:01

首先 需要确认系统是否存在odbc for mysql的驱动

开始-》设置-》控制面板-》数据源->系统DSN-》添加 看是否存在 MYSQL-ODBC-5.X ANSI或者UNICODE的驱动

如果没有去 oracle注册个账号  http://dev.mysql.com/downloads/connector/odbc/ 下载

场景是 mysql数据库 上有个数据库是testlink 数据库testlink下有个表person



安装完成后 必须在系统DSN中添加 一个odbc连接 (开始我使用user dsn结果报了一堆错 不知为何 改成系统DSN就ok 建议用系统DSN)

我现在建立数据源名称是myodbc5


点击test 能够成功 ok

找到oracle的home目录

一般是我们需要配置 tnsnames.ora的上两级目录

比如 我的是 D:\oracle\product\10.2.0\db_2  下面可以通过 network/admin找到tnsnames.ora文件

%ORACLE_HOME%自然就是D:\oracle\product\10.2.0\db_2

%ORACLE_HOME%/hs/admin/

新建一个文件

init(数据库名而不是数据源名称).ora

我的名称为 inittestlink.ora

内容为:

#oracle监听启动的时候会通过 tnsname下的描述符里的sid去找到对应init(SID名称).ora文件 找到对应HS_FDS_CONNECT_INFO的odbc数据源

HS_FDS_CONNECT_INFO = myodbc5   #这里就是数据源的名称
HS_FDS_SUPPORT_STATISTICS=FALSE
HS_FDS_TRACE_LEVEL = debug

找到 %ORACLE_HOME%\NETWORK\ADMIN 找到tnsnames.ora 添加如下

切记 SID是数据库名 而非数据源名称
testlink =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SID = testlink)
    )
    (HS = OK)
  )

找到同一目录下的listener.ora


SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = d:\oracle\product\10.2.0\db_2)
      (PROGRAM = extproc)
    )
  )

修改为 切记 SID_NAME 也是数据库名 不是数据源名称 PROGRAM 使用 dg4odbc,hsodbc(我这里用hsodbc成功 用dg4odbc失败)

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = d:\oracle\product\10.2.0\db_2)
      (PROGRAM = extproc)
    )
    (SID_DESC =
     (SID_NAME = testlink)
     (ORACLE_HOME =D:\oracle\product\10.2.0\db_2)
     (PROGRAM = hsodbc)

    )

  )

ok配置完成后打开cmd命令 输入命令 lsnrctl reload

输入命令 lsnrctl status

输入命令tnsping testlink

一切ok

创建dblink 切记不要用 create public  database link 否则会报错

create  database link testlink11 connect to "root" identified by "123456" using 'testlink'; 

或者

create  database link testlink11 connect to "root" identified by "123456" using '(DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SID = testlink)
    )
    (HS = OK)
  )';


使用 select * from testlink.person@testlink11  查询

或者 select * from "testlink"."person"@testlink11

或者 select * from "testlink.person"@testlink11

0 0
原创粉丝点击