В настоящее время у меня есть приложение MS Access, которое подключается к базе данных PostgreSQL через ODBC. Это успешно работает в локальной сети с 20 пользователями (каждый из которых использует свою версию Access). Сейчас я обдумываю несколько сценариев аварийного восстановления, и мне кажется, что быстрый и простой метод защиты данных - это использовать доставку журналов для создания горячего резервирования.
Это заставило меня задуматься о размещении этого теплого резервирования в удаленном месте, но тогда у меня возник вопрос:
Доступен ли доступ к удаленной базе данных через ODBC? Т.е. удаленная база данных, возможно, находится в той же стране с нормальным временем пинга, и у меня есть линия SDSL 1 Мбит.
Краткий ответ: да.
Длинный ответ: если вы вернетесь меньше наборы данных, да. Вам также необходимо включить определенные флаги и настройки в драйвере pgodbc, так как Access будет блокировать то, что возвращается ему с сервера:
KSQO (Оптимизация запросов набора ключей) должен быть включен. Да, я знаю, что в документах говорится, что это не обязательно, но происходит то, что MSAccess передает серверу какой-то довольно странно выглядящий SQL. Это лишь немного убирает загромождение оператора SQL. Не верите мне? Включите ведение журнала для ODBC, отправьте один запрос, выключите журнал, пройдитесь по нескольким мегабайтам мусора, и на 90% пути вниз вы увидите неприятный на вид SQL-запрос, который был сгенерирован и передан. Нет, это не драйвер ODBC, это делает Access.
Используйте Declare / Fetch должен быть включен, если вы планируете интерактивно просматривать большой набор данных. Это заставит драйвер получать меньшие фрагменты вашего набора результатов вместо того, чтобы сбрасывать в него одну монструозную нагрузку.
Текст как LongVarChar - вы можете это проверить. Я подозреваю, что вы захотите "включить".
Неизвестные размеры должен быть установлен на Максимум.
Макс Варчар рекомендуется 254 или меньше, хотя можно и больше.
Дополнительные возможности - установите значение 0x6 (поддельный MS SQL Server + ответ в ANSI, а не в Unicode).
(все это можно найти на http://psqlodbc.projects.postgresql.org/config.html)
Имейте в виду, что большие наборы данных причинит вам боль, несмотря на то, что данные, возвращаемые сервером, обычно находятся в компактном двоичном формате.
Мой опыт работы с базами данных MSA и WAN никогда не был таким большим. Всегда был момент, когда Access решал вытащить много данных из базы данных. Два способа, которыми я добился успеха, - это либо разместить интерфейс Access на удаленном сервере, либо использовать сервер терминалов. Или использовать запросы SQL Passthrough, чтобы вы явно контролировали, что передается на / от сервера базы данных.
Чтобы приложение Access хорошо работало в этом сценарии, оно должно быть спроектировано для извлечения минимальных данных и, вероятно, будет лучше всего работать с несвязанными формами, поскольку Access / Jet / ACE необходимо проверять связь с удаленной базой данных каждую секунду или около того для обновления данных. отображается в связанных формах. Поскольку интервал обновления ODBC может быть установлен в Access, следует поэкспериментировать с этим, прежде чем переходить к радикальному пути полного отключения, поскольку это будет означать, что вы упускаете 90% преимуществ использования Access в качестве внешнего интерфейса.
В целом, я не считаю описанный сценарий особенно жизнеспособным. Это будет означать, что хвост виляет собакой, а ваш план действий в случае катастрофы определяет дизайн вашего обычного приложения. Я бы сказал, что размещение приложения на сервере терминалов Windows где-нибудь рядом с удаленным сервером базы данных было бы гораздо лучшим решением, так как это не потребовало бы значительных изменений в приложении Access.