我使用以下内容在我的服务器上创建了一个链接服务器:
exec sp_addlinkedserver
@server=N'MyOldDB',
@srvproduct=N'',
@provider = N'SQLNCLI',
@datasrc=N'MYSERVER',
@catalog=N'TheDefaultDatabase';
Run Code Online (Sandbox Code Playgroud)
现在,尽管以下描述了如何确定登录凭据(来自 MSDN):
本地服务器上的所有登录名和链接服务器上的远程登录名之间的默认映射是通过执行 sp_addlinkedserver 自动创建的。默认映射说明 SQL Server 在代表登录名连接到链接服务器时使用本地登录名的用户凭据。这相当于执行 sp_addlinkedsrvlogin 并将链接服务器的 @useself 设置为 true,而不指定本地用户名。
我收到以下错误:
Msg 18456, Level 14, State 1, Line 1
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.
Run Code Online (Sandbox Code Playgroud)
当我尝试这样做时:
select top 10 * from MyOldDB.TheDefaultDatabase.dbo.Batches
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出我正确的方向吗?
我有一个 SQL Server 实例RPT1(2008 R2),它是为“高级用户”设置的,可以运行他们自己的查询。此服务器链接到我们的生产报告服务器PRD1(SQL Server 2008 实例),具有直接RPT1查询链接服务器 ( PRD1) 的视图 (on ) 。
已使用需要在服务器上进行 CRUD 的帐户创建链接服务器(用于报告审核等)。
随着用户的成熟,他们也会请求更大的权限(例如创建自己的视图)。我想确保他们不会在链接的服务器上执行任何 CRUD 操作,但链接的帐户具有这些权限。
我看到的第一个解析路径是创建一个不同的用户,权限较低,然后重新链接服务器。
我的第二条路径是查看是否有办法DENY在PRD1服务器上为来自链接服务器的连接显式CRUD 。
是否可以仅从链接中明确拒绝 CRUD?或者我应该简单地将服务器与不同的帐户重新链接?我忽略了另一个明显的解决方案吗?
sql-server-2008 sql-server permissions sql-server-2008-r2 linked-server
我有一个从 sql server 2012 到 pervasive sql 的链接服务器的连接。
当我做的select field1, field2, field3 from mytable一切正常!
但是,当我这样做时,select field1, field2, field3, field4, ...field10+ from mytable我收到此错误消息:
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "MSDASQL" for linked server "KSLAP208" reported an error. The provider reported an unexpected catastrophic failure.
Msg 7330, Level 16, State 2, Line 1
Cannot fetch a row from OLE DB provider "MSDASQL" for linked server "KSLAP208".
Run Code Online (Sandbox Code Playgroud)
我查看了日志,这是它所说的:
2013-02-08 11:27:30.93 spid55 ***Stack Dump …Run Code Online (Sandbox Code Playgroud) 当对链接服务器运行一些查询时,我在 SSMS(服务器安装了 Windows Server 2008 和 Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1)中看到以下错误,特别是长时间运行的查询。
跨链接服务器从表中进行简单选择工作正常。这是一个新问题,当已经工作多年的 SP 开始出现故障时,人们注意到了这个问题。
我在服务器上运行了 Wireshark 捕获,捕获到链接服务器主机上端口 1433 的数据包。在捕获的尾部,我看到许多 (10) 个 TCP Keep-Alives 被发出(在关于错误校验和的消息之后),然后是一个 RST 数据包。RST 数据包与以下返回给客户端的错误相关。
我们网络上还有其他数据库服务器,其中链接服务器的配置相同,不会出现此问题。
我找到了一些文章,例如this和this。我们正在使用受牵连的 Broadcom NIC。烟囱卸载状态设置在服务器上启用。
我们将尝试禁用。关于故障排除的其他想法将不胜感激。
OLE DB provider "SQLNCLI10" for linked server "myServer" returned message "Protocol error in TDS stream".
OLE DB provider "SQLNCLI10" for linked server "myServer" returned message "Communication link failure".
Msg 65535, Level 16, State 1, Line 0
Session Provider: Physical …Run Code Online (Sandbox Code Playgroud) 我有一个与 SQL Server/链接服务器/视图相关的性能问题。我希望你能帮助我理解什么是做我想做的最好的方法 =)。
经过一些测试,情况是这样的:
SELECT * FROM (L1.V1 u L2.V2 u L3.V3) WHERE some filters,性能真的很棒SELECT * FROM VK WHERE some filters则性能比情况 1 差我对提高案例 2 的性能很感兴趣,因为我需要一个视图来在我们的软件中使用 nHbinernate 进行映射......
提前致谢,问候
约翰艾伦的帖子后更新
好的,我尝试但没有结果。我不是 DBA,我在 DB 配置方面的技能非常有限。我们可以一步一步来吗?
在远程服务器 ( called Y) 上,我called linkedserver …
我有一个 SQL Server 2012 实例,其中一个链接服务器使用 System i Access ODBC 驱动程序指向 IBM Iseries 系统上的 db2 数据库。
我正在尝试启用分布式事务。我相信该提供商确实根据IBM 文档支持它们(除非我误解了该链接)。
我正在运行以下查询:
BEGIN TRANSACTION
UPDATE LINKEDSERVER.LINKEDDATABASE.SCHEMANAME.TABLENAME SET COLUMN = VALUE
SELECT CAST('qwerty' as integer) -- we want an error here so the transaction fails
COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
链接服务器“LINKEDSERVER”的 OLE DB 提供程序“MSDASQL”返回消息“[IBM][System i Access ODBC 驱动程序]登记 DTC 阶段失败。2”。消息 7391,级别 16,状态 2,第 2 行 由于链接服务器“LINKEDSERVER”的 OLE DB 提供程序“MSDASQL”无法开始分布式事务,因此无法执行该操作。
我对这个错误所做的所有研究都遇到过想要禁用分布式事务而不是让它们工作的人。我已经在链接服务器属性上将“启用分布式事务的提升”设置为 true。
任何想法如何让这个工作?
编辑:更多信息/更新。当我在 Windows 日志中注意到这一点时,我正准备暂时放弃这个并等待帮助:
当 XA 事务被禁用时,调用者试图注册一个 XA 资源。
我找到了这个链接,它告诉我如何修改 …
sql-server linked-server sql-server-2012 iseries distributed-transactions
我有一个在 IAAS 提供程序上运行的远程数据库,我需要能够从我的本地工作站执行联合查询。我遇到了麻烦,因为当我尝试创建链接时,它试图使用命名管道进行连接。
我使用 SQL Server Native Client 10 创建了一个系统 DSN,并向其提供 IP、数据库、用户和密码。测试了它,它很好。
单击“确定”后,我收到一条错误消息,提示它找不到服务器,并显示它正在尝试使用命名管道。
我应该怎么做才能纠正这个问题?
所以有一个链接服务器。但是,在展开目录下拉列表后,我目前无法从 SSMS 中查看与该链接服务器关联的所有数据库。我的理解是这可能是权限问题。但是,我不确定我需要授予哪些权限才能与来自链接服务器的 tat db 进行交互。
有任何想法吗?
从链接服务器执行以下命令后:
select * from [<server>].[<database>].[dbo].table1
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
链接服务器 "" 的 OLE DB 访问接口 "SQLNCLI10" 不包含表 """."dbo"."table1""。该表不存在或当前用户对该表没有权限。
TLDR;
问题:我不确定如何显示与我的链接服务器关联的数据库之一。!
在我客户端的设置中,为了节省成本,较低环境中的数据库服务器都在一台服务器上,但在较高环境中,这些数据库部署在单独的服务器上,并且在跨服务器运行查询时使用链接服务器。
示例设置:
Dev:
Server1: DB1, DB2
UAT:
Server1: DB1 (with linked server for DB2)
Server2: DB2
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用一组 SQL Server Data Tools 项目来维护数据库,使用 4 个部分[server].[database].[schema].[object]标识符和数据库引用变量来对关系进行建模。当数据库不在同一台服务器上时这很有效,但当数据库在同一台服务器上时会失败。
我的问题:
我目前有一个本地服务器链接到远程服务器。
是否可以在本地服务器内创建存储过程,但从链接服务器内的表中查询数据。我知道可能存在性能问题,但我不愿意在链接服务器上创建 sp,因为它需要获得权限才能这样做。
我相信我的问题是语法,但我无法确定到底是什么,
USE [LOCALDB] --my local database or should I reference linked server db here
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[mystoredprocedure]
DECLARE @linkedserv NVARCHAR(150)
DECLARE @linkeddb NVARCHAR(150)
SET @linkedserv = 'HOSTNAME\SERVER';
SET @linkeddb = 'remotedb';
SELECT (CASE LTRIM(RTRIM([COLUMN1]))
WHEN '' Then ''
WHEN 'THIS' THEN 'THAT'
WHEN 'NOW' THEN 'NEVER'
ELSE 'OTHER' END) [Options]
INTO #TempTable
FROM @linkedserv.@linkeddb.dbo.TableOnLinkedServer --is this an issue?
FULL OUTER JOIN OtherTableOnLinkedServer ON TableOnLinkedServer.COUMN1 =
OtherTableOnLinkedServer.COLUMN0
Run Code Online (Sandbox Code Playgroud)
链接服务器 db …
linked-server ×10
sql-server ×9
iseries ×1
network ×1
performance ×1
permissions ×1
ssdt ×1
view ×1