Как просмотреть журналы транзакций? - PullRequest
2 голосов
/ 12 августа 2010

Я не уверен, что мне нужен журнал транзакций или что.

Моя первая проблема - у меня есть хранимая процедура, которая вставляет несколько строк.Я только что проверил elmah, и я вижу, что некоторые исключения sql случаются.Все они являются одной и той же ошибкой (ограничение PK было нарушено).

За исключением того, что Элма не говорит мне намного больше.Поэтому я не знаю, какая строка вызвала это ограничение первичного ключа (я предполагаю, что одна и та же строка по какой-то причине была добавлена ​​дважды).

Поэтому я не уверен, что журнал транзакций скажет мне, что произошлои какие данные пытались вставить.Я не могу воссоздать эту ошибку, она всегда работает для меня.

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

Я использую MS SQL 2005.

Спасибо

Ответы [ 3 ]

1 голос
/ 12 августа 2010

Не думаю, что журнал транзакций вам поможет.

Режимы SQL 2 о том, как вставлять данные с нарушением уникальности. Есть настройка: IGNORE_DUP_KEY. По умолчанию он выключен. Если вы включите его, SQL будет игнорировать повторяющиеся строки и ваш оператор INSERT будет успешным.

Вы можете прочитать об этом здесь: http://msdn.microsoft.com/en-us/library/ms175132.aspx

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

SELECT * FROM  fn_dblog(null, null)
1 голос
/ 12 августа 2010

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

Посмотрите эту статью Как работают контрольные точки и что регистрируется для примера использования fn_dblog ().Хотя это и другая тема, она показывает, как работает эта функция.

0 голосов
/ 12 августа 2010

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

Если вы используете asp.net для загрузки страницы, используете ли вы какое-либо кэширование вывода или кэширование данных, которые могут сохранять строку, которой больше нет в базе данных?

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