博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数据库异构(1)

Posted on 2007-08-13 10:43  jisen  阅读(732)  评论(0编辑  收藏  举报

数据库异构(一):oracle
由于项目的原因,需要掌握对跨库操作数据(主要是一些主流数据库oracle和sql server2000,sybase),项目结束了,在此总结以下,正好在园子里看到有朋友介绍sql2005的数据库链路,

因为我对sql2005还不是太了解,主要介绍一下oracle9i和sqlserver 2000下的跨库操作。
Oracle:
oracle的异构分为两种,普通连接和通用网关

1.普通连接
普通连接的处是它不用额外安装组件,可以基于odbc数据源进行设置,但它有一个非常大的缺陷就是跨库只能查询,不能修改因此使用它的朋友要考虑清楚
配置普通连接步骤
(1)配置ODBC(这里拿sqlserver2000测试)
   在系统DSN中配置ODBC数据源mySqlTest(注意不要创建在用户DSN中);
(2)配置TNSNAMES.ORA文件,在Oracle的安装目录下,ora92\network\admin\,
添加
LINKSQLSERVER =  //oracle用来标识某个异构数据库的名字
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 168.1.1.57)(PORT = 1521))//(把host设置为异构数据库的名字或地址,其他不变)
    )
    (CONNECT_DATA =
      (SID = hs4sql)//和下面文件中的sid保持一致
    )
    (HS = OK)//这句要注意
  )
(3)配置lisener.ora,和tnsnames在同一个目录下,在
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oracle\ora92)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = CNNG)
      (ORACLE_HOME = C:\oracle\ora92)
      (SID_NAME = CNNG)
    )
//加到这里就可以了
  )
中加一节
    (SID_DESC =
      (SID_NAME = hs4sql)//和tns文件中的sid保持一致
      (ORACLE_HOME = C:\oracle\ora92)//oracle主目录,照抄已经有的
      (PROGRAM = hsodbc)//这个值必须有
    )
(3)到ora92\hs\admin\中把init.ora复制一份,命名为iniths4sql.ora(用init + tns中的sid),如过没有init.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 = mySqlTest//数据源名称
HS_FDS_TRACE_LEVEL = ON
#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>
保存关闭
(4)重起oralce的监听器
(5)创建databaselink,
create database link ora2sql connect to 'uid' identified by 'pwd' using 'LINKSQLSERVER(要用tns中的名字)';
然后就可以查询测试,
select * from tabname@ora2sql;也可以跨sqlserver和oracle进行联合查询(这个功能比较强吧!)
我们在项目的过程中,用oracle的同义词来简化查询语句,可以上面的sql语句为select * from tabname(同义词的名字)