Проверьте детали подключения к SQL Server 2000/2005 - PullRequest
0 голосов
/ 03 мая 2018

Я хочу перенести некоторые БД, размещенные на SQL 2000/2005, на SQL 2014, у меня нет прямого доступа к БД, и я хочу знать все приложения, подключающиеся к нему, и детали подключения. Есть ли лучший способ получить эту информацию? Я пытался использовать профилирование БД, но это не разрешалось, так как занимало много места на размещенном сервере БД, что вызывало сбои.

Будет полезен любой лучший способ, например оператор SQL или мониторинг удаленного соединения.

Заранее спасибо за вашу помощь.

1 Ответ

0 голосов
/ 03 мая 2018

Чтобы узнать имена процессов, которые подключаются к серверу БД в 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 году.

...