![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Конфигурация по умолчанию SQLite предполагает, что основная файловая
система поддерживает длинные имена файлов. SQLite не налагает требований обозначения к файлам базы данных.
SQLite будет счастливо работать с файлом базы данных, у которого есть любое
расширение файла или без расширения вообще. Когда вспомогательные файлы
необходимы для журнала отмен,
журнала с упреждающей записью или для одного из других
видов временных дисковых файлов, тогда название
вспомогательного файла обычно строится, прилагая суффикс в конце
имени файла базы данных. Например, если оригинальная база данных
"app.db", журнал отмен
будет "app.db-journal", а
журнал с упреждающей записью назовут
"app.db-wal". Этот подход к вспомогательному обозначению файла
работает отлично на системах с поддержкой
длинных имен файлов. Но на системах, которые налагают ограничение 8+3 на имя
файла, вспомогательные файлы не соответствуют этому формату 8+3
даже при том, что оригинальный файл базы данных соответствует. Рекомендуемое решение для этой проблемы: выбрать другую
файловую систему. В эти дни есть огромный выбор высокоэффективных,
надежных, файловых систем без патентов с поддержкой
длинных имен файлов. Где возможно, рекомендуется, чтобы устройства
использовали одну из этих файловых систем. Это избежит проблем совместимости
и опасности
повреждения базы данных. Некоторые устройства вынуждены использовать более старую файловую систему
с 8+3 ограничениями имени файла для совместимости, или из-за других
нетехнических факторов. В таких ситуациях SQLite может быть принужден к
использованию вспомогательных файлов, которые соответствуют
образцу 8+3, следующим образом: Соберите библиотеку SQLite с опциями
SQLITE_ENABLE_8_3_NAMES=1 или
SQLITE_ENABLE_8_3_NAMES=2.
Поддержка имен файлов 8+3 не включена в SQLite по умолчанию, потому что это
действительно представляет некоторые издержки. Если применена опция
SQLITE_ENABLE_8_3_NAMES=1,
SQLite способен к использованию имен файлов 8+3, но эти возможности отключены
и должны быть позволены отдельно для каждого соединения с базой данных при
помощи URI filenames, когда
opening или
ATTACH-ing
файлы базы данных и включать параметр запроса "8_3_names=1" в URI.
Если SQLite собран с
SQLITE_ENABLE_8_3_NAMES=2, имена файлов 8+3
позволены по умолчанию, и этот шаг может быть пропущен. Удостоверьтесь, что имена файлов базы данных следуют за форматом
8+3 и что у них нет пустого названия или расширения. Другими словами, имя
файла базы данных должно содержать между 1 и 8 знаками в базовом имени и
между 1 и 3 знаками в расширении. Чистые расширения не позволены. Когда шаги выше будут использоваться, SQLite сократит расширения файла,
используя только последние 3 знака расширения. Таким образом, например, файл,
который обычно называли бы "app.db-journal"
сокращен только к "app.nal". Точно так же "app.db-wal"
станет "app.wal" и
"app.db-shm" станет "app.shm". Обратите внимание на то, что очень важно, чтобы у имени файла базы данных
было некоторое расширение. Если нет никакого расширения, то SQLite создает
вспомогательные имена файлов, добавляя символы к базовому имени файла.
Таким образом у базы данных под названием "db01"
был бы файл журнала отмен
"db01-journal". И поскольку у этого имени файла нет расширения,
чтобы сократить до 3 символов, оно будет использоваться как есть и
нарушит правила обозначения 8+3. Если к файлу базы данных получают доступ, используя 8+3 обозначения, а не
длинное имя файла по умолчанию, то к этому надо всегда получать доступ,
используя обозначения 8+3 для каждого соединения с базой данных каждый раз,
когда это открыто, иначе есть риск повреждения
базы данных. Вспомогательные файлы
журнала отмен и журнала с упреждающей записью
важны для SQLite для того, чтобы прийти в себя после катастрофы.
Если приложение использует 8+3 имени и свалиться, то информация, нужная,
чтобы безопасно восстановиться после катастрофы, сохранена в файлах с
расширением ".nal" или ".wal".
Если следующее приложение, пытаясь открыть базу данных не определит параметр
URI "8_3_names=1", SQLite будет использовать длинные имена файлов,
чтобы попытаться определить местонахождение файлов журнала или журнала с
упреждающей записью обратной перемотки. Это не найдет их, так как они были
сохранены, используя имя в формате 8+3, а следовательно база данных не будет
правильно восстановлена и вероятно будет повреждена. Использование файла базы данных с именами файлов 8+3 в одних случаях,
а в других с длинными именами файлов эквивалентно
удалению горячего журнала.
Choose any three.
Имена файлов 8+3 и SQLite
Изменение файловых систем
Наладка SQLite, чтобы использовать имена файлов 8+3
Предупреждение повреждения базы данных