我们有一个 SQL Server 2008 数据库,我们试图将它与 Access 2007 DB 链接(维护人员在大厅工作并拒绝迁移到 SQL Server)。我们有数据库的密码(假设数据库密码 = dbpassword,如果只有这个级别的保护,我认为我们已经链接到 Access 数据库,问题很少。
但是,Access 数据库位于网络驱动器上,并且位于该网络驱动器上受保护的目录中。我们知道用户名和密码(假设用户名 = cat 和密码 = pancakes)。
我正在研究这个 sp_addlinkedsrvlogin,我相信这是我们需要做的。不是吗?
sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'
[ , [ @useself = ] 'TRUE' | 'FALSE' | NULL ]
[ , [ @locallogin = ] 'locallogin' ]
[ , [ @rmtuser = ] 'rmtuser' ]
[ , [ @rmtpassword = ] 'rmtpassword' ]
Run Code Online (Sandbox Code Playgroud)
问题是,我不知道在这些参数中放什么。
我假设 rmtuser 将是“猫”,而 rmtpassword 将是“煎饼”......
以下是 Access 数据库的完整路径:\volume9\v9\projects\cats\cooking\pancakedb\back-end
volume9 似乎对应于 K: 驱动器...
那么 …
我无法将 ODBC 64 位驱动程序与在 SQL Server 2012 64 位实例上运行的 SSMS 2012 一起使用。但是,我相信 32 位驱动程序可以工作。
我的问题是我可以使用 SSMS 2005 32 位在 SQL Server 2012 的 64 位实例上使用 ODBC 创建链接服务器吗?我尝试这样做,但是当我单击“确定”以创建链接服务器时,我收到了消息:
索引超出数组范围
我在做什么完全错误,或者有什么方法可以使用 32 位 ODBC 连接创建此链接服务器?
Red Gate 部署管理器(RGDM) 今天失败并出现“登录失败”错误,即使它具有目标服务器的管理控制权:
2013-11-04 17:13:22 +00:00 INFO Creating [dbo].[GetPublications]
2013-11-04 17:41:29 +00:00 INFO Command RedGate.Deploy.Agent.Commands.SingleShotDeploymentCommand failed
2013-11-04 17:41:29 +00:00 INFO RedGate.Deploy.PluginApi.Deployment.ConventionFailedException: Dynamic deployment failed
2013-11-04 17:41:29 +00:00 INFO Login failed for user 'red_gate_deployment_manager'. ---> RedGate.Deploy.SqlServerDbPackage.Shared.Exceptions.SqlServerInaccessibleException: Dynamic deployment failed
2013-11-04 17:41:29 +00:00 INFO Login failed for user 'red_gate_deployment_manager'. ---> System.Data.SqlClient.SqlException: Login failed for user 'red_gate_deployment_manager'.
Run Code Online (Sandbox Code Playgroud)
我要部署的过程之一是指链接服务器上的分发数据库。定义如下所示:
CREATE PROCEDURE dbo.GetPublications
AS
BEGIN
SELECT publisher_db, publication, description
FROM DISTRIBUTOR.distribution.dbo.MSpublications;
END;
Run Code Online (Sandbox Code Playgroud)
在 SSMS 中,我以 red_gate_deployment_manager 的身份连接到目标服务器并尝试手动创建该过程。我收到了类似的错误:
Msg 18456, Level 14, State 1, …Run Code Online (Sandbox Code Playgroud) 我有一个 SQL Server 2008R2,我想远程连接到 SQL Server 2012SP1,为此我得到了:
IP: 12.34.56.78
Login: john
Password: pw1
Database: TESTDB
Table: test_table
Run Code Online (Sandbox Code Playgroud)
远程数据库在我的局域网之外,但是两边都配置了防火墙,所以我可以通过直接从我的数据库服务器打开SSMS来查询它。我执行以下操作:
EXEC sp_addlinkedserver '12.34.56.78', 'SQL Server';
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = [12.34.56.78], @locallogin = NULL , @useself = N'False', @rmtuser = 'john', @rmtpassword = 'pw1'
Run Code Online (Sandbox Code Playgroud)
到目前为止,没有错误,我可以在SSMS中看到链接服务器,“测试连接”成功但我无法查询。
select * from [12.34.56.78].TESTDB.test_table
Run Code Online (Sandbox Code Playgroud)
返回此错误:
Msg 208, Level 16, State 1, Line 1
Invalid object name '12.34.56.78.TESTDB.test_table'.
Run Code Online (Sandbox Code Playgroud)
从 Internet 定义链接服务器的正确方法是什么,如果可能,为其分配一个好听的名称(而不是通过 IP 引用它)?我应该使用 SQLNCLI 作为提供程序吗?
我已经构建了一个脚本/代理作业,每 10 分钟轮询一次我们的链接服务器,以确保它们在线。现在,当一个人离线时,它会生成一封电子邮件并通知我。见下文:

现在,现在它只使用通过/失败。我想要做的是,当服务器之间的通信离线时,不仅要生成它是离线的,还要生成原因。类似于您在测试链接服务器并且它处于离线状态时从 SSMS 获得的读数:

这可能吗?我已经搜索了任何可以帮助我完成此操作的其他详细参数,但找不到任何参数。信息是在 SSMS 中生成的,因此我相信有某种方法可以获取它,但我不确定如何获取。
像往常一样感谢伙计们!
更新 必须为此添加一些特定于系统的功能以及我已经构建但错误报告在线的我自己的 SQL。适用于我们的 SQL 服务器和 iSeries/400 环境。这是它现在吐出来的:

再次感谢您对这一问题的所有帮助。可能必须将其发布到 SSC,以便其他人可以使用它。
我的老板发来请求我说:我想要一个 SQL 查询,它列出特定组的所有域用户。我开始搜索查询。我找到了几个使用 Linked Server 的解决方案。
EXEC master.dbo.sp_addlinkedserver
@server = N'ADSI',
@srvproduct=N'Active Directory Service Interfaces',
@provider=N'ADSDSOObject',
@datasrc=N'adsdatasource'
Run Code Online (Sandbox Code Playgroud)
然后
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'ADSI',
@useself=N'False',
@locallogin=NULL,
@rmtuser=N'DOMAIN\USER',
@rmtpassword='*********'
Run Code Online (Sandbox Code Playgroud)
我用域管理员用户的信息替换了username和password,但出现此错误
无法为链接服务器“ADSI”创建 OLE DB 提供程序“ADsDSOObject”的实例。
我们的域名是akilus.local,但我没有替换数据源。
可能是什么问题?
我已经使用Get-MSSQLLinkPasswordsPowershell 脚本很长时间了,它提供了巨大的帮助。该脚本解密特定 Windows 服务器上所有链接服务器的密码,并以纯文本形式显示给您。此功能甚至已合并到dbatools Copy-SqlLinkedServer脚本中。
运行脚本有一些安全注意事项,如下所示
该脚本必须在 MSSQL 服务器上本地运行(因为 DPAPI 需要访问本地机器密钥)。执行脚本的用户还必须具有对所有数据库实例(用于 DAC 连接)的 sysadmin 访问权限和 Windows 服务器上的本地管理员权限(以访问注册表中的熵字节)。此外,如果启用了 UAC,则必须以管理员身份运行该脚本。
在最近升级到 SQL Server 2016 之前,此脚本一直运行良好。我想知道是否有人在 SQL Server 2016 下遇到过此脚本的任何问题。也许 SQL Server 2016 中的某些安全模型已更改,并且此脚本无法解密密码现在。
如果时间允许,我将尝试查看该dbatools Copy-SqlLinkedServer脚本是否仍然适用于 2016 年。
sql-server powershell linked-server sql-server-2016 dbatools
我在 SQL Server 2014 AG 组 (AG1) 中有一个数据库。- 两个节点。
在两个节点上,都设置了链接服务器。我正在从 AG 组 (AG1) 数据库的表中选择数据并插入链接服务器(来自另一个 AG 组(AG2)的数据库)。事务中唯一的语句是插入语句。它不是分布式事务。
为什么会出现以下错误?
链接服务器“LinkedserverListener”的 OLE DB 访问接口“SQLNCLI11”返回消息“事务管理器已禁用对远程/网络事务的支持。”。
消息 7391,级别 16,状态 2,第 2 行
由于链接服务器“LinkedServerListener”的 OLE DB 提供程序“SQLNCLI11”无法开始分布式事务,因此无法执行该操作。
示例代码如下。
Drop table #Myatran
Select 'ABC' name into #Myatran
DECLARE @pndstop_ps NVARCHAR(4000)
SET @pndstop_ps =
N'
INSERT INTO '+ 'linkedserver'+'.DB.dbo.MyaTEST(Name) SELECT name FROM #Myatran
'
SET XACT_ABORT ON
BEGIN TRANSACTION
EXEC sp_executeSQl @pndstop_ps
SET XACT_ABORT OFF
Run Code Online (Sandbox Code Playgroud) sql-server linked-server availability-groups sql-server-2014
当我执行从多个链接服务器提取信息并聚合数据的存储过程时,偶尔会收到此错误消息。它看起来与我下面的相似。
DECLARE Cur CURSOR FOR SELECT name FROM sys.servers WHERE is_linked = 1 AND (@Environments IS NULL OR name IN (SELECT Item FROM clrStringSplit(@Environments, ',')))
OPEN cur
FETCH NEXT FROM cur INTO @Environment
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRY
SET @Query = '
EXEC ' + @Environment + '.db.dashboard.storedproc ''' + CAST(@StartDate AS VARCHAR(10)) + ''', ''' + CAST(@EndDate AS VARCHAR(10)) + ''''
INSERT INTO #Table (Environment, Column1, Column2, Column3, Column4, Column5, Column6, Column7)
EXEC(@Query)
END TRY
BEGIN CATCH …Run Code Online (Sandbox Code Playgroud) 我们有两个独立的 SQL Server。在一台服务器上,我们有一个数据仓库 (DWH),在另一台服务器上,我们有销售信息数据库。
现在在 DWH 服务器上有一个 ETL 作业从销售服务器收集信息。该作业每天午夜后运行。DWH 通过链接服务器从销售数据库中收集信息。
现在,大多数情况下 ETL 作业运行没有任何问题。但有时会因为查询超时而失败。我们发现,有一个特定的模式:故障每 11 天发生一次。所以在第 11 天,ETL 作业无法收集信息。
出现以下错误:
链接服务器“我的链接服务器”的 SQLNCLI11 返回消息“查询超时已过期”。
注意:作业通常在启动后 10 分钟失败。
我们已经搜索了所有内容,但无法找出此问题的原因。我们也知道每次的数据量几乎一样。也没有任何运行所有 11 天之类的预定作业。
链接服务器上的远程查询超时设置为 0。
我们的下一步将是关闭销售服务器上的防病毒程序,以检查这是否会导致问题。
有没有人有任何线索或想法,我可以在哪里进一步搜索以找到问题?
linked-server ×10
sql-server ×8
dbatools ×1
deployment ×1
etl ×1
ms-access ×1
permissions ×1
powershell ×1
schema ×1