建立sql的连oracle的链接服务器
解决方案 »
- 求一条sql语句
- 查询表tsc-bzx中id是否有重复的纪录
- 使用alter table语句增加字段
- 求带外键约束的查询语句
- 不存在的列要求显示为0
- 如何增加一列,使每一行此列的数据等于前面所有行某一列之和
- 疑难杂症_难死一般菜鸟!大虾快来拿分!不胜感激涕零!
- 请教一条SQL语句,将其中的not in换成not exists
- 各位老大,我的SQL2000有如下的问题:(10分)
- 如何全文检索Office文档?
- EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 0,当前计数 = 1。
- sql数据联合查询问题 高手帮忙,谢谢 急~~~~~在线等
sp_addlinkedsrvlogin
用于 Oracle 的 Microsoft OLE DB 提供程序
用于 Oracle 的 Microsoft OLE DB 提供程序使分布式查询得以查询 Oracle 数据库中的数据。
说明 从安装在 Microsoft Windows 98 上的 SQL Server 实例执行分布式事务时,Oracle 客户端软件不支持使用用于 Oracle 的 Microsoft
OLE DB 提供程序进行分布式查询。
创建链接服务器以访问 Oracle 数据库实例
确保运行 SQL Server 的服务器上的 Oracle 客户端软件已达到提供程序所要求的级别。用于 Oracle 的 Microsoft OLE DB 提供程序要求
Oracle 客户端软件支持文件的版本为 7.3.3.4.0 或更高版本,并且 SQL*Net 的版本为 2.3.3.0.4。
在运行 SQL Server 的服务器上创建指向 Oracle 数据库实例的 SQL*Net 别名。有关更多信息,请参见 Oracle 文档。
执行 sp_addlinkedserver 创建链接服务器,指定 MSDAORA 为 provider_name,指定用于 Oracle 数据库实例的 SQL*Net 别名为 data_
source。
以下示例假设已将一个 SQL*Net 别名定义为 OracleDB。
sp_addlinkedserver 'OrclDB', 'Oracle', 'MSDAORA', 'OracleDB'
使用 sp_addlinkedsrvlogin 创建从 SQL Server 登录到 Oracle 登录的登录映射。
以下示例通过 Oracle 登录名 OrclUsr 和密码 OrclPwd 将 SQL Server 登录 Joe 映射到步骤 3 中定义的链接服务器:
sp_addlinkedsrvlogin 'OrclDB', false, 'Joe', 'OrclUsr', 'OrclPwd'
每个 Oracle 数据库实例仅有一个名称为空的目录。Oracle 链接服务器中的表必须使用四部分名称格式
OracleLinkedServerName..OwnerUserName.TableName 进行引用。例如,以下 SELECT 语句引用 Oracle 用户 MARY 在 OrclDB 链接服务器映
射的服务器上所拥有的表 SALES。
SELECT *
FROM OrclDB..MARY.SALES
在 Oracle 链接服务器中引用表时,请使用以下规则:
如果在 Oracle 中创建的表名和列名没有引用的标识符,请全部使用大写字母名称。
如果在 Oracle 中创建的表名和列名有引用的标识符,请全部使用与 Oracle 中创建名称时相同的字母大小写格式。
INSERT 语句应为表中的所有列提供值,即使表中的某些列为 NULL 或有默认值。
注册表项
若要启用用于 Oracle 的 OLE DB 提供程序以与 Oracle 客户端软件一起使用,必须从命令行运行注册表文件以修改客户端的注册表。不应同
时运行客户端软件的多个实例。这些文件都列在下表中并位于同一目录结构中,而该目录结构包含通常在 C:\Program Files\Common
Files\System Files\OLE DB 中的 Microsoft 数据访问组件 (MDAC) 安装。
Oracle 客户端 Windows NT 或 9x Windows 2000
7.x mtxoci7x_winnt.reg mtxoci7x_win2k.reg
8.0 mtxoci80x_winnt.reg mtxoci80x_win2k.reg
8.1 mtxoci81x_winnt.reg mtxoci81x_win2k.reg
1.配置windows的ODBC数据源:
开始菜单—》设置—》管理工具—》数据源(ODBC)—》进入配置用户DSN或者系统DSN均可以:
添加—》选择Microsoft ODBC for oracle—》自定义数据源名称(最好跟tns中连接串同名!)—》服务器名称
(必填!填写tns文件中的连接串名称)—》完成。
2.配置sqlserver2000中的连接服务器:
企业管理器—》安全性—》连接服务器—》右键新建连接服务器—》定义连接名称;
选其他数据源; 指定程序名称为:Microsoft OLE DB Provider for Oracle; 产品名称可不填;
数据源指定刚才ODBC中定义好的数据源名称; 提供程序字符串按以下格式填写:User ID=username;Password=userpasswd
(或者按如下格式:UID=username;PWD=userpasswd),
这里的用户名和密码对应所要连接的oracle数据库中的用户名和密码 —》 安全性标签页里:
设置用此安全上下文进行,并录入oracle的数据库用户名和密码—》服务器选项标签页可默认—》确定。
3.完成了。使用方法
在sqlserver企业管理器—》安全性—》连接服务器打开刚建好的连接服务器—》点击表,
即可在右边窗口看到该oracle数据库用户拥有的的所有表名,但在这里还并不能查看表的记录,这个需要在sqserver的查询分析器中用具体sql实现!
访问表时,使用格式为: [连接服务器名]..[ORACLE用户].[表名]。必须为大写。更详细具体的使用这里不再赘述。
------------------------------------------------------------------------------------------
二:oracle连接sqlserver
1、安转透明网关
在自定义安转内
D:\oracle\ora92\tg4msql\admin\inittg4msql.ora tg4msql
2、在D:\oracle\ora92\network\admin\listener.ora内添加
(SID_DESC =
(GLOBAL_DBNAME = tg4msql)
(PROGRAM = tg4msql)
(ORACLE_HOME = D:\oracle\ora92)
(SID_NAME = tg4msql)
)
3、配置tns
tnsnames.ora
-----------------
例子1
cdma =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = zhyg)(PORT = 1521))
)
(CONNECT_DATA =
(SID = tg4msql)
(SERVER = DEDICATED)
)
(HS=OK)
)
例子2
du =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = sha38)(PORT = 1521))
)
(CONNECT_DATA =
(SID = jf)
(SERVER = DEDICATED)
)
(HS=OK)
)
--------
3、创建数据链路
CREATE PUBLIC DATABASE LINK DU CONNECT TO SA IDENTIFIED BY SA USING 'DU'
ok可以使用了
select * from sysobjects@cdma
Set CON = CreateObject("adodb.connection")
CON.Open "UID=sa;PWD=;driver={sql server};SERVER=10.4.3.250;database=Esofnet;"
mySQL = "select count(*) as q from Trans_R a where a.dev_id in ('0010','0011') and a.tr_code in ('0','9')" 'ORACLE
Set CON = CreateObject("adodb.connection")
CON.Open "UID=oa;PWD=csmcoa;driver={Microsoft ODBC for Oracle};SERVER=oa.csmc.com.cn;"
mySQL = "select count(*) as a from staffdata t"SQL2000和ORACLE分别在两台远端服务器上
我想实现sql中查询的结果中的字段“kh”等于oracle中的字段“kh”的所有行能帮我具体实现下吗?
我是个新手,上面的转帖好多不明白
谢谢!
分不够再加!
Set CON = CreateObject("adodb.connection")
CON.Open "UID=sa;PWD=;driver={sql server};SERVER=10.4.3.250;database=Esofnet;"
mySQL = "select count(*) as q from Trans_R a where a.dev_id in ('0010','0011') and a.tr_code in ('0','9')" 'ORACLE
Set CON = CreateObject("adodb.connection")
CON.Open "UID=oa;PWD=csmcoa;driver={Microsoft ODBC for Oracle};SERVER=oa.csmc.com.cn;"
mySQL = "select count(*) as a from staffdata t" SQL2000和ORACLE分别在两台远端服务器上
我想实现sql中查询的结果中的字段“kh”等于oracle中的字段“kh”的所有行 能帮我具体实现下吗?
我是个新手,上面的转帖好多不明白
谢谢!
分不够再加!
--- 只有操作系统?你的数据库啦?
所以,无法配置服务器什么的,请问,这种情况,如何是的sql2000与oracle联查?
--- 如果不能对数据库服务器进行配置,
那就只有在程序中比较两个查询出来的结果.不能够从数据库端链接sql和oracle.PS:被你说的有点晕晕....
'SQL2000
Set CON = CreateObject("adodb.connection")
CON.Open "UID=sa;PWD=;driver={sql server};SERVER=10.4.3.250;database=Esofnet;"
mySQL = "select count(*) as q from Trans_R a where a.dev_id in ('0010','0011') and a.tr_code in ('0','9')" 'ORACLE
Set CON = CreateObject("adodb.connection")
CON.Open "UID=oa;PWD=csmcoa;driver={Microsoft ODBC for Oracle};SERVER=oa.csmc.com.cn;"
mySQL = "select count(*) as a from staffdata t"
请问,是否能在远端的sql服务器和oracle服务器上配置好了,在本地用sql语句就可以联查?