当前位置: 首页 > 面试题库 >

测试链接服务器的连接并返回连接的链接服务器

谷梁驰
2023-03-14
问题内容

我想编写一个脚本来测试所有链接的服务器,并返回唯一已连接的服务器(可以肯定只有一个)。

这是我当前的脚本,但是我被困在这一点上:

DECLARE @retval INT
DECLARE @connected INT
DECLARE @name NVARCHAR(100)
DECLARE @getid CURSOR

SET @connected = 0

SET @getid = CURSOR FOR
SELECT name as Servers FROM sys.servers


OPEN @getid

FETCH NEXT FROM @getid INTO @name
WHILE @@FETCH_STATUS = 0

BEGIN
        EXEC @retval = sys.sp_testlinkedserver @name
        SELECT @name
        FETCH NEXT
        FROM @getid INTO @name

END

CLOSE @getid
DEALLOCATE @getid

但是使用此查询,代码无法在第一次迭代时停止,因为它无法连接到表的第一台服务器。这是错误消息:

链接服务器“ server1”的OLE DB提供程序“ MSDASQL”返回了消息“通信链接失败;
-10709连接失败(连接超时已过期)”。消息7303,级别16,状态1,过程sp_testlinkedserver,第1行无法为链接服务器“
server1”初始化OLE DB提供程序“ MSDASQL”的数据源对象。

任何想法,如何通过错误消息?


问题答案:

更改了代码中的一些内容……试试吧。

  • IsOff仅表示连接失败。
  • 我添加了where子句以仅查看链接服务器
  • 我从未将游标视为变量,所以我删除了该游标以及其他不需要的变量
  • 使用了TRY / CATCH,因为sys.sp_testlinkedserver引发了异常,如果sys.sp_testlinkedserver不成功,则会引发异常。
  • 返回失败的原因
  • 将所有结果存储到表变量中,仅返回失败

DECLARE @name NVARCHAR(100)

declare @table table (IsOff int, ServerName varchar(100), TheError varchar(4000))


DECLARE getid CURSOR FOR
SELECT  name FROM sys.servers where is_linked = 1


OPEN getid

FETCH NEXT FROM getid INTO @name
WHILE @@FETCH_STATUS = 0

BEGIN

    begin try
        exec sys.sp_testlinkedserver @name
    end try

    begin catch
        insert into @table
        values
        (1,@name,ERROR_MESSAGE())
    end catch

FETCH NEXT FROM getid INTO @name

END

CLOSE getid
DEALLOCATE getid

select ServerName, TheError from @table where IsOff = 1


 类似资料:
  • 问题内容: 我有一个SQL Server 2012.(120.120.55.15) 今天,我将MySQL服务器(120.120.55.30)链接到我的SQLServer,并将其命名为 “ MYSQL”。 在对象资源管理器中,一切似乎都很好。我可以看到 MySQL 服务器的数据库“ exampleDataBase ”和其中的表。 但是当我尝试运行选择查询时,如下所示: 我弄错了: 消息7399,级别

  • 我正在尝试连接两个docker容器,一个是posgresql,另一个是python flask应用程序。两者都链接正确,python应用程序中的所有连接变量都直接取自postgres容器中通过链接公开的连接变量,并且与检查postgresql容器时发现的连接变量相同。当我将psql与连接字符串中的精确参数一起使用时,即: 成功连接到postgres容器中的数据库,因此我知道postgres正在通过

  • 我在运行使用Netty的服务时遇到了问题。它启动和工作正常,但只有一次。在此之后,不接受任何连接(它们将立即被删除)。 当我第一次使用(示例端口,随便什么)连接到服务器时,一切正常: 客户端会话: 服务器日志: --编辑2-- 只要连接处于活动状态,服务器就可以正常工作--在关闭连接之前,我可以轻松地交换请求/响应。 不要被IP地址迷惑,这是一个转发到Docker的本地端口,应用程序就是在那里启动

  • 问题内容: 我希望能够以编程方式(在T-SQL中)检查当前服务器和数据库是否已存在特定的链接服务器(这样,如果该链接尚不存在,则可以创建它)。我尝试过这样的事情: 但是,即使链接已经存在,OBJECT_ID测试也始终返回null。有什么方法可以在T-SQL中执行此检查,以便我的其余代码可以假定链接始终存在? 问题答案: 办理登机手续sys.servers:

  • 问题内容: 我正在尝试将链接的服务器添加到Access数据库。我正在使用以下SQL代码来执行此操作。 但是当我运行这个… 我得到这个错误… OLE DB提供程序’Microsoft.Jet.OLEDB.4.0’不能用于分布式查询,因为该提供程序配置为在单线程单元模式下运行。我究竟做错了什么? 我在32位系统上使用SQL Server Management Studio 2008。 问题答案: 我想

  • 线程“main”java.net.ConnectException:连接超时:在java.net.dualStackplainsockeTimpl.Connect0(本机方法)在java.net.dualStackplainsockeTimpl.socketConnect(DualStackplainsockeTimpl.java:69)在java.net.abstractplainsockeTi