надежный способ перезаписи базы данных доступа на живом сайте - PullRequest
2 голосов
/ 11 июля 2011

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

Проблема заключается в том, что у них медленное соединение с почтовым голубем и время загрузки истекло, или кто-то заходит на веб-сайт, покафайл перезаписывается или звезды выровнены точно так же, и любая часть сайта, которая получает данные из файла ms-access, падает до тех пор, пока файл web.config не будет скопирован повторно, что приведет к перезагрузке сайта.

Имеется файл, который никогда не перезаписывается, и следующий эпический подход "избыточность" / "отработка отказа" завершается неудачей, или я почти, но не совсем получилрабочее решение здесь (очевидно, они все еще получают ошибки в вышеупомянутых особых обстоятельствах, опять же невоспринимаемые местными тестировщиками)

private static OleDbConnection conn;
public static OleDbConnection GetAccessConnection()
{
    if(conn == null)
    {
        string connstring;
        try
        {
            connstring = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString;
            conn = new OleDbConnection(connstring);
            ExecuteNonQuery("SELECT TOP 1 * FROM MyTable");
            return conn;
        }
        catch
        {
            connstring = ConfigurationManager.ConnectionStrings["AccessConnectionString1"].ConnectionString;
            conn = new OleDbConnection(connstring);
            ExecuteNonQuery("SELECT TOP 1 * FROM ServiceProviders");
            return conn;
        }
    }

    return conn;
}

с

<connectionStrings>
    <add name="AccessConnectionString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={My File Path};Persist Security Info=False;"/>
    <add name="AccessConnectionString1" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={My Backup File Path};Persist Security Info=False;"/>
</connectionStrings>

1 Ответ

1 голос
/ 04 августа 2011

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

Создайте новый файл БД Access (A) и создайте в нем таблицу [ссылки] на все таблицы в исходной базе данных (B). Поэтому теперь ваше веб-приложение будет ссылаться на новую базу данных, которая будет иметь все те же таблицы, что и раньше, за исключением того, что они будут ссылками на таблицы в вашей реальной базе данных (B).

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

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

Просто мысль; -)

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