先决条件:
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,默认值为 NULL。NULL 指定此项应用于连接到 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" |
希望对遇到此问题的兄弟姐妹们有帮助。