Содержание:
1. Причины ошибки Превышен размер внутреннего файла
2. Анализ и возможные варианты решения ошибки Превышен размер внутреннего файла
3. Проверка настроек подсистем
4. Способы анализа размеров таблиц базы данных
5. Варианты решения ошибки Превышен размер внутреннего файла
Ошибка СУБД «Превышен максимально допустимый размер внутреннего файла 1Cv8.1CD» характерная для файловых баз данных 1С, имеющих относительно большой объем данных. В этой статье будут рассмотрены возможные причины возникновения ошибки Превышен размер внутреннего файла в 1С,способы и инструменты для ее исправления.
1. Причины ошибки Превышен размер внутреннего файла
Появление ошибки Превышен допустимый размер внутреннего файла возможно как в пользовательском режиме работы (рис. 1), в момент записи данных в базу, так и при попытке загрузить архив базы из dt-файла(рис.2). В обоих случаях в тексте ошибки фигурирует файл 1Cv8.1CD, но причина ошибки не в размере самого файла, а в размерах составляющих его структуру внутренних файлов.
Рис.1. Ошибка в пользовательском режиме работы
Рис.2. Ошибка при загрузке базы из dt-файла
Как Вы можете видеть на выше представленных скринах, размеры файла 1Cv8.1CD в момент возникновения ошибки Превышен максимальный размер внутреннего файла существенно разнятся, т.е. определенного лимита на его объем нет. Этим так же можно объяснить возможность работы баз, размер файла которых может значительно превышать 10 Гбайт. Ограничения есть на размер внутренних файлов1Cv8.1CD. Ознакомится с ними можно в приведенной ниже выдержке из приложения «Особенности работы с различными СУБД» к документации1С:Предприятие. Руководство разработчика.
Структура файловой баз данных
Для понимания структуры файловой базы данных важно знать, что файл базы данных 1Cv8.1CD состоит из множества внутренних файлов. Каждой таблице базы данных соответствует максимум четыре внутренних файла.
Размер каждого из внутренних файлов ограничен:
● для формата версии 8.2.14 ‑ 4 Гигабайта.
● для формата версии 8.3.8 с размером страницы 4 096 байт ‑ 4 Гигабайта.
● для формата версии 8.3.8 с размером страницы 8 192, 16 384, 32 768 и 65 536 байт ‑ 6 Гбайт.
2. Анализ и возможные варианты решения ошибки Превышен размер внутреннего файла
Утилита CNVDBFL.EXE
Начиная с версии 8.3.9в новых информационных базах по умолчанию установлен реализованный в версии 8.3.8 оптимизированный формат файловой СУБД. Проверить какая версия формата используется в вашей базе, можно с помощью утилиты командной строки CNVDBFL.EXE, которая включается в комплект поставки технологической платформы «1С:Предприятие» начиная с версии 8.3.8 и расположена в каталоге «bin» установленной версии(например C:ProgramFiles1cv88.3.18.1334bin).
Рис. 3 Получить информацию о файле 1Cv8.1CD
Выполните команду: C:< путь установки 1С:Предприятие>CNVDBFL.EXE-i<путь к 1CV8.1CD>
Утилита выведет информацию о версии формата файла и размере страницы. Если версия формата ниже8.3.8 или размер страницы равен 4096 байта, то самое простое временное решение, позволяющее быстро восстановить работоспособность, увеличив ограничение на размер внутренних файлов с 4 Гбайт до 6Гбайт – выгрузить информационную базу в dt-файлдля последующей его загрузки в созданную в новой папке информационную базу, либо конвертация в формат 8.3.8 со страницей по умолчанию:
cnvdbfl -c -f 8.3.8 <путь к 1CV8.1CD>
ВНИМАНИЕ! Перед выполнением любых операций с информационной базой сделайте резервную копию.
3. Проверка настроек подсистем
Частой причиной не пропорционального увеличения размера внутренних файлов в типовых конфигурациях, является не оптимальная настройка подсистем работы с файлами и хранения истории изменений.
Настройки подсистемы Работа с файлами
По умолчанию в настройках указано хранение файлов в информационной базе данных, что при активном использовании функционала данной подсистемы (прикрепление скан-копий к первичным документам, хранение файлов договоров и т.д.), приводит к быстрому увеличению размера соответствующей таблицы информационной базы. В данном случае рекомендуется настроить хранение файлов в томах на диске и выполнить перенос файлов, предварительно ознакомившись с соответствующим разделом документации к вашей конфигурации.
Рис.4 Настройки работы с файлами
Настройки хранения истории изменений
Проведите аудит настроек подсистемы хранения истории изменений. Особое внимание следует уделить часто изменяемым объектам с бессрочным хранением версии, т.к. каждая версия – это новая отдельная запись, занимающая место в специальной таблице базы дынных. И точно не стоит включать «на всякий случай» бессрочное сохранение версий, создаваемых при записи, для всех объектов.
Рис.5 Настройки хранения истории изменений
Удаление помеченных объектов
Не стоит забывать про удаление помеченных объектов. В типовых конфигурациях есть возможность настройки удаления по расписанию.
Рис.6 Настройка расписания удаления помеченных объектов
4. Способы анализа размеров таблиц базы данных
Если проверка и оптимизация настроек подсистем не помогла или ваша конфигурация не содержит вышеописанных подсистем, то для выявления точной причины ошибки Превышен допустимый размер внутреннего файла не обойтись без анализа размеров таблиц базы данных.
К сожалению, готовых утилит для анализа размеров таблиц баз данных в комплекте поставки «1С:Предприятие» не предусмотрено. Тем не менее есть несколько способов определить виновника ошибки.
Загрузка dt-файла в клиент-серверную базу данных
Разберем на примере файловой СУБДMSSQL.
В SQL ServerManagementStudio выберем в обозревателе объектов исследуемую базу и сформируем стандартный отчет «Использование дисковой памяти таблицами». Включив сортировку по убыванию значения в колонке «Данные», мы увидим самые большие таблицы. В моем случае явный лидер -«dbo._InfoRg10162»
Рис. 7 Анализ размера таблиц базы данныхвSQLServerManagementStudio
Далее нам потребуется определить какие данных хранятся в этой таблице. В этом нам поможет метод глобального контекста ПолучитьСтруктуруХраненияБазыДанных(). Вызвать данный метод можно установив точку остановки в любой процедуре, выполняемой в контексте сервера, например в процедуре ПриСозданииНаСервере формы внешней обработки. Указав в табло выражение ПолучитьСтруктуруХраненияБазыДанных(), мы получим таблицу значений с описаниями структуры таблиц, индексов и полей базы данных. Посмотреть ее можно нажав «F2»,либо выполнив команду контекстного меню «Показать значения в отдельном окне». В открывшемся окне выполняем поиск значения «InfoRg10162» в колонке ИмяТаблицыХранения и определяем по колонкам ИмяТаблицы или Метаданные имя, соответствующее объекту метаданных конфигурации — «РегистрСведений.ДвоичныеДанныеФайлов»
Рис. 8 Просмотр структуры хранения базы данных
Стоит отметить, что данный метод требует серверной лицензии 1С.
На момент написания статьи действует акция: антикризисные льготные поставки «1С:Предприятия 8» для разработчиков.
В качестве СУБД для разработки и тестирования удобно использовать следующие версии:
SQL Server 2019 Express является бесплатным выпуском SQL Server, который идеально подходит для разработки приложений для использования на настольных компьютерах, веб-серверах и других небольших серверах.
SQL Server 2019 Developer — это бесплатный выпуск с полным набором функций, лицензируемый для использования в качестве базы данных для разработки и тестирования и не предназначенный для применения в рабочей среде.
Использование сторонних программ для анализа файла базы
Для определения размеров таблиц базы данных, можно воспользоваться программой для просмотра файлов базы 1Сv8.1CD. Tool_1CD позволяет увидеть структуру БД 1С и узнать размер внутренних таблиц. Tool_1CDверсии 0.3.0, поддерживает работу только с базами в формате не выше 8.2.14.
Рис. 9 Tool_1CDверсии 0.3.0
Для анализа базы в формате 8.3.8.0 потребуется конвертация копии базы с помощью утилиты cnvdbfl в версию, совместимую с 8.2 (cnvdbfl -c -f -8.2.14 «путь к базе»)
Tool_1CD версии 0.4.0поддерживает работу с базами версии формата 8.3.8.0 и не требует дополнительных операций с базой.
Рис. 10 Tool_1CDверсии 0.4.0
Определив имя «проблемной» таблицы, далее поступаем аналогично первомупримеру(Рис. 8).Выполняем поиск значения «InfoRg10162″в колонке ИмяТаблицыХранениятаблицы, полученной методом ПолучитьСтруктуруХраненияБазыДанных()и определяем по колонкам ИмяТаблицы или Метаданные имя соответствующее объекту метаданных конфигурации.
Подсистема «Инструменты разработчика» 1С 8
На практике меня часто выручает подсистема «Инструменты разработчика» 1С 8
Это набор мощных инструментов для разработчика на платформе «1С:Предприятия 8», который можно подключить в виде расширения конфигурации.
В рамках рассматриваемой в статье ошибки, нам будет интересна обработка «Структура хранения БД», в которой есть опция получения размеров таблиц и индексов для файловой СУБД.
Рис. 11 Запуск обработки Структура хранения БД в толстом клиенте
Почти все обработки входящие в подсистему выполнены на обычных формах и потому работают только в толстом клиенте и обычном приложении.
Рис. 12 Выбор варианта запуска подсистемы
Рис. 13 Запуск обработки Структура хранения БД в обычном приложении
По умолчанию опция «Показывать размеры» выключена. Включим этот флаг и выполним сортировку по убыванию в колонке «Размер общий»
Рис. 14 Анализ данных в обработке Структура хранения БД
Плюс использования этой обработки в том, что она показывает имена таблиц в соответствии с именами объектов метаданных конфигурации.
Обратите внимание, опция «Показывать размеры» работает только в 32-битныхприложениях
Рис. 15 Настройка разрядности клиента
5. Варианты решения ошибки Превышен размер внутреннего файла
Выбор способа решения ошибки Превышен размер внутреннего файла зависит от результатов анализа и сводится к двум вариантам:
· Уменьшение размера базы данных;
· Переход на клиент-серверный вариант работы;
Если анализ выявил таблицы, занимающие «львиную долю» от общего размера внутреннего файла 1Cv8.1CD, то в первую очередь надо разобраться с ними. Как правило это объекты конфигурации, имеющие реквизиты с типом значения Хранилище Значения, в которых хранятся связанные файлы, версии объектов, вложения писем и т.д.
В случае, когда в результате анализа обнаружено множество таблиц с размером близким к граничному поможет свертка базы с удалением документов прошлых периодов и выполнение процедуры «Тестирование и исправление» в конфигураторе с включенными опциями реиндексации, реструктуризации и сжатием таблиц, а также с пересчетом итогов.
Если свертка базы не приемлема, то остается только вариант перехода на клиент-серверный вариант работы. В данном варианте ограничения на размер таблиц отсутствуют, а управление информационной базой осуществляется одной из поддерживаемых файловых СУБД.
Взаимодействие между клиентским приложением и файловой СУБД осуществляет кластер серверов «1С:Предприятия 8».
Так же клиент-серверный вариант работы будет решением проблемы при загрузке архива базы из dt-файла
Рис. 16 Загрузка из dt-файла заведомо большой ИБ
Специалист компании «Кодерлайн»
Александр Бачурин
elite128 Заглянувший Сообщений: 602 |
База УТ+CRM перестала выгружаться в файловый вариант изза ограничения файловой платформы на размер базы |
Добрый день! Изменено: Мария Измайлова — 07.07.2014 16:13:32 |
|
elite128 Заглянувший Сообщений: 602 |
Скрин статистики базы http://joxi.ru/NYm6UxjKTJAkH9KwYNg |
elite128 Заглянувший Сообщений: 602 |
файл статистики Прикрепленные файлы
|
Мария Измайлова Посетитель Сообщений: 1178 |
#5
07.07.2014 16:01:01
У Вас присоединенные файлы хранятся в томах или в базе? Если файлы хранятся в базе, то перенесите их обработкой в тома, если для Вас это будет удобно, если нет, то необходимо почистить регистр сведений Присоединенный файлы, написав обработку для этого. Изменено: Мария Измайлова — 07.07.2014 16:21:41 |
||
elite128 Заглянувший Сообщений: 602 |
присоединенные файлы хранятся в томах, неархивированные занимают всего 275 мегабайт |
elite128 Заглянувший Сообщений: 602 |
сжал базу на сервере SQL, предварительно переведя режим simple, получил 1.9 гига, все равно файлово не разворачивается |
Мария Измайлова Посетитель Сообщений: 1178 |
#8
07.07.2014 16:53:56
Что именно пишется при разворачивании файловой базы? |
||
elite128 Заглянувший Сообщений: 602 |
Ошибка загрузки информационной базы. В информационную базу загружены не все данные |
elite128 Заглянувший Сообщений: 602 |
#10
07.07.2014 17:05:03 |
#11
07.07.2014 17:24:39 Добрый день! Если дело в размере, то не вы сможете выгрузить в файловую базу, пока не уменьшите размер таблиц(ы) Изменено: Алексей Полубенский — 07.07.2014 17:25:29 |
|
Алексей Полубенский Посетитель Сообщений: 1577 |
#12
07.07.2014 17:29:18
Не заметил этой таблички. И еще вопрос — вы провели из 1С «Тестирование и Исправление ИБ » с флагом «Сжатие таблиц информационной базы»? Помимо средств SQL Изменено: Алексей Полубенский — 07.07.2014 17:33:30 |
||
elite128 Заглянувший Сообщений: 602 |
#13
07.07.2014 18:00:53 Почты у нас в базе нет, и надеюсь не будет, во избежании таких вот проблем и роста базы |
Мария Измайлова Посетитель Сообщений: 1178 |
#14
07.07.2014 18:04:10
Администрирование-тестирование и исправление. Сори это скрин файловой базы. Прикрепленные файлы Изменено: Мария Измайлова — 07.07.2014 18:10:40 |
||
elite128 Заглянувший Сообщений: 602 |
#15
07.07.2014 18:08:47 http://joxi.ru/0Km6UxjKTJAmH0znoqU
платформа 8.3.4.482 |
#16
07.07.2014 18:11:40 Да, извините, я смотрел на файловой базе. В клиент-серверном варианте сжатие делается средствами СУБД. Изменено: Алексей Полубенский — 07.07.2014 18:12:04 |
|
elite128 Заглянувший Сообщений: 602 |
#17
08.07.2014 10:42:17 Обработка выдает ошибку после выбора таблиц и запуска {Документ.АктВыполненныхРабот.МодульМенеджера(3010,2)}: Переменная не определена (ОтложенноеОбновлениеИБ) |
Мария Измайлова Посетитель Сообщений: 1178 |
#18
08.07.2014 10:51:12
Эту обработку нужно запускать в Толстом клиенте, если все равно будет ошибка, то поищите в интернете подходящую Вам. Изменено: Мария Измайлова — 08.07.2014 11:12:04 |
||
elite128 Заглянувший Сообщений: 602 |
#19
08.07.2014 11:03:13 В толстом выдает другую ошибку ) http://joxi.ru/lZe7U_3JTJAnY6aIWAs До этого запускал без управляемых форм У нас версия SQL, вторая обработка для файлового варианта Изменено: elite128 — 08.07.2014 11:06:04 |
Мария Измайлова Посетитель Сообщений: 1178 |
#20
08.07.2014 11:07:39
тогда проанализируйте свою таблицу, как Вам и писал Алексей. |
||
elite128 Заглянувший Сообщений: 602 |
#21
08.07.2014 11:11:14 И как может быть таблица больше 4 гиг, если база в SQL 1.8 гига? |
elite128 Заглянувший Сообщений: 602 |
#22
08.07.2014 11:12:08 Обработка Алексея тоже выдает ошибку {Документ.АктВыполненныхРабот.МодульМенеджера(3010,2)}: Переменная не определена (ОтложенноеОбновлениеИБ) |
Алексей Полубенский Посетитель Сообщений: 1577 |
#23
08.07.2014 11:30:28
Как то мы запутались…
Когда я ее тестировал — она корректно работала, правда я ее запускал на 8.2, а не 8.3. Прикрепленные файлы |
||||||
Алексей Полубенский Посетитель Сообщений: 1577 |
#24
08.07.2014 11:35:04
Не знаю… возможно SQL сжимает так сильно, а при выгрузке/загрузке ИБ данные распаковываются и таблицы становятся намного больше. |
||
elite128 Заглянувший Сообщений: 602 |
#25
08.07.2014 11:40:48 Запускаю в толстом клиенте с параметром /RunModeOrdinaryApplication http://joxi.ru/baC7UxjKTJBNH9GtwTk В новую базу тоже загружал, не помогает Изменено: elite128 — 08.07.2014 11:41:10 |
Что делать, если архив базы загружается в файловом варианте с ошибкой «Превышен максимально допустимый размер внутреннего файла», а загрузить очень надо? Постараюсь примерно описать технологию, которую нам удалось разработать при активном участии Виктора Сосновского из фирмы «1С» на партнерском форуме.
Предположим, вы сформировали архив базы и теперь пытаетесь загрузить его в файловом варианте. Сначала все идет хорошо, но в какой-то момент возникает ошибка:
«Ошибка загрузки информационной базы. В информационную базу загружены не все данные по причине: Ошибка СУБД: Превышен максимально допустимый размер внутреннего файла ‘D:1CBASESNewDB/1Cv8.1CD’«
Я лично потратил ОЧЕНЬ много времени на поиск решения этой проблемы и в итоге нашел его, что позволило нам создать файловую копию базы данных размером 18 Гб и в итоге сэкономило примерно неделю времени (могу в комментариях рассказать, как было дело, но сейчас речь не о том).
Итак, причин возникновения такой ошибки может быть несколько:
- Размер КАКОЙ-ЛИБО таблицы в базе данных превышает лимит для файловой версии (4 Гб). Если честно, во избежание подобных эксцессов мы проверяли размеры таблиц базы заранее с помощью обработки «SQL базомер» (или аналогов).
- Ошибка связана с глюком особенностями платформы, и вызвана определенной спецификой структуры метаданных выгружаемой конфигурации.
С первым случаем все понятно — если базомер показал превышение лимита по каким-то из таблиц базы, то эти таблицы необходимо почистить. Если речь идет о справочнике или непериодическом регистре сведений, то нужно постараться удалить оттуда ненужные элементы/записи. То же самое относится и к «тяжелым» документам с их табличными частями. В первую очередь следует заняться удалением помеченных объектов, конечно.
Регистры накопления — отдельная тема. Размеры таблиц итогов могут превышать размеры таблиц записей регистра, причем зачастую значительно. Иногда может помочь даже простой пересчет итогов.
Регистры остатков могут некорректно (не по всем измерениям) закрываться, что приводит к ОЧЕНЬ значительному и быстрому разрастанию таблиц итогов. Списание «зависших» остатков регистра накопления может при последующем пересчете итогов дать экономию до нескольких Гб, проверено на собственном опыте у «нерадивых» клиентов. ))
Что же делать, если каждая таблица вашей базы размером менее 4 Гб, но ошибка все равно возникает?
Это значит, что у вас второй случай — проблемная структура метаданных конфигурации. Вероятнее всего, ошибка возникает на этапе создания индексов.
В двух словах опишу ситуацию в целом, чтобы было понятно, словами Виктора Сосновского из 1С. Ниже цитата с партнерского форума:
«При загрузке информационной базы в файловом варианте сначала загружаются данные всех таблиц, а затем создаются индексы. Ошибка создания индекса приводит к тому, что индекс, созданный с ошибкой, и все последующие индексы не создаются. Если в базе много данных, то это приведет к существенному снижению производительности. Полноценная работа с такой базой будет невозможна.»
Нужно узнать, какая именно таблица приводит к ошибке при создании индекса.
Включаем технологический журнал — в папку «С:Program Files (x86)1cv82__НомерВерсииПлатформы__inconf» (или аналогичную, __НомерВерсииПлатформы__ подставьте свой) кладем файл logcfg.xml примерно следующего содержания:
<?xml version=»1.0″ encoding=»UTF-8″?>
<config xmlns=»http://v8.1c.ru/v8/tech-log»>
<dump create=»true» location=»D:1CBASESdumps» type=»0″ prntscrn=»true»/>
<log history=»3″ location=»D:1CBASESlogs»>
<event>
<eq property=»name» value=»dbv8dbeng»/>
</event>
<event>
<eq property=»name» value=»excp»/>
</event>
<property name=»all»/>
</log>
</config>
Внимательно следим за тем, чтобы каталоги для дампов и логов:
- Существовали
- Различались
- Были доступны для чтения и записи тому пользователю Windows, от лица которого вы запускаете конфигуратор.
Перезапускаем конфигуратор (при этом включается технологический журнал) и заново пробуем загрузить наш .DT. После возникновения ошибки идем в каталог для логов, находим там файл лога, содержащий нашу ошибку, и внимательно читаем его.
Первое же вхождение EXCPCNTX в логе в моем случае указало на команду, которая вызвала ошибку: CREATE INDEX _Accum27148_ByDims_TRRRRRRRRRSSR (у вас название индекса будет другое).
По цифрам из названия индекса с помощью обработки «Структура хранения таблиц базы данных» (или аналогов, которые умеют показывать индексы) находим, какой таблице принадлежит данный индекс. У меня это оказалась таблица оборотов одного из нетиповых регистров накопления.
А дальше начинается самое интересное — нужно попытаться угадать, что именно в структуре вашей таблицы приводит к ошибке индексации.
В первую очередь следует смотреть, какие поля входят в индекс. Как выяснилось, платформа ОЧЕНЬ не любит, когда совокупный размер ключевых полей индекса становится значительным. В частности, она не любит индексировать длинные строки — так, в моем случае в индекс попадало измерение с типом СТРОКА (500) и оно вызывало ошибку. Другой представитель фирмы «1С» высказался на партнерском форуме еще в 2007 году:
«Если длина ключа оказывается близкой к 2К, то начинается резкий рост размера индексов с рядом неприятных последствий.«
И действительно, в 2013 году ничего не изменилось — в подобных случаях наблюдается лавинообразный рост размеров индекса на файловой базе. А когда таблица индекса превышает лимит в 4 Гб, загрузка .DT останавливается с ошибкой.
Лично мне помогло отключить для проблемного измерения флажок «Использование в итогах», т.к. в реальности итоги по нему не требовались. Оно перестало попадать в саму таблицу оборотов и, как следствие, в индекс таблицы оборотов. Есть и другие способы — более строго ограничить размер строки, например. Читал, что некоторым это помогало.
Эти изменения необходимо применить к информационной базе, при этом произойдет реструктуризация вашей таблицы.
Если изменения внесены на SQL-копии базы, то после этого нужно заново выгрузить .DT и попытаться перезагрузить его в файловой версии.
Если SQL-копии нет под рукой, то можно попробовать исправить прямо на вашей недозагруженной файловой копии. После принятия изменений запускайте «Тестирование и исправление» в режиме реструктуризации таблиц базы данных. Индексы будут созданы платформой заново и, можно надеяться, уже без ошибок.
Кому особо не повезло и ошибка вылезла снова — тому следует повторить сначала всю процедуру, начиная с анализа логов. Возможно, проблемная таблица была не одна, или вам не удалось решить проблему с размерами полей, входящих в индекс.
Удачи вам!
08.10.16 — 08:34
Занружаю базу из dt выдает ошибку:
————————
Ошибка загрузки информационной базы. В информационную базу загружены не все данные
по причине:
Ошибка СУБД:
Превышен максимально допустимый размер внутреннего файла ‘C:db/1Cv8.1CD’
по причине:
Превышен максимально допустимый размер внутреннего файла ‘C:db/1Cv8.1CD’
—————————
Как можно загрузить базу? Может можно увеличить максимально допустимый размер?
1 — 08.10.16 — 08:39
Никак нельзя
2 — 08.10.16 — 08:47
3 — 08.10.16 — 10:57
(0) Ставь сервер
4 — 08.10.16 — 11:06
Стаж: 10 лет 7 месяцев 2 дня
5 — 08.10.16 — 11:07
«Может можно увеличить максимально допустимый размер?» // Нет
«Как можно загрузить базу?» // Проанализировать, какие данные распухли, и подсократить их
6 — 08.10.16 — 11:17
(3) (5) я сам не пробовал, но ходят слухи, что после увеличения размера страницы с помощью cnvdbfl из 8.3.8 в файловом режиме могут открытьвася базы с таблицами больше 4 Гб
7 — 08.10.16 — 11:20
(6) Интересная информация, взял на заметку (хотя скорее всего забуду — нечасто проблема такая возникает)
8 — 08.10.16 — 11:20
9 — 08.10.16 — 11:24
(8) Не понимаю, как _увеличение_ размера страницы файла поможет сократить занимаемый объем файла таблицы…
10 — 08.10.16 — 11:25
(8) Но благодарю за ссылку!
11 — 08.10.16 — 11:35
(6) Сам пробовал. Сейчас на компе есть файловая база размером 36гб. Так что загрузить можно.
12 — 08.10.16 — 11:39
(9) размер файла как раз и зависит от размера страниц. Структура файла — корневая стр. содержит 1018 номеров индексных стр. Индексная — 1023 номеров стр. данных. Стр. данных (до 8.3.8) — 4кб. Ограничение в 4гб = 1018*1023*4096
13 — 08.10.16 — 12:13
(8) Огромный спасибо! Съэкономил мне кучу времени) Да и вообще, тестовые базы, которые не жалко можно в файловую кинуть на SSD)))
14 — 08.10.16 — 12:26
(8) Спс — будем знать
15 — 08.10.16 — 12:47
(12) пробуйте на 8.3.9.
16 — 08.10.16 — 12:56
(9) Может поможет увеличить максимальный размер внутреннего файла — http://its.1c.ru/db/metod8dev/content/5710/hdoc
17 — 08.10.16 — 13:23
(13) у меня на ссд рабочие и серверные базы
18 — 08.10.16 — 13:43
(4) А при чем тут стаж?
19 — 08.10.16 — 14:58
(13) Не совсем понятна фраза.
Т.е если базы ценные на SSD нельзя?
Или в файловую нельзя?
20 — 08.10.16 — 16:24
(16) Все, теперь дошло, благодарю!
21 — 08.10.16 — 17:36
(16) интересная ссылка, раньше эту информацию по крупицам собирали, а теперь опубликовали
(6) теоретически увеличении страницы в 2 раза резко увеличит максимальный размер таблиц, но тут есть одно НО, дело в том, что размерность всех индексных ссылок (4 байта) изменить нельзя… и еще много чего в потрохах не меняется…
timurhv
22 — 08.10.16 — 23:26
(19) Нет, в продакшене стоят нормальные винты. Я про свое рабочее место.
Сейчас мне нужна быстрая свертка больших баз за 5 лет + удаление объектов в бухгалтерии (порядка 780тыс объектов).
Содержание:
1. Причины ошибки Превышен размер внутреннего файла
2. Анализ и возможные варианты решения ошибки Превышен размер внутреннего файла
3. Проверка настроек подсистем
4. Способы анализа размеров таблиц базы данных
5. Варианты решения ошибки Превышен размер внутреннего файла
Ошибка СУБД «Превышен максимально допустимый размер внутреннего файла 1Cv8.1CD» характерная для файловых баз данных 1С, имеющих относительно большой объем данных. В этой статье будут рассмотрены возможные причины возникновения ошибки Превышен размер внутреннего файла в 1С,способы и инструменты для ее исправления.
1. Причины ошибки Превышен размер внутреннего файла
Появление ошибки Превышен допустимый размер внутреннего файла возможно как в пользовательском режиме работы (рис. 1), в момент записи данных в базу, так и при попытке загрузить архив базы из dt-файла(рис.2). В обоих случаях в тексте ошибки фигурирует файл 1Cv8.1CD, но причина ошибки не в размере самого файла, а в размерах составляющих его структуру внутренних файлов.
Рис.1. Ошибка в пользовательском режиме работы
Рис.2. Ошибка при загрузке базы из dt-файла
Как Вы можете видеть на выше представленных скринах, размеры файла 1Cv8.1CD в момент возникновения ошибки Превышен максимальный размер внутреннего файла существенно разнятся, т.е. определенного лимита на его объем нет. Этим так же можно объяснить возможность работы баз, размер файла которых может значительно превышать 10 Гбайт. Ограничения есть на размер внутренних файлов1Cv8.1CD. Ознакомится с ними можно в приведенной ниже выдержке из приложения «Особенности работы с различными СУБД» к документации1С:Предприятие. Руководство разработчика.
Структура файловой баз данных
Для понимания структуры файловой базы данных важно знать, что файл базы данных 1Cv8.1CD состоит из множества внутренних файлов. Каждой таблице базы данных соответствует максимум четыре внутренних файла.
Размер каждого из внутренних файлов ограничен:
● для формата версии 8.2.14 ‑ 4 Гигабайта.
● для формата версии 8.3.8 с размером страницы 4 096 байт ‑ 4 Гигабайта.
● для формата версии 8.3.8 с размером страницы 8 192, 16 384, 32 768 и 65 536 байт ‑ 6 Гбайт.
2. Анализ и возможные варианты решения ошибки Превышен размер внутреннего файла
Утилита CNVDBFL.EXE
Начиная с версии 8.3.9в новых информационных базах по умолчанию установлен реализованный в версии 8.3.8 оптимизированный формат файловой СУБД. Проверить какая версия формата используется в вашей базе, можно с помощью утилиты командной строки CNVDBFL.EXE, которая включается в комплект поставки технологической платформы «1С:Предприятие» начиная с версии 8.3.8 и расположена в каталоге «bin» установленной версии(например C:ProgramFiles1cv88.3.18.1334bin).
Рис. 3 Получить информацию о файле 1Cv8.1CD
Выполните команду: C:< путь установки 1С:Предприятие>CNVDBFL.EXE-i<путь к 1CV8.1CD>
Утилита выведет информацию о версии формата файла и размере страницы. Если версия формата ниже8.3.8 или размер страницы равен 4096 байта, то самое простое временное решение, позволяющее быстро восстановить работоспособность, увеличив ограничение на размер внутренних файлов с 4 Гбайт до 6Гбайт – выгрузить информационную базу в dt-файлдля последующей его загрузки в созданную в новой папке информационную базу, либо конвертация в формат 8.3.8 со страницей по умолчанию:
cnvdbfl -c -f 8.3.8 <путь к 1CV8.1CD>
ВНИМАНИЕ! Перед выполнением любых операций с информационной базой сделайте резервную копию.
3. Проверка настроек подсистем
Частой причиной не пропорционального увеличения размера внутренних файлов в типовых конфигурациях, является не оптимальная настройка подсистем работы с файлами и хранения истории изменений.
Настройки подсистемы Работа с файлами
По умолчанию в настройках указано хранение файлов в информационной базе данных, что при активном использовании функционала данной подсистемы (прикрепление скан-копий к первичным документам, хранение файлов договоров и т.д.), приводит к быстрому увеличению размера соответствующей таблицы информационной базы. В данном случае рекомендуется настроить хранение файлов в томах на диске и выполнить перенос файлов, предварительно ознакомившись с соответствующим разделом документации к вашей конфигурации.
Рис.4 Настройки работы с файлами
Настройки хранения истории изменений
Проведите аудит настроек подсистемы хранения истории изменений. Особое внимание следует уделить часто изменяемым объектам с бессрочным хранением версии, т.к. каждая версия – это новая отдельная запись, занимающая место в специальной таблице базы дынных. И точно не стоит включать «на всякий случай» бессрочное сохранение версий, создаваемых при записи, для всех объектов.
Рис.5 Настройки хранения истории изменений
Удаление помеченных объектов
Не стоит забывать про удаление помеченных объектов. В типовых конфигурациях есть возможность настройки удаления по расписанию.
Рис.6 Настройка расписания удаления помеченных объектов
4. Способы анализа размеров таблиц базы данных
Если проверка и оптимизация настроек подсистем не помогла или ваша конфигурация не содержит вышеописанных подсистем, то для выявления точной причины ошибки Превышен допустимый размер внутреннего файла не обойтись без анализа размеров таблиц базы данных.
К сожалению, готовых утилит для анализа размеров таблиц баз данных в комплекте поставки «1С:Предприятие» не предусмотрено. Тем не менее есть несколько способов определить виновника ошибки.
Загрузка dt-файла в клиент-серверную базу данных
Разберем на примере файловой СУБДMSSQL.
В SQL ServerManagementStudio выберем в обозревателе объектов исследуемую базу и сформируем стандартный отчет «Использование дисковой памяти таблицами». Включив сортировку по убыванию значения в колонке «Данные», мы увидим самые большие таблицы. В моем случае явный лидер -«dbo._InfoRg10162»
Рис. 7 Анализ размера таблиц базы данныхвSQLServerManagementStudio
Далее нам потребуется определить какие данных хранятся в этой таблице. В этом нам поможет метод глобального контекста ПолучитьСтруктуруХраненияБазыДанных(). Вызвать данный метод можно установив точку остановки в любой процедуре, выполняемой в контексте сервера, например в процедуре ПриСозданииНаСервере формы внешней обработки. Указав в табло выражение ПолучитьСтруктуруХраненияБазыДанных(), мы получим таблицу значений с описаниями структуры таблиц, индексов и полей базы данных. Посмотреть ее можно нажав «F2»,либо выполнив команду контекстного меню «Показать значения в отдельном окне». В открывшемся окне выполняем поиск значения «InfoRg10162» в колонке ИмяТаблицыХранения и определяем по колонкам ИмяТаблицы или Метаданные имя, соответствующее объекту метаданных конфигурации — «РегистрСведений.ДвоичныеДанныеФайлов»
Рис. 8 Просмотр структуры хранения базы данных
Стоит отметить, что данный метод требует серверной лицензии 1С.
На момент написания статьи действует акция: антикризисные льготные поставки «1С:Предприятия 8» для разработчиков.
В качестве СУБД для разработки и тестирования удобно использовать следующие версии:
SQL Server 2019 Express является бесплатным выпуском SQL Server, который идеально подходит для разработки приложений для использования на настольных компьютерах, веб-серверах и других небольших серверах.
SQL Server 2019 Developer — это бесплатный выпуск с полным набором функций, лицензируемый для использования в качестве базы данных для разработки и тестирования и не предназначенный для применения в рабочей среде.
Использование сторонних программ для анализа файла базы
Для определения размеров таблиц базы данных, можно воспользоваться программой для просмотра файлов базы 1Сv8.1CD. Tool_1CD позволяет увидеть структуру БД 1С и узнать размер внутренних таблиц. Tool_1CDверсии 0.3.0, поддерживает работу только с базами в формате не выше 8.2.14.
Рис. 9 Tool_1CDверсии 0.3.0
Для анализа базы в формате 8.3.8.0 потребуется конвертация копии базы с помощью утилиты cnvdbfl в версию, совместимую с 8.2 (cnvdbfl -c -f -8.2.14 «путь к базе»)
Tool_1CD версии 0.4.0поддерживает работу с базами версии формата 8.3.8.0 и не требует дополнительных операций с базой.
Рис. 10 Tool_1CDверсии 0.4.0
Определив имя «проблемной» таблицы, далее поступаем аналогично первомупримеру(Рис. 8).Выполняем поиск значения «InfoRg10162″в колонке ИмяТаблицыХранениятаблицы, полученной методом ПолучитьСтруктуруХраненияБазыДанных()и определяем по колонкам ИмяТаблицы или Метаданные имя соответствующее объекту метаданных конфигурации.
Подсистема «Инструменты разработчика» 1С 8
На практике меня часто выручает подсистема «Инструменты разработчика» 1С 8
Это набор мощных инструментов для разработчика на платформе «1С:Предприятия 8», который можно подключить в виде расширения конфигурации.
В рамках рассматриваемой в статье ошибки, нам будет интересна обработка «Структура хранения БД», в которой есть опция получения размеров таблиц и индексов для файловой СУБД.
Рис. 11 Запуск обработки Структура хранения БД в толстом клиенте
Почти все обработки входящие в подсистему выполнены на обычных формах и потому работают только в толстом клиенте и обычном приложении.
Рис. 12 Выбор варианта запуска подсистемы
Рис. 13 Запуск обработки Структура хранения БД в обычном приложении
По умолчанию опция «Показывать размеры» выключена. Включим этот флаг и выполним сортировку по убыванию в колонке «Размер общий»
Рис. 14 Анализ данных в обработке Структура хранения БД
Плюс использования этой обработки в том, что она показывает имена таблиц в соответствии с именами объектов метаданных конфигурации.
Обратите внимание, опция «Показывать размеры» работает только в 32-битныхприложениях
Рис. 15 Настройка разрядности клиента
5. Варианты решения ошибки Превышен размер внутреннего файла
Выбор способа решения ошибки Превышен размер внутреннего файла зависит от результатов анализа и сводится к двум вариантам:
· Уменьшение размера базы данных;
· Переход на клиент-серверный вариант работы;
Если анализ выявил таблицы, занимающие «львиную долю» от общего размера внутреннего файла 1Cv8.1CD, то в первую очередь надо разобраться с ними. Как правило это объекты конфигурации, имеющие реквизиты с типом значения Хранилище Значения, в которых хранятся связанные файлы, версии объектов, вложения писем и т.д.
В случае, когда в результате анализа обнаружено множество таблиц с размером близким к граничному поможет свертка базы с удалением документов прошлых периодов и выполнение процедуры «Тестирование и исправление» в конфигураторе с включенными опциями реиндексации, реструктуризации и сжатием таблиц, а также с пересчетом итогов.
Если свертка базы не приемлема, то остается только вариант перехода на клиент-серверный вариант работы. В данном варианте ограничения на размер таблиц отсутствуют, а управление информационной базой осуществляется одной из поддерживаемых файловых СУБД.
Взаимодействие между клиентским приложением и файловой СУБД осуществляет кластер серверов «1С:Предприятия 8».
Так же клиент-серверный вариант работы будет решением проблемы при загрузке архива базы из dt-файла
Рис. 16 Загрузка из dt-файла заведомо большой ИБ
Специалист компании «Кодерлайн»
Александр Бачурин
ALEX7519
17.02.22 — 08:55
Тут да днях случилась такая штука — перестала работать синхронизация Бухгалтерии 30 с ЗУП 30 , т.е из зупа выгрузка проходит, в бух не грузится. Посмотрел по журналу пишет в ошибках Ошибка СУБД Превышен максимально допустимый размер внутреннего файла 1Cv8.1CD. ( синхронизация настроена не через файл а обращением к базе )
посмотрел размер бух базы — около 20 гигов. (базы файловые ).
я так понимаю дело в этом (хотя сама база работает без ошибок, не совсем ясно почему толькро при синхронизации ??? )
надо уменьшать размер базы ?
правильно ли я понимаю последовательность действии : ??
1. Прогнать cd c помощью chdbfl.exe с галкой испралять
2. В конфигуратере через тестирование и исправление с галками сжатие и реструкторизация
если не уменьшится перенести файлы в тома на диске ?
(тут тоже не совсем понял, в настройках работы с файлами надо поставить Хранить файлы «в томах на диске» или «в инф базе и в томах на диске» ? , потом создаю том и через гиперссылку «перенос файло» переношу туда файлы ? после этого они будут открываться у пользователей ?)
посмотрел с помощью CNVDBFL.EXE -i G:1Cv8.1CD структуру файла
формат : 8.3.8
размер страницы : 8192 — это норм ?
Волшебник
Модератор
1 — 17.02.22 — 08:58
Надо перейти на серверную базу
Chai Nic
2 — 17.02.22 — 09:04
С учетом «размер страницы : 8192» у вас уже был использован «последний шанс» увеличения размера внутреннего файла с 4 до 6 Гб. Это прибитое гвоздями ограничение, при использовании файловой базы с увеличенным размером страницы. Чтобы покупали серверную лицензию. Вот и покупайте..
ALEX7519
3 — 17.02.22 — 09:15
я там понимаю тема с хранением файлов на диске связана с тем, что на диске будут храниться внешние файлы, пдфники всякие там из отчетности и прочая дрянь,
разве она может влиять на синхронизацию с зуп ? т.е. уменьшу я сдшник за счет них, но не факт что это поможет ? да?
Guk
4 — 17.02.22 — 09:20
(3) да…
Winnie Buh
5 — 17.02.22 — 09:27
(0) 100% вариант — это только переход на SQL
все остальные 50/50
mistеr
6 — 17.02.22 — 09:33
(1) Или почистить лишнее
mistеr
7 — 17.02.22 — 09:35
(3) Посмотри с помощью Tool1CD какой файл подошел к 6 Гб. И можно ли его уменьшить.
ALEX7519
8 — 17.02.22 — 09:54
а как узнать что это за таблица, через тулс1с посмотрел вот эта к примеру : INFORG24411 — что это ?
Ёпрст
9 — 17.02.22 — 09:55
(8) табличка регистра сведения
Ёпрст
10 — 17.02.22 — 09:55
Ёпрст
11 — 17.02.22 — 09:56
Что за рс, можео посмотреть через получитьструктурутаблицхранения блатбла бла, в сп найдешь метод, ну или поделками, коих как грязи на нимфостарте
mistеr
12 — 17.02.22 — 09:57
(8) Инструменты Разработчика, Структура хранения БД.
Winnie Buh
13 — 17.02.22 — 10:45
Сервер МИНИ до 5-ти сеансов — 14400 руб.
ALEX7519
14 — 17.02.22 — 10:56
посмотрел самая большая таблица «РегистрСведений.ВерсииОбъектов»
что это за ? его можно почистить ? 6.5 гигов занял
rozer76
15 — 17.02.22 — 11:00
(14) конечно, это версионирование БСП. Хотя давно в платформе это нативно есть
Ёпрст
16 — 17.02.22 — 11:03
(14) да. Просто грохаешь все записи в нём и привет. Оно тебе не нужно.
И в свойствах конфы отключи версионирование совсем. Ну можешь только на значимые доки/справочники оставить
ALEX7519
17 — 17.02.22 — 11:09
по инету покопался народ пишет обработки оставляет только последние записи и т.п. … это для чего то или можно все сразу грохнуть ?
Ёпрст
18 — 17.02.22 — 11:10
(17) ну. кто-то видать хоть иногда смотрит версии объектов, и оставляют последние, для истории.
mistеr
19 — 17.02.22 — 11:11
(17) Если до сих пор не понадобилось, значит можно грохнуть. Если вдруг понадобится, есть же бэкапы. (Они же есть, да?)
Ёпрст
20 — 17.02.22 — 11:16
И..лучше насовсем версионирование отключи в константах. Быстрее будут доки проводится/записываться.
Один хрен, не используете
Dmitrii
21 — 17.02.22 — 11:31
Забавно. А с чего все взяли, что версионирование не используется? Может там бухи регулярно проверяют — кто, что и когда поменял в базе.
Сначала надо у пользователей спросить. Если опрос покажет, что никто не знает о чём идёт речь (такое вполне возможно), то можно смело грохать.
Но если выяснится, что всё таки кому-то нужно версионирование, то придётся настроить регулярную очистку старых версий объектов. И возможно отключить версионирование у некоторых объектов, оставив только у самых важных.
ALEX7519
22 — 17.02.22 — 11:39
В базе в администрировании не стоит галки хранить историю изменений,
залез в этот регистр и обнаружил, что в нем записываются данные только по документу «Отражение зарплаты в бухучете», причем каждый день по несколько записей
( видимо так как настроена автоматическая синхронизация с зуп то он при каждом обращении к базе зуп туда фигачит записи )
т.е. если я его почищу он при очередной синхронизации не перезапишет мне в бух базе эти документы по отражению зарплаты с начала работы
Обработка
23 — 17.02.22 — 11:46
(22) Очень странно что именно обмен влияет на версии.
Хотя ад у меня те ведь при обмене если изменился объектов автоматом регит.
Просто надо выяснить нужно это кому или нет.
И удалить. На крайняк можно оставить последний месяц или два.
Я недавно у себя чистил версии и база сильно уменьшился.
Ёпрст
24 — 17.02.22 — 11:52
(22) это не история изменений, это старый механизм версионирование
Жан Пердежон
25 — 17.02.22 — 11:53
(0)
https://v8.1c.ru/price/
1С:Предприятие 8.3. Сервер МИНИ на 5 подключений
14 400 руб.
ALEX7519
26 — 17.02.22 — 12:03
(24) ну т.е. если почикать вот так
НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
то ничего плохого не случится ? :))
ALEX7519
27 — 17.02.22 — 12:05
(25) 1С:Предприятие 8.3. Сервер МИНИ на 5 подключений
14 400 руб.
это дешовая версия для перехода на SQL ? еще что-ниб локупать надо будет ?
Dmitrii
28 — 17.02.22 — 12:05
(22) >> В базе в администрировании не стоит галки хранить историю изменений.
Тогда включи эту галку. Перейди в диалог настройки. оставь у всех объектов «Когда сохранять версии» = «Никогда». У документа «Отражение зарплаты в бухучете» установи «Когда сохранять версии» = «При проведении» и «Срок хранения версий» = «Неделя».
Внизу формы есть галочка «Автоматически удалять устаревшие версии». Установи её и настрой расписание этого регламента. Например, раз в неделю. При первом выполнении это регламент заодно удалит все старые имеющиеся записи.
Dmitrii
29 — 17.02.22 — 12:11
(27) >> это дешёвая версия для перехода на SQL?
В некотором роде. Если у вас действительно не больше пяти одновременно работающих с 1С пользователей. Больше 5 подключений сервер МИНИ сделать не даст.
>> еще что-нибудь докупать надо будет?
СУБД. Но есть бесплатные версии. Например.
MS-SQL Express (имеет ряд ограничений на размер базы, объём используемой памяти, что-то ещё — подробнее надо смотреть на сайте MS). Для вас должен подойти.
PostgreSQL. Полностью бесплатен. Есть версии для Windows и Linuх.
Ёпрст
30 — 17.02.22 — 12:12
(26) делай.
Повелитель
31 — 17.02.22 — 12:27
(29) MS-SQL Express (имеет ряд ограничений на размер базы, объём используемой памяти, что-то ещё — подробнее надо смотреть на сайте MS). Для вас должен подойти.
Там ограничение на 2 Гб база )))
Бесплатная только PostgreSQL будет
1Сергей
32 — 17.02.22 — 12:32
(31) 2 гб? Ничо не путаете? Вроде, 10 было
acht
33 — 17.02.22 — 12:32
Winnie Buh
34 — 17.02.22 — 12:33
(31) у MS SQL Express ограничение на размер базы до 10Гб, но ТС в любом случае не подойдет,
PostgreSQL или платная MS SQL
Dmitrii
35 — 17.02.22 — 13:02
(34) >> у MS SQL Express ограничение на размер базы до 10Гб.
Странно. Действительно только 10Гб. Мне почему-т оказалось, что больше.
Ну значит только PostgreSQL.
ALEX7519
36 — 17.02.22 — 15:55
А ЕЩЕ ВОПРОС :
НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Записать(); не сработало, вернее работало работало потом выдало что не хватает памяти и вылетело.
переписал вот так, но тоже медленно работает ( удаляю по частям ): может как-ниб по другому можно написать чтобы быстрее работало ?
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(«Док»);
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
| ВерсииОбъектов.Объект КАК Объект
|ИЗ
| РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов
|ГДЕ
| ВерсииОбъектов.ДатаВерсии МЕЖДУ &Дата1 И &Дата2
|
|СГРУППИРОВАТЬ ПО
| ВерсииОбъектов.Объект»;
Запрос.УстановитьПараметр(«Дата1»,ДатаН );
Запрос.УстановитьПараметр(«Дата2»,ДатаК );
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
стр = ТЗ.Добавить();
стр.Док = Выборка.объект;
КонецЦикла;
ТЗ.Свернуть(«Док»);
для Каждого стр из ТЗ Цикл
Если стр.Док.Метаданные().Имя = «ОтражениеЗарплатыВБухучете» или стр.Док.Метаданные().Имя = «ВедомостьНаВыплатуЗарплаты» Тогда
НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(стр.Док);
НаборЗаписей.Записать();
КонецЕсли;
КонецЦикла;
Ёпрст
37 — 17.02.22 — 15:56
(36) через менеджер можно удалять еще
Ёпрст
38 — 17.02.22 — 15:56
чуток удалить, и потом записать пустой набор
johnnik
39 — 17.02.22 — 17:26
Дважды в «карьере» сталкивался с подобной ошибкой и оба раза причиной был распухший регистр сведений «Замеры производительности». Очищается легко (есть обработка на инфостарте)
Что делать, если архив базы загружается в файловом варианте с ошибкой «Превышен максимально допустимый размер внутреннего файла», а загрузить очень надо? Постараюсь примерно описать технологию, которую нам удалось разработать при активном участии Виктора Сосновского из фирмы «1С» на партнерском форуме.
Предположим, вы сформировали архив базы и теперь пытаетесь загрузить его в файловом варианте. Сначала все идет хорошо, но в какой-то момент возникает ошибка:
«Ошибка загрузки информационной базы. В информационную базу загружены не все данные по причине: Ошибка СУБД: Превышен максимально допустимый размер внутреннего файла ‘D:1CBASESNewDB/1Cv8.1CD’«
Я лично потратил ОЧЕНЬ много времени на поиск решения этой проблемы и в итоге нашел его, что позволило нам создать файловую копию базы данных размером 18 Гб и в итоге сэкономило примерно неделю времени (могу в комментариях рассказать, как было дело, но сейчас речь не о том).
Итак, причин возникновения такой ошибки может быть несколько:
- Размер КАКОЙ-ЛИБО таблицы в базе данных превышает лимит для файловой версии (4 Гб). Если честно, во избежание подобных эксцессов мы проверяли размеры таблиц базы заранее с помощью обработки «SQL базомер» (или аналогов).
- Ошибка связана с глюком особенностями платформы, и вызвана определенной спецификой структуры метаданных выгружаемой конфигурации.
С первым случаем все понятно — если базомер показал превышение лимита по каким-то из таблиц базы, то эти таблицы необходимо почистить. Если речь идет о справочнике или непериодическом регистре сведений, то нужно постараться удалить оттуда ненужные элементы/записи. То же самое относится и к «тяжелым» документам с их табличными частями. В первую очередь следует заняться удалением помеченных объектов, конечно.
Регистры накопления — отдельная тема. Размеры таблиц итогов могут превышать размеры таблиц записей регистра, причем зачастую значительно. Иногда может помочь даже простой пересчет итогов.
Регистры остатков могут некорректно (не по всем измерениям) закрываться, что приводит к ОЧЕНЬ значительному и быстрому разрастанию таблиц итогов. Списание «зависших» остатков регистра накопления может при последующем пересчете итогов дать экономию до нескольких Гб, проверено на собственном опыте у «нерадивых» клиентов. ))
Что же делать, если каждая таблица вашей базы размером менее 4 Гб, но ошибка все равно возникает?
Это значит, что у вас второй случай — проблемная структура метаданных конфигурации. Вероятнее всего, ошибка возникает на этапе создания индексов.
В двух словах опишу ситуацию в целом, чтобы было понятно, словами Виктора Сосновского из 1С. Ниже цитата с партнерского форума:
«При загрузке информационной базы в файловом варианте сначала загружаются данные всех таблиц, а затем создаются индексы. Ошибка создания индекса приводит к тому, что индекс, созданный с ошибкой, и все последующие индексы не создаются. Если в базе много данных, то это приведет к существенному снижению производительности. Полноценная работа с такой базой будет невозможна.»
Нужно узнать, какая именно таблица приводит к ошибке при создании индекса.
Включаем технологический журнал — в папку «С:Program Files (x86)1cv82__НомерВерсииПлатформы__inconf» (или аналогичную, __НомерВерсииПлатформы__ подставьте свой) кладем файл logcfg.xml примерно следующего содержания:
<?xml version=»1.0″ encoding=»UTF-8″?>
<config xmlns=»http://v8.1c.ru/v8/tech-log»>
<dump create=»true» location=»D:1CBASESdumps» type=»0″ prntscrn=»true»/>
<log history=»3″ location=»D:1CBASESlogs»>
<event>
<eq property=»name» value=»dbv8dbeng»/>
</event>
<event>
<eq property=»name» value=»excp»/>
</event>
<property name=»all»/>
</log>
</config>
Внимательно следим за тем, чтобы каталоги для дампов и логов:
- Существовали
- Различались
- Были доступны для чтения и записи тому пользователю Windows, от лица которого вы запускаете конфигуратор.
Перезапускаем конфигуратор (при этом включается технологический журнал) и заново пробуем загрузить наш .DT. После возникновения ошибки идем в каталог для логов, находим там файл лога, содержащий нашу ошибку, и внимательно читаем его.
Первое же вхождение EXCPCNTX в логе в моем случае указало на команду, которая вызвала ошибку: CREATE INDEX _Accum27148_ByDims_TRRRRRRRRRSSR (у вас название индекса будет другое).
По цифрам из названия индекса с помощью обработки «Структура хранения таблиц базы данных» (или аналогов, которые умеют показывать индексы) находим, какой таблице принадлежит данный индекс. У меня это оказалась таблица оборотов одного из нетиповых регистров накопления.
А дальше начинается самое интересное — нужно попытаться угадать, что именно в структуре вашей таблицы приводит к ошибке индексации.
В первую очередь следует смотреть, какие поля входят в индекс. Как выяснилось, платформа ОЧЕНЬ не любит, когда совокупный размер ключевых полей индекса становится значительным. В частности, она не любит индексировать длинные строки — так, в моем случае в индекс попадало измерение с типом СТРОКА (500) и оно вызывало ошибку. Другой представитель фирмы «1С» высказался на партнерском форуме еще в 2007 году:
«Если длина ключа оказывается близкой к 2К, то начинается резкий рост размера индексов с рядом неприятных последствий.«
И действительно, в 2013 году ничего не изменилось — в подобных случаях наблюдается лавинообразный рост размеров индекса на файловой базе. А когда таблица индекса превышает лимит в 4 Гб, загрузка .DT останавливается с ошибкой.
Лично мне помогло отключить для проблемного измерения флажок «Использование в итогах», т.к. в реальности итоги по нему не требовались. Оно перестало попадать в саму таблицу оборотов и, как следствие, в индекс таблицы оборотов. Есть и другие способы — более строго ограничить размер строки, например. Читал, что некоторым это помогало.
Эти изменения необходимо применить к информационной базе, при этом произойдет реструктуризация вашей таблицы.
Если изменения внесены на SQL-копии базы, то после этого нужно заново выгрузить .DT и попытаться перезагрузить его в файловой версии.
Если SQL-копии нет под рукой, то можно попробовать исправить прямо на вашей недозагруженной файловой копии. После принятия изменений запускайте «Тестирование и исправление» в режиме реструктуризации таблиц базы данных. Индексы будут созданы платформой заново и, можно надеяться, уже без ошибок.
Кому особо не повезло и ошибка вылезла снова — тому следует повторить сначала всю процедуру, начиная с анализа логов. Возможно, проблемная таблица была не одна, или вам не удалось решить проблему с размерами полей, входящих в индекс.
Удачи вам!