Прочитайте SQL Server 2005 ldf файл

2

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

  • 2
    Если ты не возражаешь, зачем тебе это делать? Это кажется неправильным путем куда угодно ...
  • 1
    Вы не найдете никаких примеров, потому что это не то, что вы должны делать.
Показать ещё 2 комментария
Теги:
sql-server

5 ответов

4
Лучший ответ

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

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

select * from ::fn_dblog(null,null)

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

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

3

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

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

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

2

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

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

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

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

1

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

Select * from ::fn_dblog(null,null)

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

  • 1
    вот моя запись в блоге кстати :)
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню