机房有多个服务器,每个服务器上都装有sql server,互相之间用外网ip能访问,但是用内网ip就连接失败,这个是什么原因造成的,怎么解决。

解决方案 »

  1.   

    1、先能互ping
    2、防火墙有没有对端口限制?
    3、如果服务器有多个实例或者用了命名实例,需要指定实例名
      

  2.   


    就单个实例,使用内网地址报一下错误链接服务器"xxxxxx"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "由于预登录失败,客户端无法建立连接"。
    消息 64,级别 16,状态 1,第 0 行
    TCP 提供程序: 指定的网络名不再可用。
    链接服务器"xxxxxx"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "客户端无法建立连接"。
    消息 26,级别 16,状态 1,第 0 行
    因为在登录之前握手期间出现错误,所以客户端无法建立连接。最常见原因包括客户端试图连接到不受支持的 SQL Server 版本、服务器太忙无法接受新连接或服务器上的资源受到限制(内存或允许的最大连接数)。
      

  3.   

    检查一下你的实例配置,看看TCP协议是否“全部侦听”。
    从你的现象来看,很可能是关闭了“全部侦听”,导致TCP协议只侦听了部分网卡IP。
      

  4.   

    握手失败的问题,我当初是打开配置管理器里面红框那里选yes就可以了,另外你看看用实例名能不能访问?还有最常见原因包括客户端试图连接到不受支持的 SQL Server 版本、服务器太忙无法接受新连接或服务器上的资源受到限制(内存或允许的最大连接数)。这句,版本都一致是吧?然后是不是连闲时都无法访问?还有看看是不是有大量未提交事务
      

  5.   


    已经是这个设置,但是ip1可行,ip2就刚才那个错误
      

  6.   

    那为啥外网ip能连,内网ip就不行呢
      

  7.   

    现在是外网ip能连,内网ip就不行 
      

  8.   

    调用存储过程能加端口号?我以前是用外网调用别的机器上的存储过程,现在领导要求改成用内网调用
    exec [112.22.52.21].text.dbo.aa,端口号应该加在什么位置
      

  9.   

    配置成功了,先测试连接,连接成功,接着执行sql语句,比如select * from 内网ip.tt.dbo.table,就会报错, "登录超时已过期",再用链接服务器测试连接,就也报前面那个错误。
      

  10.   

    select 语句执行那么10多次,可以偶尔一会出现结果,这是不是因为内部网络限制的原因
      

  11.   

    我觉得你的网络环境或者sqlserver的配置有问题,如果完全不能执行,倒还说得过去,但是现在这情况,貌似是到达了某个阈值
      

  12.   

    也不知道是哪个配置有问题,select top 100 就报超时了,是网络环境问题?
      

  13.   

    难道是因为系统版本不一样,导致网络设置问题?一个是win2008,一个是2003.刚才用两个2003的服务器试了下,内网地址就ok
      

  14.   

    经过版主的提点,我研究了半天,问题应该是这个:目标服务器上有2个数据库(我也是刚发现有两个),一个2005,一个2008的,在链接服务器时,服务器类型不能选sql server,而应该选择数据源,把2008那个数据源的名称填进去。这样设置后,就能随便查询调用了。但是2005的服务都已经停掉了,为什么会影响到链接?求版主指点
      

  15.   

    提醒一下,那个不叫“数据库”,应该叫“实例”,多实例环境下,访问实例需要指定实例名,不然sqlserver默认连到第一个安装的实例上。估计你第一个安装的是2005.
      

  16.   

    一开始链接服务器就是直接选的sql server,查询的时候多次报错,偶尔一次能出现数据,但是目标服务器上2005的服务已经停了