首先我们添加链接服务器:
exec sp_addlinkedserver 'test','oracle','MSDAORA','test'
EXEC sp_addlinkedserver
@server = 'server', --链接服务器的本地名称。也允许使用实例名称,例如MYSERVER\SQL1
@srvproduct = 'product_name' --OLE DB数据源的产品名。对于SQL Server实例来说,product_name是'SQL Server'
, @provider = 'provider_name' --这是OLE DB访问接口的唯一可编程标识。当没有指定它时,访问接口名称是 SQL Server数据源。SQL Server显式的provider_name是 SQLNCLI(Microsoft SQL Native Client OLE DB Provider)。Oracle的驱动分为两种,一种是 MSDAORA(微软提供),Oracle 8或更高版本的是OraOLEDB.Oracle(oracle提供)。MS Access和MS Excel的是 Microsoft.Jet.OLEDB.4.0。IBM DB2的是DB2OLEDB,以及ODBC数据源的是MSDASQL
, @datasrc = 'data_source' --这是特定OLE DB访问接口解释的数据源。对于SQL Server,这是 SQL Server(servername或servername\instancename)的网络名称。对于Oracle,这是SQL*Net别名。对于 MS Access和MSExcel,这是文件的完整路径和名称。对于ODBC数据源,这是系统DSN名称
, @location = 'location' --由特定OLE DB访问接口解释的位置
, @provstr = 'provider_string' --OLE DB 访问接口特定的连接字符串。对于ODBC连接,这是ODBC连接字符串。对于MS Excel,这是Excel 5.0
, @catalog = 'catalog' --catalog的定义变化基于OLE DB访问接口的实现。对于SQL Server,这是可选的数据库名称,对于DB2,这个目录是数据库的名称
reference:http://technet.microsoft.com/zh-cn/library/ms190479(v=sql.90).aspx
exec sp_addlinkedsrvlogin 'test','false',null,'user_01','test' --第三个参数说明一下,这里填NULL,相当于图形界面使用此安全上下文建立链接
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'test', --要添加登录名映射的本地链接服务器
@useself = false, --当使用true值时,使用本地SQL或Windows登录名连接到远程服务器名。如果设为false,存储过程 sp_addlinkedsrvlogin的locallogin、rmtuser和rmtpassword参数将应用到新的映射中
@locallogin = NULL, --这是映射到远程登录名的SQL Server登录或Windows用户的名称。如果这个参数置为NULL,映射将应用SQL Server实例中的所有本地登录名
@rmtuser = '架构名', --用来连接到链接服务器的用户/登录名的名称
@rmtpassword = '访问密码' --用来连接到链接服务器的用户/登录名的密码 设置完后:
--查看链接服务器信息
select name,product,provider,data_source,query_timeout,lazy_schema_validation,is_remote_login_enabled,is_rpc_out_enabled
from sys.servers where is_linked=1
--查看链接登录名
select s.name linkedServerName,s.data_source linkedserver_source,s.is_linked,s.modify_date,
ll.remote_name,ll.local_principal_id,ll.uses_self_credential,
p.name localLoginName
from sys.Linked_logins ll
inner join sys.servers s on s.server_id=ll.server_id
left join sys.server_principals p on p.principal_id=ll.local_principal_id
where s.is_linked = 1
相关的还有:
sp_dropserver
sp_serveroption
sp_droplinkedsrvlogin 'oldname',name,'newname'
二 访问方式:select * from openquery(test,'select * from USER_01.TEST');
select * from TEST..USER_01.TEST --注意大小写
这样两者都行的,但是有点“奇怪”的就是:
select * from openquery(test,'select * from user_tables')是可以的.OPENQUYER相当于直接调于ORACLE里的执行.速度快.但写嵌套麻烦.
select * from TEST..ALL_TABLES是行不通的
我们这样:select * from TEST..SYS.DBA_USERS。
出现这种部问题的原因为msdora不支持oracle的特有字段类型clob,blob。
这里额外需要提一下的就是oracle.oledb要启用允许进程内。