Friday, December 01, 2006

[Window]配置sqlcmd远程连接sqlserver2005.

痛苦!!
我不是数据库管理员,对sqlserver不怎么熟悉,尤其是这些涉及到管理员的活儿. 因为sqlcmd是一个命令行的工具,可以用来做一些自动化的工作,比如自动创建数据库表模式, 自动装载数据. 本身ant又个sql的task是可以用来做这些事情的, 但是由于项目中的数据库脚本都是直接从sqlserver中导出的,完全是sqlserver的一套语法, 'sql' task不支持这些语法, 原来我是手工把数据库脚本中一些sqlserver特定的语句给删掉,比如 'GO', 'if exist...'等,但那得建立在数据库脚本比较少的基础上,而且得没有存储过程, 在现在的项目中,这些前提全被打破了, 实在没有办法,只好借助'sqlcmd'.

但是sqlcmd怎么都无法连接到到远程数据库服务器, google了一把, 也到msdn上看了不少资料, 知道关于远程连接的配置主要集中在' sqlserver外围应用配置器'上.
------------------------------------------------
1. 打开'Sqlserver 2005 Surface Area Configuration'->'按实例查看'->'Database Engine', 确保远程连接已经被设置.
2. 打开'Sqlserver Configuraion manager', 保证tcp/ip已经被激活了(服务器端与客户端).
NOTE: 上面两步都是在数据库服务器上进行的操作
3. 在客户端上, 打开'Sqlserver Configuraion manager', 保证tcp/ip已经被激活.
------------------------------------------------
在命令行窗口执行命令:
>sqlcmd -S 192.168.0.94 -U hp_ante -P hp_ante -d AnteProxy
可以连接到数据库服务器.
>sqlcmd -S hp-server-94 -U hp_ante -P hp_ante -d AnteProxy
连接也能成功.
>sqlcmd -s tcp:192.168.0.84,1433
如果'database engine'的远程连接配置的为'同时使用name piple和tcp/ip':
------------
HResult 0x2, Level 16, State 1
命名管道提供程序: 无法打开与 SQL Server 的连接 [2].
Sqlcmd: Error: Microsoft SQL Native Client : 建立到服务器的连
到 SQL Server 2005 时,默认设置 SQL Server 不允许远程连接这个
。.
Sqlcmd: Error: Microsoft SQL Native Client : 登录超时已过期.
------------
如果'database engine'的远程连接配置的为'仅使用tcp/ip':
------------
HResult 0x274D, Level 16, State 1
TCP 提供程序: No connection could be made because the target machine actively re
fused it.

Sqlcmd: Error: Microsoft SQL Native Client : 建立到服务器的连接时发生错误。连接
到 SQL Server 2005 时,默认设置 SQL Server 不允许远程连接这个事实可能会导致失败
。.
Sqlcmd: Error: Microsoft SQL Native Client : 登录超时已过期.
------------

我知道为什么最后那个命令不能成功, 后来又试了几种办法:
- 启动'Sqlserver 2005 Surface Area Configuration'中的'sqlserver browser'服务: 无法连接
唉,不管怎么样,至少有方法可以连接成功了. 如果你的sqlcmd连接不能成功, 除了上面说的配置以外,还要检查以下部分:
1. SQL Express is running (hey, gotta check)
2. SQL Browser is running
3. TCP/IP is enabled as a server protocol
4. You've created an Exception in your firewall for SQL Express
5. You've created an Exception in your firewall for SQL Browser

参考资料:
- http://blogs.msdn.com/sqlexpress/archive/2005/05/05/415084.aspx
- http://msdn2.microsoft.com/zh-cn/library/ms162773.aspx