fn_dblog выбирает данные только за последний час?
В 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);