首页    新闻    下载    文档    论坛     最新漏洞    黑客教程    数据库    搜索    小榕软件实验室怀旧版    星际争霸WEB版    最新IP准确查询   
名称: 密码:      忘记密码  马上注册
数据库 :: 数据库

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


http://www.gipsky.com/
ORACLE访问SQL SERVER数据库有一篇《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_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.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一致才行.
<< 定期分析数据库对象的脚本 如何查看unix下某个oracle OS的进程在做什么操作 >>
评分
10987654321
API:
gipsky.com& 安信网络
网友个人意见,不代表本站立场。对于发言内容,由发表者自负责任。

系统导航

 

Copyright © 2001-2010 安信网络. All Rights Reserved
京ICP备05056747号