Как получить логическое имя журнала транзакций в SQL Server 2005 - PullRequest
20 голосов
/ 17 сентября 2009

Я пытаюсь написать подпрограмму T-SQL, которая сокращает файл журнала транзакций, используя DBCC SHRINKFILE на основе логического имени базы данных. Функция DB_NAME() выдает логическое имя базы данных. Есть ли аналог для журнала транзакций? Если нет, есть ли другой способ получить эту информацию? Имя по умолчанию для журналов транзакций - <<Database Name>>_log, но я бы не стал полагаться на это.

Ответы [ 3 ]

37 голосов
/ 17 сентября 2009

Вы можете использовать:

SELECT name
FROM sys.master_files
WHERE database_id = db_id()
  AND type = 1

Файлы журналов имеют тип = 1 для любого database_id, и все файлы для всех баз данных можно найти в sys.master_files.

EDIT:

Я должен отметить, что вы не должны сокращать свой журнал на регулярной основе. Ваш журнал транзакций должен иметь соответствующий размер, чтобы он никогда не увеличивался, а затем оставить его в таком размере. Журнал транзакций не может быть мгновенно инициализирован и должен быть обнулен при добавлении к нему пространства, что является медленной последовательной операцией, снижающей производительность.

13 голосов
/ 17 сентября 2009

Предполагая, что стандартная база данных (например, только один файл журнала), файл журнала всегда file_id = 2. Это применимо, даже если у вас есть несколько файлов данных (id = 3+ для NDF).

DBCC также принимает идентификатор файла. Итак, DBCC SHRINKFILE (2...) всегда будет работать. Вы не можете параметризовать внутри DBCC, поэтому это позволяет избежать динанмического SQL. Если вы хотите имя, используйте FILE_NAME (2).

4 голосов
/ 18 октября 2014
select Name
from sys.database_files

Генерирует

SomeDb_Data  
SomeDb_Log

SqlServer 2012

...