Как перехватить вывод DBCC-инструкции во временной таблице

#sql-server #tsql #sql-server-2000

#sql-сервер #tsql #sql-server-2000

Вопрос:

Я попробовал следующее на SQL-Сервере:

 create table #TmpLOGSPACE(
  DatabaseName varchar(100)
  , LOGSIZE_MB decimal(18, 9)
  , LOGSPACE_USED decimal(18, 9)
  ,  LOGSTATUS decimal(18, 9)) 

insert #TmpLOGSPACE(DatabaseName, LOGSIZE_MB, LOGSPACE_USED, LOGSTATUS) 
DBCC SQLPERF(LOGSPACE);
  

…но при этом возникает синтаксическая ошибка…

Какие-либо предложения?

Ответ №1:

Поместите инструкцию для запуска внутрь EXEC('')

 insert #TmpLOGSPACE(DatabaseName, LOGSIZE_MB, LOGSPACE_USED, LOGSTATUS) 
EXEC('DBCC SQLPERF(LOGSPACE);')
  

Ответ №2:

Это не дает прямого ответа на вопрос, но отвечает на суть вопроса: предположительно, вам нужен простой способ определить текущий размер файла журнала:

 SELECT size*8192.0/1024.0/1024.0 as SizeMegabytes 
FROM sys.database_files
WHERE type_desc = 'LOG'
-- If the log file size is 100 megabytes, returns "100".
  

Причина, по которой мы умножаем на 8192, заключается в том, что размер страницы в SQL server равен 8192 байтам.

Причина, по которой мы делим на 1024, а затем снова на 1024, заключается в преобразовании размера из байтов в мегабайты.