Что может быть причиной для SQL Server Express для отката базы данных в предыдущее состояние?
У меня есть очень странные проблемы. У меня есть приложение, работающее на терминальном сервере Windows 2003 от нескольких клиентов. Приложение использует SQL Server 2008 Express в качестве своей базы данных.
Вчера я подключился к приложению, закрыл некоторые сеансы на сервере, которые не отвечали, и, к моему удивлению, я увидел, что некоторые данные отсутствуют в базе данных. После дальнейшего поиска я обнаружил, что все изменения базы данных, сделанные с прошлой недели, были потеряны.
Это как будто база данных откатила все изменения и вернула в состояние неделю назад! Я могу подтвердить, что все изменения были потеряны. На самом деле я вставил запись в таблицу с identity_insert ON
(чтобы вручную вставить идентификатор в числовой столбец), и эта запись отсутствует, так что это никоим образом не является ошибкой программы.
Кто-нибудь имеет представление о том, что могло произойти здесь?
РЕДАКТИРОВАТЬ
У меня есть подозрение: может ли транзакция, инициированная сеансом, оставаться в неподтвержденном состоянии в течение одной недели, сохранять все изменения базы данных, а когда я закрываю сеанс, откатывать все сделанные изменения?
РЕДАКТИРОВАТЬ II
Найти это в журнале:
2 ответа
SQL Server никогда не откатывает базу данных до предыдущего состояния (как это). База данных была восстановлена, или весь диск / ВМ был откатан, или был выполнен DML, чтобы создать впечатление, что откат произошел (но на самом деле этого не произошло). Возможно, кто-то выполнил инструмент синхронизации в неправильном направлении.
В вопросе нет информации, позволяющей найти проблему. Но это, конечно, не SQL Server откат базы данных.
Вы можете попробовать просмотреть журнал, используя fn_dblog
,
Из журнала видно, что сервер только что запустился после перезагрузки или перезапуска службы.
Если база данных не была корректно закрыта, ее можно оставить с частично примененными транзакциями. Если это происходит, база данных восстанавливается при запуске.
Любые незавершенные транзакции откатываются. Подтвержденные транзакции, которые еще не были применены, переносятся вперед. Время, необходимое для восстановления, зависит от размера транзакций в журнале, которые еще не были применены к базе данных.
Транзакции могут не отображаться в журнале после их отката после сбоя. Это зависит от их расположения в журнале и режима восстановления баз данных.
- Если транзакция находится в конце журнала, вполне вероятно, что журнал просто откатится и транзакция будет удалена.
- Если транзакция находится в середине журнала, вы можете увидеть LOP_ABORT_XACT в журнале.
- При использовании простого восстановления есть большая вероятность, что журнал будет очищен после восстановления (поскольку журналы хранятся только до фиксации транзакций).
См. Удалены ли записи журнала из файла ldf для отката? Больше подробностей.