`
wangyihust
  • 浏览: 425900 次
文章分类
社区版块
存档分类
最新评论

在ORACLE里通过异构服务设置访问多个SQL Server数据库

阅读更多

假设我们要在ORACLE里同时能访问SQL Server里默认的pubs和Northwind两个数据库。

可参考最初写的通过异构服务链接oracle 和sql server 数据库服务器

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

$ORACLE9I_HOME\tg4msql\admin下新写initpubs.ora和initnorthwind.ora配置文件
initpubs.ora内容如下:
HS_FDS_CONNECT_INFO="SERVER=sqlserver_hostname;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

(蓝色字的部分可以根据具体要访问的SQL Server数据库的情况而修改)

$ORACLE9I_HOME\network\admin 下listener.ora内容如下:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(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.1)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;
......  ......

使用sql *plus copy命令从本地数据库复制暑假到MS SQL SERVER中:

copy from scott/tiger@myoracle  insert   EMP@pubs  using  select * from EMP

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一致才行.



分享到:
评论

相关推荐

    在ORACLE里设置访问多个SQL Server数据库

    ORACLE访问SQL SERVER数据库有一篇《Oracle 异构服务实践》讲得... 但里面没有讲如何设置访问多个SQL Server数据库, 我就补充一下。 假设我们要在ORACLE里同时能访问SQL Server里默认的pubs和Northwind两个数据库。

    oracle与异构数据库连接方法

    由于历史的原因,在多数企业都同时存在多个数据库平台,在每个数据库平台上都运行着相关的一套或多套应用....

    数据库系统-招标参数---模板.doc

    满足从不同" " " "主流数据源(例如:SQLServer、Oracle、DB2、Sy" " " "base、Excel、文本、SAP等等)抽取、转换、加载" " " "到不同数据源(例如:SQLServer、Oracle、DB2、" " " "Sybase、Excel、文本、SAP等等)...

    神通数据库-数据库快速入门.pdf

    库、Oracle、Microsoft SQL Server、IBM DB2、Microsoft Excel 97-2000、文本文件、其他支持 ODBC 的 数据源。在数据的转换过程中,向导能根据源数据和目标数据具体类型,通过内置的转换规则提供数据类型 的默认映射...

    Sybase_Replication_Server_15.0.1适用于_IBM_AIX

    Replication Server 可以简便地实现跨企业之间的数据移动和...DBA通过快速设置多个复制点进行灾难恢复,从而降低系统宕机的风险 能够做到及时得数据相应,避免数据延迟,提高应用系统对事务的及时响应能力 最新的自我

    Oracle9i的init.ora参数中文说明

    如果要在没有调度程序的情况下仍能连接到数据库, 请将该值设置为与例程名相同。此参数自 8.1.3 版起已废弃。 值范围: 根据操作系统而定。 默认值 :0 mts_sessions: 说明 : 指定允许的共享服务器体系结构用户会话的...

    oracle biee 11g新功能介绍PPT 中文版本

    并行计算:一个计算任务分成多个子任务,在多CPU上并行执行 Analytic Services先进的分析平台 满足全方位的分析应用 Essbase 创造了OLAP基准测试的记录! 内容安排 Oracle BIEE+ & BI SE1 —统一的基础平台 Essbase ...

    Apache ShardingSphere分布式数据库中间层生态圈 v5.3.2 alpha

    目前,数据分片、读写分离、多数据副本、数据加密、影子库压测等功能,以及对MySQL、PostgreSQL、SQLServer、Oracle等SQL与协议的支持,均通过插件的方式织入项目。开发者能够像使用积木一样定制属于自己的

    自主数据库管理系统的演变

    最大数量的操作,大量的数据和多用户的环境也增加了复杂性,由于复杂性和异构性,数据库管理员的工作变得更为困难和费力。对这些数据库管理系统问题的解决方案就是自我管理或自主的数据库管理系统(ADBMS),一个自主...

    猎隼报表控件

    它可以从包括ACCESS、Excel、SQL Server、Sybase、Oracle、DB2等数据库及文本文件中抽取数据。系统提供标准SQL语句,用户可以抛弃数据库及操作系统环境的影响,随意构造抽取原则,系统自动分析条件并根据数据远关系...

    横瓜数据库全文检索中间件

    (1)支持目前所有主流数据库(例如Access、SQL_server、Oracle、MySQL、DB2等),这些数据库文件都可以被架构成全文检索,HdMap并且支持异构数据库、多数据库,最多可容纳200个任意类型的数据库,但每个数据库须少于...

    一种通用的多数据库间数据抽取方法及应用 (2008年)

    为方便从多个异构的数据源中抽取转换数据、并加载到目标数据库,提出一种较为通用的抽取方法,并开发了工具软件。该方法基于客户端的方案,使用数据库驱动程序屏蔽异构数据库间的差异;数据的抽取、转换和加载由数据...

    应用服务器中间件技术要求.doc

    " " "支持多种数据库,如Oracle、Sybase、MS SQL SERVER " " "等数据库,并对数据库的访问效率提供优化。 " " "应用服务器提供商需作为JavaEE6标准制定成员,并具 " " "有专家参与下一个版本(JSR316)的标准制定,...

    分布式数据层TDDL.zip

    TDDL所处的位置(tddl通用数据访问层,部署在客户端的jar包,用于将用户的SQL路由到指定的数据库中): 淘宝很早就对数据进行过分库的处理, 上层系统连接多个数据库,中间有一个叫做DBRoute的路由来对数据进行...

    车辆调度业务统计分析系统实施方案

    以图表形式展现的“调度系统业务统计”业务需求(系统名称暂定为:车辆调度业务统计分析系统),涉及到多个不同类型的数据源:Oracle、SQL Server,需要采用数据异构、数据挖掘技术设计开发,包括如下过程: ...

    Apache ShardingSphere分布式数据库中间层生态圈-其他

    目前,数据分片、读写分离、多数据副本、数据加密、影子库压测等功能,以及对MySQL、PostgreSQL、SQLServer、Oracle等SQL与协议的支持,均通过插件的方式织入项目。开发者能够像使用积木一样定制属于自己的独特系统...

    java 面试题 总结

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    DBKING使用指南

    目前工具在Oracle 11g、Microsoft SQLServer 2012、MySQL 5.x、DB2 10.x、Sybase 15.x、PostgreSQL 9.x、Derby 10.x上通过了测试。 2、通过生成器创建BO类及DAO层代码  这是一个配合dbking的代码...

Global site tag (gtag.js) - Google Analytics