Создание БД для "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;

Рис1. Locale Builder: переход к компиляции collation-файла 1C

- в появившемся диалоговом окне укажите путь по которому расположен файл lx327c5.nlt;

Рис2. Выбор директории с collation-файлом для 1С

- если компиляция прошла успешно, то вы должны получить вот такое сообщение:

Рис3. Успешное завершение компиляции collation для 1C

- скопируйте полученные файлы с расширенем dtd,nlt,nlb в каталог $ORACLE_HOME/NLS/DATA (заменив существующие файлы lx0boot.*).

ВНИМАНИЕ: по словам Oracle Development Team, совместимость форматов файлов nlb (бинарных файлов collation-таблиц) гарантируется только на уровне патчсета! То есть при установке нового патчсета нужно снова повторить вышеописанную процедуру.

Теперь собственно можно приступить к создания базы данных. Рекомендуемым способом для этого является Database Configuration Assistant [DBCA].

Следующий важный момент: cоздаваемая БД должна иметь основную кодировку AL32UTF8 и дополнительную AL16UTF16. Значения остальных параметров БД определяются уже исходя из конкретных условий эксплуатации 1С.

Рис4. Выбор необходимых кодировок при создании БД для 1С

ВНИМАНИЕ: если создание БД происходило после установки bundle-патча, то после создания БД, нужно заново "прогнать" скрипт catcpu.sql . Информация об этом есть в разделе "Post installation task" в документации к bundle-патчу.

После того как БД cоздана, можно приступить к импорту dt-файда (это СУБД-независимый файл дампа конфигурации 1С). При первом импорте будут созданы четыре табличных пространства:
  • v81c_data
  • v81c_index
  • v81c_lob
  • v81c_temp
Назначение вышеперечисленных tablespaces видно из их названия.

Сответствующие файлы данных будут созданы в том же каталоге, где расположены фвйлы табличного пространства System.

Ну, а дальше начинаются обычные задачи Oracle DBA по сопровождению и тюнингу СУБД ...

В следующей серии будут рассмотрены вопросы оптимизация прикладного кода 1С под Oracle Database.
Оставайтесь с нами. - Встретимся в "1C for Oracle"! :-)

4 комментария:

  1. Спасибо за интересные статьи по этой теме, как раз предстоит такая работа. Ждем продолжения с нетерпением!

    ОтветитьУдалить
  2. Очень хотелось бы видеть следующей статью про установку Oracle для 1С на Linux! Заранее спасибо!

    ОтветитьУдалить
  3. Добрый день,
    Статья полезная но столкнулся с такой проблемой настроил 1С + Oracle все работает. Через PL\SQL создаю триггер в тестовые таблицы все отлично, установил DBLink с другой базой запускаю триггер вылетает такая ошибка (ORA-12705: Cannot access NLS data files or invalid environmental specified).

    База на которой вертится 1С там кодировка NLS_CHARACTERSET=AL32UTF8, а база куда импортируем NLS_CHARACTERSET=CL8MSWIN1251. Кодировки менять нельзя.

    Может быть кто нибудь сталкивался с подобным.

    ОтветитьУдалить