SQL Server 出现Error: 1326错误(管理器无法连接远程数据库)问题解决方案
SQLServer出现Error:1326错误
我们在在使用SQLServer时都会遇到使用SQLServerManagementStudio无法连接远程数据库实例的问题,错误描述信息摘录如下:
Anerrorhasoccurredwhileestablishingaconnectiontotheserver.
(provider:NamedPipesProvider,error:40–CouldnotopenaconnectiontoSQLServer)(MicrosoftSQLServer,Error:5)
Anerrorhasoccurredwhileestablishingaconnectiontotheserver.WhenconnectingtoSQLServer2005,thisfailuremaybecausedbythefactthatunderthedefaultsettingsSQLServerdoesnotallowremoteconnections.(provider:NamedPipesProvider,error:40–CouldnotopenaconnectiontoSQLServer)(MicrosoftSQLServer,Error:1326)
上面这段英文的翻译后大概是说:不能在数据库之间建立一个连接,原因是命名管道提供者出现错误。其实这是一个比较典型的数据库服务器设置问题,在局域网或广域网中都可能会遇到,我们只需要对数据库服务器进行一些配置便可以解决这个问题,来看看具体的步骤。
第一步:确保服务器端数据库服务已经启动
开始->所有程序->MicrosoftSQLServer2008->ConfigutationTools,打开SQLServerConfigurationManager,点击SQLServerServices,查看数据库服务是否已经启动,如果服务未开启,手动启动它。当然,你还可以通过点击Windows中的开始->控制面板->管理者工具->服务,来查看相应的数据库服务是否启动。或者如果服务器和你的机器在同一网络,你还可以通过命令“sqlcmd-L”(注意L要大写)去查看该网络内所有可用的SQLServer服务器。
第二步:在SQLServerConfiguration中启用TCP/IP
多个SQLServer服务器之间通过网络相互通信是需要TCP/IP支持的,为使SQLServer服务器能被远程连接必须确保TCP/IP已经启用。按照前面介绍的步骤打开SQLServerConfigurationManager,然后打开SQLServerNetworkConfiguration,选择你要设置的数据库,然后点击TCP/IP,右键启用。如果有必要,你还可以启用NamedPipes。记住,所有的修改都必须在重启SQLServer服务之后才能生效!
第三步:在Windows防火墙中打开SQLServer的端口号
很多时候我们在对数据库服务器本身做了很多次设置后仍然无法成功建立远程连接,这时就要考虑是否是防火墙在作怪。默认情况下,许多端口号和服务都会被防火墙所禁止而不能远程访问或执行,SQLServer默认的端口号也不例外。我们应该重新设置Windows防火墙给SQLServer添加例外。除非人为修改,默认情况下SQLServer的端口号是1433,将该端口号添加到Windows防火墙中。如果SQLServer存在命名实例,那么也应该将SQLServerbrowser添加到Windows防火墙中。(有关SQLServer的命名实例将在后面介绍)
打开Windows控制面板,选择Windows防火墙->ChangeSettings->Exceptions->AddPort
点击Addport...在弹出的对话框中填入:
Name:SQL
PortNumber:1433
Protocol:SelectTCP
第四步:在SQLServer管理器中启用远程连接
这一步通常会被数据库管理员忽略,如果未启用数据库远程连接,数据库实例只允许在本地进行连接而不能被远程连接,启用远程连接同样非常重要。默认设置中远程连接是被禁止的。如下图,打开SQLServerManagementStudio,右键点击数据库实例然后选择属性菜单。
在打开的窗口中,左侧选择Connections,然后勾选"Allowremoteconnectionstothisserver"。
第五步:启用SQLServerBrowser服务
如果SQLServer在安装时不是用的默认实例名而是自定义的实例名,并且没有配置特定的TCP/IP端口号,那么按照我们前面的描述SQLServer仍然不能支持远程连接。但如果你启用的SQLServerBrowser服务,便可以通过动态TCP/IP端口号进行远程SQLServer连接。启用SQLServerBrowser服务非常简单,与启用SQLServer类似,在SQLServerConfigurationManager中右键点击SQLServerBrowser,然后选择启用。启用该服务将会影响到服务器上所有已安装的SQLServer实例。
第六步:在防火墙中为sqlbrowser.exe应用程序创建例外
我们在前面已经提到了,自定义命名的SQLServer实例要支持远程连接需要启用sqlbrowser服务,Windows防火墙可能会阻止该服务执行。因此,我们必须在Windows防火墙中给sqlbrowser服务添加例外。
首先找到服务器上安装sqlbrowser.exe程序的路径,如C:\ProgramFiles\MicrosoftSQLServer\90\Shared\sqlbrowser.exe。如果不确定SQLServer安装在什么地方,你可以在Windows搜索一下文件名。与我们在前面介绍的在防火墙中添加SQLTCP/IP端口号的方法类似,给sqlbrowser.exe应用程序添加防火墙例外。
最后:重新创建数据库别名
创建SQLServer别名并在应用程序中使用它很常见。使用数据库别名可以确保一旦数据库的位置发生了变化,如更换了新的服务器,IP地址发生了变化等,应用程序中的数据库连接字符串不用修改。否则你更换了数据库的位置,你还要通知所有使用该数据库的应用程序修改源代码或配置文件中的连接字符串,这恐怕是不可能的。所以,使用数据库别名来配置连接字符串是一个非常明智的选择。另外,你还可以使用相同的别名来指向不同的数据库实例,当修改别名参数时,可以马上实现数据库之间的切换。创建数据库别名非常简单,在SQLServerConfigurationManager中选择Aliases进行创建。
自己补充:sqlservr.exe是服务PID是1760,占用端口号是1433,检查该端口是否占用,可以用telnet localhost1433去查看,还可以通过netstatIP|find"1433'去具体谁占用了。总结:1.一看用户名、密码;2二看是否设置允许远程连接;3三看防火墙是否把1433保护了(不知道的话可以直接关闭防火墙试试)
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!