Последствия перезаписи поврежденного файла базы данных - PullRequest
1 голос
/ 16 марта 2020

У нас есть интерфейсная часть базы данных Access, которая часто портится (по разным причинам: плохая архитектура, плохой код, слишком много пользователей, медленная сеть и т. Д., Мы сейчас переписываем в SQL Server). Обычно, когда это происходит, администраторы отправляют электронное письмо всем сотрудникам и просят их выйти из внешнего интерфейса и любых других файлов, которые ссылаются на внутренний интерфейс (например, некоторые отчеты в Excel имеют к нему соединение), чтобы мы могли открыть БД и автоматически ее сжать / восстановить, когда он обнаружит его в поврежденном состоянии.

Выводить пользователей из системы - это как пасти кошек, и мы не всегда можем сделать это вовремя. Я реализовал событие таймера формы, которое проверяет 3-ю БД на наличие флага, должен ли он оставаться открытым, идея в том, что мы устанавливаем этот флаг в значение false, когда нам нужно закрыть внешние интерфейсы. Это кажется эффективным, но я не могу с уверенностью сказать, работает ли он на 100% установок, поскольку иногда мы все еще ощущаем, что файл заблокирован. Это может быть из-за отчетов Excel, хотя они просматриваются редко.

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

Мой вопрос: какие проблемы, если таковые имеются, связаны с перезаписью серверной части? Может ли это вызвать какие-либо проблемы, которые не сразу очевидны? Я занимаюсь этим уже несколько недель и не заметил никаких проблем, но это похоже на плохую практику. Например, что происходит с файлом блокировки? Это обновляется автоматически?

1 Ответ

2 голосов
/ 16 марта 2020

Немного, потому что худший случай уже произошел.

При копировании открытой базы данных Access существует риск того, что открытые транзакции и записи будут наполовину завершены, повредят базу данных, не будут зафиксированы или уничтожат VB Project часть базы данных.

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

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

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

Конечно Если у вас есть прерывистое повреждение, то реальная проблема должна состоять в том, чтобы предотвратить это, и ошибка Горд Томпсон, упомянутый в комментарии ( этот ), очень распространен и, вероятно, виновник. Он может go работать 20 раз подряд, пока не выйдет из строя, и вам придется вернуться к резервной копии, возможно, потеряв данные (или, что еще хуже, не имея резервной копии и потеряв гораздо больше данных).

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