SQL Server 2000 基础(3)——连接

来源:互联网 发布:亚马逊和淘宝市值 编辑:程序博客网 时间:2024/06/06 05:07

一、如何断开用户连接

1.1、停掉SQL SERVER服务 

此操作对整个SQL SERVER服务器都生效,有如下几种方法:

1SQL Server服务管理器;

2)控制面板>>管理工具>>服务,或者,运行services.msc

3)命令提示行下的net stop mssqlserver /y命令,在SQL SERVER中可这样写:

4SQL语句:ShutDown,虽然也是最终停掉SQL SERVER服务,不过这个命令有一些参数可供选择(如:WITH   NOWAIT),更加人性化一些,详见SQL SERVER BOL

或者exec master..xp_cmdshell 'net stop mssqlserver /y'

1.2、设置单用户模式

SINGLE_USER 每次允许一个用户连接到数据库,所有其它用户连接均中断。

中断连接的时间段由 ALTER DATABASE 语句的WITH <termination>子句控制,如果省略了 termination 子句,那么将允许事务自主提交或回滚。

新的连接尝试将被拒绝。即使设置此选项的用户注销,数据库仍保持 SINGLE_USER 模式。这时,其他用户(但只能是一个)可以连接到数据库。

此操作只对当前数据库生效,语句如下:

alter database   db_name   set   single_user  

把用户模式设回数据库默认状态,语句如下:

alter database   db_name   set   multi_user  

错误方法:

脱机,因为当前有连接在线,而脱机是一个要求无连接的操作,

在企业管理器中给数据库脱机,出现如下错误:

错误5070:如果其他用户正在使用数据库“test”,则数据库状态不能更改

ALTE DATABASE语句失败。

sp_dboption命令失败。

在查询分析器中,在master运行alter database语句,出现如下错误:

ALTER DATABASE 语句失败。

有关数据库选项设置的细节,请见《SQL Server 2000 管理——选项设置》series

1.3KILL

此操作对整个SQL SERVER服务器都生效,但可以根据查看的SPID,有选择的KILL掉需要断开的连接,注意KILL不能取消自己的进程的,如果需要自己也断开,退出连接即可。方法如下:

exec sp_who

--或者

exec sp_who2

--或者

select * from master..sysprocesses

--然后

kill 111 --假如要kill的连接SPID111

1.4、物理方法

此操作对整个SQL SERVER服务器都生效。

比如:拨掉网线,禁用网卡,关掉所在网络的交换机等一切可以断开网络的方法都行。

二、SQL SERVER连接限制

1)设置SQL SERVER的最大连接数,就是建立的连接数(connection

企业管理器>服务器>属性>连接,0为默认设置(即不受限,32767);

或者

exec sp_configure N'user connections',0 —-需要重启服务生效

注意:这里的连接数是指不大于等于,即小于设置的值。

将连接最大数设为1,重启SQL SERVER,连接时提示“一般网络性错误,ConnectionOpen(PreLoginHandshake()),请验证SQL SERVER 是否在运行...”,这样就出现自己也连不上的情况,最大为1,也就是连接数只能是小于1的整数,那就是0个。解决方法如下:

1、停止sql服务

2、用单用户模式启动SQL SERVER

在命令行模式下输入sqlservr –c -f -m或者输入sqlservr -m

sqlservr.exeSQL SERVER安装目录下,可以搜一下,我的是在如下路径:

C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/Binn

3、用osql登录重新配置:

osql /U"sa" /P"密码" /Q"exec  sp_configure  N'user  connections',  0"  

4、然后重新启动操作系统。

2)设置SQL SERVER的最大线程数,连接或者其他SQL SERVER操作(比如select),都是以线程的形式在工作的(多线程)。

有关服务器选项设置的细节,请见《SQL Server 2000 管理——选项设置》series

3)假设SQL SERVER服务器只允许最多10个客户端联接,超过10个则不允许连接,如何控制?

这种情况只出现在两层的时候,三层是通过中间的一个或几个CONN来实现的,不能达到连接限制的,当然可以通过程序以计数的形式来控制,但不是通过SQL SERVER

4)查年SQL Server当前连接数

以下各种方法都无法准确地获取到SQL Server的当前ACTIVE连接数,不知道在SQL Server 2005中这样的情况有没有改善。

1、系统变量:

SQL Server提供了一些系统变量返回连接值,个人觉得,很容易产生误解。

@@CONNECTIONS 返回自上次启动SQL Server以来连接或试图连接的次数。

@@MAX_CONNECTIONS 返回SQL Server上允许的同时用户连接的最大数。返回的数不必为当前配置的数值。

2、系统存储过程

SP_WHO /SP_WHO2

提供关于当前SQL Server 用户和进程的信息。可以筛选返回的信息,如下:

列出所有活动的用户:SP_WHO 'active'

列出某个特定用户的信息:SP_WHO 'sa'

3、系统表

sysprocesses

sysprocesses 表中保存关于运行在SQL Server上的进程的信息。这些进程可以是客户端进程或系统进程。连接与进程是一以多的关系,而且这个系统表中的系统是个累计量,而不是最新的统计量。

sysperfinfo

包括一个SQL Server表示法的内部性能计数器,可通过 Windows NT 性能监视器显示。

同样,这里得到的信息也只是所有时间内的累计量。