数据库异构(一):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(同义词的名字)