通过ODBC和另外一个关系数据库相连,将另外一个数据库里的表在oracle里面作一个镜像。这样就可以象操纵oracle自己的表一样操作另外一个数据库里的了。有没有这个可能阿?How??

解决方案 »

  1.   

    http://www.ncn.cn/oracle/9i/9igateway1.htm
    http://www.ncn.cn/oracle/8i/sql2ora1.htm
      

  2.   

    创建dblink
    CREATE DATABASE LINK DBLINKNAME CONNECT TO USERNAME IDENTIFIED BY PASSWORD USING 'SERVICENAME';
    CONN USER/PASSWORD@DBLINKNAME
      

  3.   

    楼上的方式可能不太对
    因为这种方式只能是oracle数据库之间,而不是通过odbc啊!
    andy1995()方法可用。
    还有一种创建连接的方式,好象通过windows的odbc.dll文件,但方法不记得了。
      

  4.   

    有没有项access里的‘联接’ 一样的东西阿?要通过odbc联接的??
      

  5.   

    oracle可以建立非oracle数据库的database link
    方法有两种:
    1 使用透明网关,需要另行安装针对不同数据库的透明网关
    2 使用generic connectivity,oracle 8i enterprise已经支持,不需要安装额外的透明网关,主要通过异种数据库代理,有两种,odbc和oledb。
      

  6.   

    用ado建立两个数据库连接,分别对他们操作就是了
      

  7.   

    另一个是工控软件的实时数据库,
    现在我就需要能在oracle里连接
    ado 再说
    enhydraboy(乱舞的浮尘): generic connectivity怎么用能不能祥说??
      

  8.   

    好的,我把最近写的一篇文章找出来,大家一起讨论一下。
    普通连接代理的配置
    下面,我介绍一下,利用普通连接的ODBC配置。利用HS odbc代理连接SQL SERVER 2000。
    第一步初始化文件的建立
    首先,你必须要创建初始化文件。ORACLE提供了样例初始化文件,名字是init<agent>.ora,<agent>可能是hsodbc,hsoledb,hsolefs,分别代表了三种类型的代理,位于$ORACLE_HOME/HS/ADMIN下。
    把对应的文件复制一份出来,并且改名为init<HS_SID>.ora,<HS_SID>是你SQL SERVER ODBC代理起的别名。
    复制并创建了一个inithssql2k.ora文件,编辑inithssql2k.ora文件。
    参数有:
    # This is a sample agent init file that contains the HS parameters that are
    # needed for an ODBC Agent. ## HS init parameters
    ##HS_FDS_CONNECT_INFO = <odbc data_source_name>
    #HS_FDS_TRACE_LEVEL = <trace_level>
    HS_FDS_CONNECT_INFO = SQL2K
    HS_FDS_TRACE_LEVEL = ON
    HS_AUTOREGISTER = TRUE
    ## Environment variables required for the non-Oracle system
    ##set <envvar>=<value>第二步 创建异种服务代理的数据字典
    执行$ORACLE_HOME/rdbms/admin/caths.sql,创建相关的系统表和视图。
    第三步 创建异种服务代理的工作环境
    添加hssql2k的侦听服务,$ORACLE_HOME/NETWORK/ADMIN/listener.oraSID_DESC=(SID_NAME=hssql2k)
    (ORACLE_HOME=d:\oracle\ora81)
    (PROGRAM=hsodbc))
    修改$ORACLE_HOME/NETWORK/ADMIN/tnsnames.ora,添加一个网络服务名sql2k,将在后面创建数据库联接时用到。sql2k = (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))     
    (CONNECT_DATA=(SID=hssql2k))     
    (HS=OK) )重新启动侦听,并且察看服务状态
    LSNRCTL for 32-bit Windows: Version 8.1.7.0.0 - Production on 02-JUL-2003 12:49:30(c) Copyright 1998 Oracle Corporation.  All rights reserved.
    Welcome to LSNRCTL, type "help" for information.
    LSNRCTL> status
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SAM)(PORT=1521)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for 32-bit Windows: Version 8.1.7.0.0 - ProdutionStart Date       02-JUL-2003 11:08:31 
    Uptime                    0 days 1 hr. 41 min. 2 secTrace Level               offSecurity               OFF
    SNMP                      OFF
    Listener Parameter File   d:\oracle\ora81\network\admin\listener.oraListener Log File         d:\oracle\ora81\network\log\listener.logServices Summary...  ORCL          has 1 service handler(s)  
    ORCL          has 3 service handler(s)  
    PLSExtProc    has 1 service handler(s)  
    hssql2k       has 1 service handler(s)
    The command completed successfully
    LSNRCTL>Hssql2k的侦听服务已经正常运行了。第四步 修改数据库启动参数文件
    修改数据库启动参数文件,设置global_names=false,如果设置为true(缺省),那么数据库连接名和全局数据库名一样,这将会导致ORA-02085的错误。第五步 创建访问non-oracle数据库的连接(Database Link)
       在sqlplus中,执行create database link命令。Connect to 指定了连接到SQL SERVER的用户名和密码。
    SQL>create public database link sql2k connect to sa identified by manager using ‘sql2k’;Database link created.第六步 测试
    Oracle8i Enterprise Edition Release 8.1.7.0.0 - ProductionWith the Partitioning optionJServer Release 8.1.7.0.0 - Production
    SQL> connect scott/tiger;
    Connected.
    SQL> select count(*) from sysobjects@sql2k;  COUNT(*)
    ----------       
    135现在,oracle已经可以访问sqlserver数据库了。以上都是,笔者参考了oracle的联机帮助,并且实际测试的经过。笔者同时也发现,采用hsodbc其实也并不是很稳定,有的sql语句会引起hsodb agent的致命错误,同时有很多限制,采用透明网关应该就可以获得很好的效果。
    但是, oracle 8i的这个特性,可以不安装额外的Transparent Gateway产品。因此,只要能够满足应用的数据访问要求,采用Generic connectivity也不失为一个快速,经济的方法。
    笔者的测试环境:Windows2000 Server+ORACLE 8i(8.1.7)
      

  9.   

    oracle 8.0.5 行不行啊?