Я попытаюсь подробно объяснить свой вопрос. В программе, которую я пишу, мне нужно прочитать содержимое файла журнала для определенной базы данных. Я немного искал Google и обнаружил, что ldf - двоичный файл. Но я не смог найти формат файла или любой учебник, показывающий, как читать этот файл. Я пишу программу на С#, но все примеры на каких-либо языках программирования будут оценены.
Формат файла журнала не документирован и не является общедоступным, даже коммерческие лог-ридеры не будут извлекать все из журнала - они, скорее всего, обратятся к нему, или наняли бывших разработчиков SQL, которые знают об этом.
Прежде чем заниматься декодированием, физический файл начинается с попытки декодирования вывода из:
select * from ::fn_dblog(null,null)
Это даст вам отформатированный вывод журнала и двоичных данных журнала в поле - даже это не является тривиальным для декодирования. Помимо формата файла журнала, вам нужно иметь очень глубокое знание самого SQL, чтобы правильно понимать записи.
В целом - я думаю, вам лучше купить один из существующих коммерческих пакетов, потому что, если вам нужно спросить о формате - ваши внутренние знания SQL вряд ли будут достаточно хорошими.
Поздно, но, надеюсь, полезно...
Существует API для чтения журналов, который вы можете попробовать ApexSQL Log API. Это коммерческий инструмент, но он имеет бесплатную пробную версию.
Другие параметры используют недокументированные функции, такие как DBCC LOG и fn_dblog.
Я не понимаю, зачем вам это нужно, но, по крайней мере, кажется неправильным.
Каждая СУБД реализована, чтобы держать вас подальше от файловой системы, поскольку она должна иметь дело с деталями операционной системы и предоставлять concurrency, например. Если вы попытаетесь прочитать этот LDB из работающей базы данных, вы добавите вес в место, которое не предназначено для его поддержки.
Возможно, вы просто хотите проверить, кто сделал обновление базы данных; в этом случае вы можете использовать триггеры для регистрации (в обычной таблице базы данных), метки времени и текущего пользователя.
Эта опция намного проще, чем то, что вы предложили, и может быть достигнуто документированным способом.
Используйте эту команду как @Andrew Said:
Select * from ::fn_dblog(null,null)
И для получения дополнительной информации см. эту ссылку: Как вы декодируете простую запись в журнале транзакций
Попробуйте Sql Log Rescue из RedGate. Если вы найдете способ форматирования файла, пусть все остальные знают.