Прочитайте SQL Server 2005 ldf файл - PullRequest
2 голосов
/ 17 января 2010

Я постараюсь объяснить мой вопрос в деталях. В программе, которую я пишу, мне нужно прочитать содержимое файла журнала для определенной базы данных. Я немного погуглил и обнаружил, что ldf - это двоичный файл. Но я не смог найти формат файла или любой учебник, показывающий, как читать этот файл. Я пишу программу на C #, но любые примеры на любых языках программирования будут с благодарностью.

Ответы [ 5 ]

4 голосов
/ 17 января 2010

Формат файла журнала не задокументирован и не является общедоступным, даже коммерческие читатели журнала не будут извлекать все из журнала - они, скорее всего, обратного инжиниринга или найма бывших разработчиков SQL, которые знают об этом

Прежде чем приступить к декодированию физического файла, попытайтесь декодировать вывод из:

select * from ::fn_dblog(null,null)

Это даст вам отформатированный вывод журнала и двоичных данных журнала в поле - даже это не тривиально для декодирования. Как и формат файла журнала, для правильного понимания записей вам понадобятся очень глубокие знания самого SQL.

В целом - я думаю, что вам лучше купить один из существующих коммерческих пакетов, потому что если вам нужно спросить о формате - ваши внутренние знания SQL вряд ли будут достаточно хорошими.

3 голосов
/ 01 июля 2013

Поздно, но, надеюсь, полезно ...

Существует API чтения журнала, который вы можете попробовать ApexSQL Log API . Это коммерческий инструмент, но у него есть бесплатная пробная версия.

Другие опции используют недокументированные функции, такие как DBCC LOG и fn_dblog.

2 голосов
/ 17 января 2010

Я не понимаю, зачем вам это нужно, но, по крайней мере, кажется, что это неправильно.

Каждая СУБД реализована для того, чтобы держать вас подальше от файловой системы, поскольку она должна иметь дело, например, с деталями операционной системы и обеспечивать параллелизм. Если вы попытаетесь прочитать этот LDB из работающей базы данных, вы добавите вес в другое место, не предназначенное для его поддержки.

Может быть вы просто хотите проверить, кто сделал какое-то обновление базы данных; в этом случае вы можете использовать триггеры для входа (в обычную таблицу database ), отметку времени и текущего пользователя.

Этот вариант намного проще, чем вы предлагали, и может быть достигнут задокументированным способом.

1 голос
/ 29 сентября 2013

Используйте эту команду как @Andrew Said:

Select * from ::fn_dblog(null,null)

А для получения дополнительной информации перейдите по этой ссылке: Как вы декодируете простую запись в журнале транзакций

0 голосов
/ 17 января 2010

Попробуйте Sql Log Rescue от RedGate. Если вы найдете способ форматирования файла, сообщите об этом всем остальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...