Share with together

独乐乐不如众乐乐

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

先决条件:

1.SQL Server 2000和Oracle 9i不在同1台机器上,必须在SQL 2000的机器上安装Oracle客户端程序。

2.必须配置好tnsname.ora保证可以正常访问NTYD这个数据库。

3.接下来在SQL Server 2000的查询分析器内执行如下代码:


 1--判断如果链接服务器已经存在,则删除
 2if exists(select 1 from master..sysservers where srvname='dblink_NTYD'
 3exec sp_dropserver 'dblink_NTYD','droplogins' 
 4--创建链接服务器
 5exec sp_addlinkedserver 'dblink_NTYD','Oracle','MSDAORA','NTYD'
 6exec sp_addlinkedsrvlogin 'dblink_NTYD','false',NULL,'Oracle数据库用户名','Oracle数据库密码'
 7注意:dblink_NTYD 可以自己取一个名字,没太大关系,只是个标识。NTYD是数据库的名字,必须指定正确。
 8
 9
10

 

参照:

 

/*语法

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'
     [ , [ @useself = ] 'useself' ]
     [ , [ @locallogin = ] 'locallogin' ]
     [ , [ @rmtuser = ] 'rmtuser' ]
     [ , [ @rmtpassword = ] 'rmtpassword' ]

参数
[ @rmtsrvname = ] 'rmtsrvname'
应用登录映射的链接服务器的名称。rmtsrvname 的数据类型为 sysname,没有默认值。

[ @useself = ] 'useself'
确定用于连接远程服务器的登录名。useself 的数据类型为 varchar(8),默认值为 TRUE

值为 true 时指定登录使用自己的凭据连接 rmtsrvname,忽略 rmtuser rmtpassword 参数。false 指定使用 rmtuser rmtpassword 参数连接指定 locallogin rmtsrvname。如果 rmtuser rmtpassword 也设置为 NULL,则不使用登录名或密码来连接链接服务器。

[ @locallogin = ] 'locallogin'
本地服务器上的登录。locallogin 的数据类型为 sysname,默认值为 NULLNULL 指定此项应用于连接到 rmtsrvname 的所有本地登录。如果不为 NULL,则 locallogin 可以是 SQL Server 登录或 Windows 登录。对于 Windows 登录来说,必须以直接的方式或通过已被授权访问的 Windows 组成员身份授予其访问 SQL Server 的权限。

[ @rmtuser = ] 'rmtuser'
useself false 时,表示用于连接 rmtsrvname 的用户名。rmtuser 的数据类型为 sysname,默认值为 NULL

[ @rmtpassword = ] 'rmtpassword'
rmtuser 关联的密码。rmtpassword 的数据类型为 sysname,默认值为 NULL
*/


/*
语法
sp_dropserver [ @server = ] 'server'
     [ , [ @droplogins = ] { 'droplogins' | NULL} ]

参数
[ @server = ] 'server'
要删除的服务器。server 的数据类型为 sysname,无默认值。server 必须存在。

[ @droplogins = ] 'droplogins' | NULL
指示如果指定了 droplogins,那么对于 server,还必须删除相关的远程服务器和链接服务器登录名。@droplogins 的数据类型为 char(10),默认值为 NULL
*/

4.LinkedServer建立好以后,就可以正常使用了。

SQL的写法有两种
a)
使用T-SQL语法:
   SELECT * FROM LNK1..
用户名.表名 注意,用户名.表名都必须大写。

b)使用PLSQL语法:
   select * from openquery(LNK1,'select * from
用户名.表名')

 

本人在使用的时候发现的问题及解决方案:

问题:

服务器: 消息 7391,级别 16,状态 1,过程 p_exec_orginfo_import,行 9
该操作未能执行,因为 OLE DB 提供程序 'MSDAORA' 无法启动分布式事务。
OLE DB 错误跟踪[OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b]。

解决方案:

 

不要加事务TRAN就可以了。

 

问题:

 

服务器: 消息 7399,级别 16,状态 1,行 1

OLE DB 提供程序 'MSDAORA' 报错。

[OLE/DB provider returned message: 未找到 Oracle 客户端和网络组件。这些组件是由 Oracle 公司提供的,是 Oracle 8i (或更高) 客户软件安装的一部分。

 

在安装这些组件之前,将无法使用此提供程序。]

OLE DB 错误跟踪[OLE/DB Provider 'MSDAORA' IDBInitialize::Initialize returned 0x80004005:  

解决方案:

****修改注册表,这个Bug来自于微软和Oracle的接口不好所导致的。

Oracle Client  Microsoft Windows NT、
Oracle Microsoft Windows 95、
Client Windows 98 和 Windows 98 SE
Microsoft Windows 2000/XP/2003
7.x [HKEY_LOCAL_MACHINE\SOFTWARE
\Microsoft\TransactionServer\Local Computer\My Computer]
"OracleXaLib"="xa73.dll"
"OracleSqlLib"="SQLLib18.dll"
"OracleOciLib"="ociw32.dll

 

[HKEY_LOCAL_MACHINE\SOFTWARE
Microsoft\MSDTC\MTxOCI]
"OracleXaLib"="xa73.dll"
 "OracleSqlLib"="SQLLib18.dll"
 "OracleOciLib"="ociw32.dll"
 
8.0 [HKEY_LOCAL_MACHINE\SOFTWARE
\Microsoft\Transaction Server
\Local Computer\My Computer]
"OracleXaLib"="xa80.dll"
"OracleSqlLib"="sqllib80.dll"
"OracleOciLib"="oci.dll"
 
[HKEY_LOCAL_MACHINE\SOFTWARE
 \Microsoft\MSDTC\MTxOCI]
 "OracleXaLib"="xa80.dll"
 "OracleSqlLib"="sqllib80.dll"
"OracleOciLib"="oci.dll"
8.1 [HKEY_LOCAL_MACHINE\SOFTWARE
\Microsoft\Transaction Server
\Local Computer\My Computer]
"OracleXaLib"="oraclient8.dll"
"OracleSqlLib"="orasql8.dll"
"OracleOciLib"="oci.dll"
 
[HKEY_LOCAL_MACHINE\SOFTWARE
 \Microsoft\MSDTC\MTxOCI]
"OracleXaLib"="oraclient8.dll"
"OracleSqlLib"="orasql8.dll"
"OracleOciLib"="oci.dll"
 
9.0 [HKEY_LOCAL_MACHINE\SOFTWARE
\Microsoft\Transaction Server
\Local Computer\My Computer]
"OracleXaLib"="oraclient9.dll"
"OracleSqlLib"="orasql9.dll"
"OracleOciLib"="oci.dll"
[HKEY_LOCAL_MACHINE\SOFTWARE
 \Microsoft\MSDTC\MTxOCI]
"OracleXaLib"="oraclient9.dll"
"OracleSqlLib"="orasql9.dll"
"OracleOciLib"="oci.dll"

 
10.0 [HKEY_LOCAL_MACHINE\SOFTWARE
\Microsoft\Transaction Server
\Local Computer\My Computer]
"OracleXaLib"="oraclient10.dll"
"OracleSqlLib"="orasql10.dll"
"OracleOciLib"="oci.dll"
[HKEY_LOCAL_MACHINE\SOFTWARE
 \Microsoft\MSDTC\MTxOCI]
"OracleXaLib"="oraclient10.dll"
"OracleSqlLib"="orasql10.dll"
"OracleOciLib"="oci.dll"
 

 希望对遇到此问题的兄弟姐妹们有帮助。

posted on 2008-07-23 11:03  寒枫  阅读(4146)  评论(6编辑  收藏  举报