Создание БД для "1C:Предприятие v8.2"
Продолжаем тему запуска "1C:Предприятие v8.2" под СУБД Oracle Database 10g R2. В предыдущей серии мы рассмотрели вопросы установки бинарных файлов Oracle Database и установки патчей. На следующем шаге, очевидно, нужно создать базу данных.
Перед созданием БД необходимо выполнить очень важный шаг, без которого невозможно функционирование 1С for Oracle, а именно: скомпилировать и установить таблицу лингвистической сортировки (collation) 1С - V81C_GENERIC_M.
Немного вводной информации для тех, кто никогда не сталкивался с collation в Oracle Database.
Итак, collation table определяет порядок сортировки символов НЕ в соответствии с их кодами, а в соответствии с их порядковыми номероми в алфавите - это так называемая лингвистическая сортировка (linguistic sort). В общем случае порядок кодов символов не совпадает с их порядком в алфавите, поэтому для каждого алфавита нужна таблица соответствия, - это собственно и есть collation-таблица. Наборы таких таблиц находятся в каталое $ORACLE_HOME/NLS/DATA в виде двоичых файлов.
Для обеспечения одновременной работы 1С с несколькими языками, очевидно, что нужна collation-таблица кодировки Unicode. Такой collation естественно есть, и стандартно поставляется вместе с Oracle Database, - называется он GENERIC_M. Почему же для 1С понадобилось создание собственной collation-таблицы ?
Проблема заключается в том что, в collation-таблице GENERIC_M, в полном соответсвии с стандартом Unicode, все символы пунктуации и другие спец. символы (например: CHR(60) - непереносимый пробел), считаются незначащими символами (non-value), и поэтому "выбрасываются" при лингвистической сортировке. 1С первоначально разрабатывалась под SQL Server, где реализовано расширение стандарта (незначащие символы НЕ выбрасываюстя при лингвистической сортировке). Вывод: 1С "заточена" под лингвистическую сортировку с участием незначащих для Unicode символов и поэтому не могла работать под Oracle.
Решение этой проблемы было найдено простое: на основе стандартной collation-таблице Unicode (GENERIC_M) была создана collation-таблица в которой non-value символы были переопределены как значащие, и им был сопоставлены определенные номера. Эта collation-таблица называется V81C_GENERIC_M и поставляется в дистрибутиве 1С в виде файла lx327c5.nlt .
Файл lx327c5.nlt представляет собой текстовое описание collation-таблицы V81C_GENERIC_M. Перед созданием БД этот файл необходимо скомпилировать (перевести в бинарный формат) под конкретную версию СУБД и платформу. Эта операция осуществляется с помощью Locale Builder.
Для этого:
- на сервере с установленным ORACLE_HOME запустите Locale Builder;
- выберите пункт меню Tools/Generate NLB;
- в появившемся диалоговом окне укажите путь по которому расположен файл lx327c5.nlt;
- если компиляция прошла успешно, то вы должны получить вот такое сообщение:
- скопируйте полученные файлы с расширенем dtd,nlt,nlb в каталог $ORACLE_HOME/NLS/DATA (заменив существующие файлы lx0boot.*).
ВНИМАНИЕ: по словам Oracle Development Team, совместимость форматов файлов nlb (бинарных файлов collation-таблиц) гарантируется только на уровне патчсета! То есть при установке нового патчсета нужно снова повторить вышеописанную процедуру.
Теперь собственно можно приступить к создания базы данных. Рекомендуемым способом для этого является Database Configuration Assistant [DBCA].
Следующий важный момент: cоздаваемая БД должна иметь основную кодировку AL32UTF8 и дополнительную AL16UTF16. Значения остальных параметров БД определяются уже исходя из конкретных условий эксплуатации 1С.
ВНИМАНИЕ: если создание БД происходило после установки bundle-патча, то после создания БД, нужно заново "прогнать" скрипт catcpu.sql . Информация об этом есть в разделе "Post installation task" в документации к bundle-патчу.
После того как БД cоздана, можно приступить к импорту dt-файда (это СУБД-независимый файл дампа конфигурации 1С). При первом импорте будут созданы четыре табличных пространства:
- v81c_data
- v81c_index
- v81c_lob
- v81c_temp
Сответствующие файлы данных будут созданы в том же каталоге, где расположены фвйлы табличного пространства System.
Ну, а дальше начинаются обычные задачи Oracle DBA по сопровождению и тюнингу СУБД ...
В следующей серии будут рассмотрены вопросы оптимизация прикладного кода 1С под Oracle Database.
Оставайтесь с нами. - Встретимся в "1C for Oracle"! :-)
Спасибо за интересные статьи по этой теме, как раз предстоит такая работа. Ждем продолжения с нетерпением!
ОтветитьУдалитьОчень хотелось бы видеть следующей статью про установку Oracle для 1С на Linux! Заранее спасибо!
ОтветитьУдалитьПолезная статья
ОтветитьУдалитьДобрый день,
ОтветитьУдалитьСтатья полезная но столкнулся с такой проблемой настроил 1С + Oracle все работает. Через PL\SQL создаю триггер в тестовые таблицы все отлично, установил DBLink с другой базой запускаю триггер вылетает такая ошибка (ORA-12705: Cannot access NLS data files or invalid environmental specified).
База на которой вертится 1С там кодировка NLS_CHARACTERSET=AL32UTF8, а база куда импортируем NLS_CHARACTERSET=CL8MSWIN1251. Кодировки менять нельзя.
Может быть кто нибудь сталкивался с подобным.