检查SQL Server 2000/2005的连接详细信息

时间:2018-05-03 06:38:08

标签: sql sql-server database sql-server-2005 database-connection

我想将SQL 2000/2005上托管的一些数据库迁移到SQL 2014,我没有直接访问数据库,我想知道连接到它的所有应用程序和连接细节。有没有最好的方法来获取这些信息?我尝试使用数据库分析但不允许这样做,因为它占用了托管数据库服务器上的大量空间,导致中断。

任何更好的方式,如SQL语句或远程连接监视都会有所帮助。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

要查找2000/2005年连接到数据库服务器的进程的名称,您需要运行一个作业,可能每30秒甚至更频繁地运行一次。该作业必须将结果存储到临时表中,然后添加新的进程名称和数据库,以及可能的登录。这是一个开始:

创建一个表来累积信息:

create table DBUsage_accumulate (
    [id] int identity(1,1) NOT NULL,
    [LoginName] SYSNAME NOT NULL,
    HostName SYSNAME NOT NULL,
    DBName SYSNAME NOT NULL,
    CONSTRAINT PK_DBUSAGE_ACCUMULATE PRIMARY KEY CLUSTERED (id asc));

然后你需要在这个表上有一个唯一约束,使用索引:

CREATE UNIQUE NONCLUSTERED INDEX 
    IX_ACCUMULATE_LOGIN_DB_HOST
on DBUsage_Accumulate
(
    LoginName asc
    ,HostName asc
    ,DBName asc
);

现在你需要定期对sp_who2:

进行检查
CREATE TABLE #temp_sp_who2
    (
      SPID INT,
      Status VARCHAR(1000) NULL,
      [LoginName] SYSNAME NULL,
      HostName SYSNAME NULL,
      BlkBy SYSNAME NULL,
      DBName SYSNAME NULL,
      Command VARCHAR(1000) NULL,
      CPUTime INT NULL,
      DiskIO INT NULL,
      LastBatch VARCHAR(1000) NULL,
      ProgramName VARCHAR(1000) NULL,
      SPID2 INT
      --,RequestID INT NULL --comment out for SQL 2000 databases
    )

INSERT  INTO #temp_sp_who2
EXEC sp_who2;

CREATE TABLE #temp_sp_who2
    (
      SPID INT,
      Status VARCHAR(1000) NULL,
      [LoginName] SYSNAME NULL,
      HostName SYSNAME NULL,
      BlkBy SYSNAME NULL,
      DBName SYSNAME NULL,
      Command VARCHAR(1000) NULL,
      CPUTime INT NULL,
      DiskIO INT NULL,
      LastBatch VARCHAR(1000) NULL,
      ProgramName VARCHAR(1000) NULL,
      SPID2 INT
      --,RequestID INT NULL --comment out for SQL 2000 databases
    )

INSERT  INTO #temp_sp_who2
EXEC sp_who2;

delete from #temp_sp_who2
where exists (
    select 1 from DBUsage_accumulate A
    where A.LoginName = #temp_sp_who2.Loginname
    and A.HostName = #temp_sp_who2.hostName
    and A.DBName = #temp_sp_who2.dbname);

insert into DBUsage_accumulate(LoginName,HostName,DBName)
select 
distinct 
    LoginName
    ,HostName
    ,dbname
from #temp_sp_who2
where [DBName] is not null
and [HostName] != '  .';

将最后一块SQL放入每5-30秒运行一次的作业中,将累积所有主机名,数据库名称和登录名的列表。您可以使用它来迁移正确的数据库和登录,以及修改客户端计算机中的连接字符串。

2000年测试。