Добрый день.
Возникла проблема формирования отчета в БД Access в связи с превышением максимального объема файла access в 2Гб.
Коротко описание процесса.
Есть определенный тяжелый расчет, который происходит в ИС с базой oracle. Результат этого расчета выгружается пользователям в БД access одной таблицей.
Количество строк ~5,8 млн; количество столбцов ~ 30.
Процесс выгрузки выглядит следующим образом:
1. Вначале данные из оракла экспортируются в csv. Вес данного файла 1.3 Гб
2. Далее данный csv импортируется уже в access. На выходе 2,09 Гб.
3. Импорт падает с ошибкой, что формат БД некорректный и не может быть открыт.
До этого момента результаты расчета в оракле были меньше: весь csv в районе 900Мб (4.7 млн строк) и работало исправноЧто пытался сделать:
1. Уменьшил количество столбцов, вес csv уменьшился до 1.1 Гб, при импорте в access , все тот же объем 2,09.
2. в access файле есть спека для таблицы, пытался по максимуму уменьшить объем: "длинные целые" менял на "целые" или вообще "byte" и т.д. Но это не помогло.
3. Сейчас пытаюсь уменьшать количество строк в выгрузке, чтобы найти ту самую критическую массу строк, что дают превышение объема.
Помогите, плиз, кто сталкивался с подобными проблемами:
1. Есть ли возможность как-то оптимизировать объем самого access файла. Так как на выходе csv весит 1.3, а в access он превращается в более 2Гб. Может кто знает как выжать по максимуму?
2. Поменяется ли что-то если переделать с импорта csv, на коннект по ODBC. Может есть режим аля view через access вьюхи из оракла? правда у меня самого в голове, что ничего не поменяется, это тот же импорт только в профиль, но вдруг.
3. Так как я не добился успеха, когда уменьшил количество столбцов, а итоговый объем access остался прежним в 2,09, у меня закралось сомнение, что может количество столбцов и не так сильно влияет на вес итогового файла. Так ли это? либо аксес просто падает на превышении и я не увидел реальный объем, который бы заняли таблицы с разным количеством столбцов. Например
30 столбцов, реальный весь аксеса 2,5 Гб, импорт падает на 2,09. и именно этот результат я вижу
25 столбцов, реальный весь аксеса 2,2 Гб, импорт падает на 2,09. и именно этот результат я вижу
Если так, то нельзя ли как то спрогнозировать / подсчитать объем с определенными столбцами предварительно, не импирическим путем. 1 выгрузка занимает порядка 20-25 минут у меня на машине. Я понимаю, что я могу по спеке таблицы понять примерный объем = сумма всех размеров типов данных столбцов * количество трок. Но мне кажется должны быть некие системные файлы аксеса, и под них также нужна память. Как рассчитать прирост в этих таблицах - хз.
4. Можно ли как то разделить на несколько файлов, но при этом оставить для бизнес пользователя "одно окно"
Цель:
Попытаться быстро временно закрыть данный вопрос, обеспечить работу пользователей в "прежнем режиме" в аксес.
Желательно чтобы при это не пострадала возможность выполнять макросы/запросы на весь перечень данных
Просьба, всякие лишние комментарии аля "Да зачем вы такое туда пихаете", "Кто это придумал" оставлять при себе.
Пока писал пост, появились новые вводные: 5млн строк выгрузил, итоговый вес аксеса 1,75 ГБ http://www.sql.ru/forum/1303814/optimizaciya-obema-dannyh-bd-access