Подтвердить что ты не робот

Как получить логическое имя журнала транзакций в SQL Server 2005

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

4b9b3361

Ответ 1

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

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

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

EDIT:

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

Ответ 2

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

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

Ответ 3

select Name
from sys.database_files

Формирует,

SomeDb_Data  
SomeDb_Log

SqlServer 2012