fn_dblog выбирает данные только за последний час?

Рейтинг: 1Ответов: 1Опубликовано: 20.03.2023

В MSSQL 2016 столкнулся с fn_dblog. Нужно посмотреть лог, например за вчера

Смотрим что уже есть (я так думаю)

 select *  from sys.dm_db_log_info(null)  where vlf_active = 1
 --database_id  vlf_first_lsn           vlf_create_lsn
 --11           000046e4:00000010:0001  000046d6:0001d550:0001

Получаем цифры lsn. При попытке посмотреть vlf_first_lsn получаю ответ пусто .

SELECT [Current LSN],           Operation ,    [Begin time] FROM ::fn_dblog('18148:16:1', '18148:16:4') 
 -- пусто
SELECT [Current LSN],           Operation ,    [Begin time] FROM ::fn_dblog('18148:120144:1', '18148:120144:4') 
-- пусто

SELECT [Current LSN],           Operation ,    [Begin time] FROM ::fn_dblog(null, null) 
        000046e4:0002c1f8:0001  LOP_BEGIN_XACT  2023/03/20 17:21:31:770 

(на момент выборки было около 2023/03/20 18:00)

000046e4 =18148 ("сегмент")

00000010 = 16

0001d550 = 120144

0002c1f8 =180728

0002c1f8 - это очень далеко в логе. Что это за ограничение, как можно посмотреть другие части лога? Может база в каком то режиме, может есть какие-то опции?

Ответы

▲ 1Принят

По-умолчанию fn_dblog читает данные только активной части журнала транзакций. Но при включенном флаге трассировки 2537 (упоминается здесь) может читать и неактивную часть:

DBCC TRACEON(2537);

SELECT *
FROM ::fn_dblog(NULL, NULL);

Если же данные за прошлый период находятся уже не в самом журнале, а в одном из его бэкапов, то использование fn_dblog не поможет (даже со включенным флагом). В таком случае следует воспользоваться sys.fn_dump_dblog:

SELECT *
FROM sys.fn_dump_dblog(
    NULL, NULL, N'DISK', 1, N'D:\DB_log_20230320_120000.bak',
    DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
    DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
    DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
    DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
    DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
    DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
    DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
    DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
    DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT);