您的位置信息之舟电 脑硬件栏目首页数据库类Oracle 收藏本页

→ 怎样在Oracle里设置访问多个SQL Server数据库?

www.kepusoft.com 信息之舟电脑软件应用栏目

    信息之舟电脑软件应用栏目编者按:   如何在Oracle里设置访问多个SQL Server数据库?假设我们要在ORACLE里同时能访问SQL Server里默认的pubs和Northwind两个数据库。

    1、在安装了ORACLE9i Standard Edition或者ORACLE9i Enterprise Edition的windows机器上(IP:192.168.0.2), 产品要选了透明网关(Oracle Transparent Gateway)里访问Microsoft SQL Server数据库

    $ORACLE9I_HOME\tg4msql\admin下新写initpubs.ora和initnorthwind.ora配置文件.
    initpubs.ora内容如下:
    HS_FDS_CONNECT_INFO="SERVER=SQLSERVER_HOSTNMAE;DATABASE=pubs"
    HS_DB_NAME=pubs
    HS_FDS_TRACE_LEVEL=OFF
    HS_FDS_RECOVERY_ACCOUNT=RECOVER
    HS_FDS_RECOVERY_PWD=RECOVER
    initnorthwind.ora内容如下:
    HS_FDS_CONNECT_INFO="SERVER=sqlserver_hostname;DATABASE=Northwind"
    HS_DB_NAME=Northwind
    HS_FDS_TRACE_LEVEL=OFF
    HS_FDS_RECOVERY_ACCOUNT=RECOVER
    HS_FDS_RECOVERY_PWD=RECOVER
    
    $ORACLE9I_HOME\network\admin 下listener.ora内容如下:
    LISTENER =
      (DESCRIPTION_LIST =
       (DESCRIPTION =
        (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
      )
      )
      )
    
    SID_LIST_LISTENER =
      (SID_LIST =
      (SID_DESC =
      (GLOBAL_DBNAME = test9)
      (ORACLE_HOME = d:\oracle\ora92)
      (SID_NAME = test9)
     )
      (SID_DESC=
      (SID_NAME=pubs)
      (ORACLE_HOME=d:\Oracle\Ora92) 
      (PROGRAM=tg4msql)
      )
      (SID_DESC=
      (SID_NAME=northwind)
      (ORACLE_HOME=d:\Oracle\Ora92) 
     (PROGRAM=tg4msql)
        )
      )


    重启动这台做gateway的windows机器上(IP:192.168.0.2)TNSListener服务.

    (凡是按此步骤新增可访问的SQL Server数据库时,TNSListener服务都要重启动)

    2、ORACLE8I,ORACLE9I的服务器端配置tnsnames.ora, 添加下面的内容:

    pubs =
      (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
        )
        (CONNECT_DATA =
        (SID = pubs)
        )
        (HS = pubs) 
       )
       
    northwind =
      (DESCRIPTION =
      (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
        )
        (CONNECT_DATA =
        (SID = northwind)
        )
        (HS = northwind) 
       )   
     保存tnsnames.ora后,在命令行下
     tnsping pubs
     tnsping northwind


    出现类似提示,即为成功

    Attempting to contact (DESCRIPTION = (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)
    (PORT = 1521))) (CONNECT_DATA = (SID = pubs)) (HS = pubs))
    OK(20毫秒)
    Attempting to contact (DESCRIPTION = (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)
    (PORT = 1521))) (CONNECT_DATA = (SID = northwind)) (HS = northwind))
    OK(20毫秒)


    设置数据库参数global_names=false。

    设置global_names=false不要求建立的数据库链接和目的数据库的全局名称一致。global_names=true则要求, 多少有些不方便。

    oracle9i和oracle8i都可以在DBA用户下用SQL命令改变global_names参数

    alter system set global_names=false;


    建立公有的数据库链接:

    create public database link pubs 
    connect to testuser identified by testuser_pwd using 'pubs';
    create public database link northwind 
    connect to testuser identified by testuser_pwd using 'northwind';
    (假设SQL Server下pubs和northwind已有足够权限的用户登陆testuser,
    密码为testuser_pwd)


    访问SQL Server下数据库里的数据:

    select * from stores@pubs;
    ......  ......
    select * from region@northwind;
    ......  ......


    3、使用时的注意事项

    ORACLE通过访问SQL Server的数据库链接时,用select * 的时候字段名是用双引号引起来的。

    例如:

    create table stores as select * from stores@pubs;
    select zip from stores;
    ERROR 位于第 1 行:
    ORA-00904: 无效列名
    select "zip" from stores;
    zip
    -----
    98056
    92789
    96745
    98014
    90019
    89076


    已选择6行。

    用SQL Navigator或Toad看从SQL Server转移到ORACLE里的表的建表语句为:

    CREATE TABLE stores
        ("stor_id"                      CHAR(4) NOT NULL,
        "stor_name"                    VARCHAR2(40),
        "stor_address"                 VARCHAR2(40),
        "city"                         VARCHAR2(20),
        "state"                        CHAR(2),
        "zip"                          CHAR(5))
      PCTFREE     10
      PCTUSED     40
      INITRANS    1
      MAXTRANS    255
      TABLESPACE  users
      STORAGE   (
        INITIAL     131072
        NEXT        131072
        PCTINCREASE 0
        MINEXTENTS  1
        MAXEXTENTS  2147483645
      )
    /


    总结:

    WINDOWS下ORACLE9i网关服务器在$ORACLE9I_HOME\tg4msql\admin目录下的initsqlserver_databaseid.ora

    WINDOWS下ORACLE9i网关服务器listener.ora里面

    (SID_DESC=
           (SID_NAME=sqlserver_databaseid)
            (ORACLE_HOME=d:\Oracle\Ora92) 
            (PROGRAM=tg4msql)
        )
        UNIX或WINDOWS下ORACLE8I,ORACLE9I服务器tnsnames.ora里面
     northwind =
       (DESCRIPTION =
    (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
         )
     (CONNECT_DATA =
     (SID = sqlserver_databaseid)
          )
     (HS = sqlserver_databaseid) 
           )


    sqlserver_databaseid一致才行.

