Как база данных SQL Server 2005 потеряет данные за несколько дней? - PullRequest
1 голос
/ 02 апреля 2009

Мне действительно нужна помощь здесь.

Я владелец приложения базы данных SQL Server, которое потеряло данные за три дня! Я не могу понять, как или почему.

Итак, вот установка.

  • База данных SQL Server 2005 32bit Standard Edition на сервере Windows 2000. (База данных B)

  • База данных находится в простом режиме восстановления

  • База данных подключена как подписчик к другой базе данных (64-разрядная версия предприятия SQL Server 2005 на предприятии Win2k3) с использованием непрерывной репликации слиянием SQL Server. (База данных A)

База данных B была перезагружена ночью X в рамках запланированной перезагрузки. Когда база данных восстановилась, она использовалась в обычном режиме в течение пары дней, и в нее были созданы отличные данные.

Но вчера, в День Х + 4, было потеряно много данных.

База данных B находится на сервере с другим экземпляром SQL Server, и они оба начали исчерпывать память (конфликтуют друг с другом).

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

AppDomain 2 (DatabaseB.dbo[runtime].1) is marked for unload due to memory pressure. 

AppDomain 2 (DatabaseB.dbo[runtime].1) unloaded. 

BACKUP LOG WITH TRUNCATE_ONLY or WITH NO_LOG is deprecated. 
The simple recovery model should be used to automatically truncate the transaction log. (on DatabaseB)

AppDomain 3 (DatabaseB.dbo[runtime].2) created. 

Я знаю, что данные отсутствуют из-за моих журналов аудита и того, что пользователь сделал снимок экрана некоторых данных до того, как они были удалены.

Так вот моя дилемма ... как это могло случиться?

Как данные за несколько дней пропадают из базы данныхB ?? (впоследствии он также отсутствует в публикации db!)

Обрезание с неиспользуемым доменом приложения привело к удалению данных из журнала?

Любые рассмотренные теории. Если кому-то нужны дополнительные данные, я могу их добавить.

Помощь!

Ответы [ 2 ]

2 голосов
/ 13 апреля 2009

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

1 голос
/ 02 апреля 2009

Репликация слиянием реализована с помощью триггеров, поэтому не требует полного восстановления. Возможно ли, что кто-то отключил все триггеры в БД? это просто сделать DISABLE TRIGGER [база данных] Это, по крайней мере, учитывает потерю данных подписчиком.

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

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

Ничто из этого не объясняет, почему данные пропали на обоих серверах. Должно быть что-то еще, что вызвало это.

Как вы убедились, что за 4 дня, когда все было «прекрасно создано», что это было на самом деле? у вас есть резервные копии с этих дней? вы можете видеть записи с отметками времени тех дней?

Возможно ли, что в машине есть призрак, который сделал восстановление, не сказав вам?

...