www.kepusoft.com 信息之舟电脑之家收集整理推荐文章

相关文章:·使用SELECT语句中的 CONTAINS 运算符发出文本查询:单词查询和ABOUT查询
·Oracle Text的体系架构:使用Oracle Text的步骤 简单的示例 利用Oracle Text实现全文检索的方法与步骤
·利用Oracle Text实现为文本建立索引:索引集(Index Set)词法分析器(Lexer)过滤器(Filter)非索引字表(Stoplist)类
·如果表中的数据发生变化,比如增加或修改了记录,怎么办?
·利用Oracle Text实现为文本建立索引:存储(Storage)数据存储(Datastore)文档段组(Section Group)相关词表(Wordlist)类
·为什么利用Oracle Text实现全文检索首先必须把正确的文本加载到数据库表?方法是什么?
·Oracle Text 的体系结构及其使用:Oracle Text的体系架构 索引文档时所使用的主要逻辑步骤
·如何通过使用Oracle Text查询应用程序,显示满足查询条件的文档?
·怎样在Oracle里设置访问多个SQL Server数据库?
·Oracle Text 的体系结构索引维护与相关链接总结
→ Oracle栏目列表:

ACCESS
MS SQL
MySQL
Oracle
Foxpro
PowerBuilder
Sybase
其它

→ 赞助商链接:
→ 热门文章排行榜:
·使用SELECT语句中的 CONTAINS 运算符发出文本查询:单词查询和ABOUT查询
·Oracle Text的体系架构:使用Oracle Text的步骤 简单的示例 利用Oracle Text实现全文检索的方法与步骤
·利用Oracle Text实现为文本建立索引:索引集(Index Set)词法分析器(Lexer)过滤器(Filter)非索引字表(Stoplist)类
·如果表中的数据发生变化,比如增加或修改了记录,怎么办?
·利用Oracle Text实现为文本建立索引:存储(Storage)数据存储(Datastore)文档段组(Section Group)相关词表(Wordlist)类
·为什么利用Oracle Text实现全文检索首先必须把正确的文本加载到数据库表?方法是什么?
·Oracle Text 的体系结构及其使用:Oracle Text的体系架构 索引文档时所使用的主要逻辑步骤
·如何通过使用Oracle Text查询应用程序,显示满足查询条件的文档?
·怎样在Oracle里设置访问多个SQL Server数据库?
·Oracle Text 的体系结构索引维护与相关链接总结