Внешние источники данных 1С (Linux): Подключение к Oracle через unixODBC
Архитектура Внешних Источников Данных (ВИД) на Linux
Механизм Внешних источников данных в 1С позволяет напрямую обращаться к сторонним СУБД (Oracle, MySQL, MS SQL) и работать с их таблицами как с объектами 1С, без копирования данных. В среде Windows для этого используются нативные драйверы ADO/ODBC. Однако, когда сервер 1С (rphost) развернут на ОС Linux, инфраструктура ADO отсутствует. 1С на Linux жестко требует использования слоя драйверов unixODBC. Если он не настроен, 1С выдаст ошибку: Источник данных не найден и не указан драйвер, используемый по умолчанию. Бизнес-риски: невозможность построения консолидированной отчетности по филиалам, срыв интеграции с корпоративным хранилищем данных (DWH).
Стек взаимодействия (Снизу вверх)
| Компонент стека | Пример (Oracle) | Файл настройки / Команда |
|---|---|---|
| 1. СУБД (Цель) | Oracle Database 19c | IP-адрес, Порт (1521), SID/Service_Name |
| 2. Клиент БД (Native) | Oracle Instant Client (Linux) | Установка rpm пакетов, настройка LD_LIBRARY_PATH |
| 3. Менеджер ODBC | unixODBC | /etc/odbcinst.ini (Драйверы), /etc/odbc.ini (DSN) |
| 4. Платформа 1С | Сервер 1С (Рабочий процесс) | Конфигуратор -> Внешние источники данных -> Строка подключения |
Пошаговая настройка unixODBC для Oracle в 1С
Сценарий 1: Установка unixODBC и Oracle Instant Client
Установите пакетный менеджер ODBC и нативные драйверы Oracle для Linux.
# Установка менеджера unixODBC (на примере CentOS/RHEL)
yum install unixODBC unixODBC-devel
# Загрузка и установка RPM-пакетов Oracle Instant Client (Basic + ODBC)
rpm -ivh oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm
rpm -ivh oracle-instantclient19.3-odbc-19.3.0.0.0-1.x86_64.rpmСценарий 2: Конфигурация файлов odbcinst.ini и odbc.ini
Файлы обычно находятся в /etc/. Укажите пути к установленным драйверам (.so).
# 1. Регистрация драйвера в /etc/odbcinst.ini
[Oracle19c]
Description = Oracle ODBC driver for Oracle 19c
Driver = /usr/lib/oracle/19.3/client64/lib/sqora.so.19.1
FileUsage = 1
# 2. Создание DSN (Data Source Name) в /etc/odbc.ini
[ORA_ERP]
Description = Oracle ERP Database
Driver = Oracle19c
ServerName = 10.0.0.50:1521/ORCL
UserID = erp_user
Password = secretСценарий 3: Настройка окружения для службы 1С (Критично!)
Служба сервера 1С (srv1cv8) должна "видеть" библиотеки Oracle. Если переменная среды не задана, драйвер ODBC не загрузится (Ошибка загрузки разделяемой библиотеки).
# Редактирование сервиса systemd для 1С (или скрипта /etc/init.d/srv1cv83)
systemctl edit srv1cv83.service
# Добавить переменные в блок [Service]
[Service]
Environment="LD_LIBRARY_PATH=/usr/lib/oracle/19.3/client64/lib"
Environment="TNS_ADMIN=/usr/lib/oracle/19.3/client64/network/admin"
# Перезапуск служб
systemctl daemon-reload
systemctl restart srv1cv83Сценарий 4: Подключение в 1С
В конфигураторе добавьте Внешний источник данных. В строке подключения укажите созданный DSN: DSN=ORA_ERP;Uid=erp_user;Pwd=secret;
Типовые ошибки администраторов
- Проверка ODBC под root: Администратор проверяет подключение командой
isql -v ORA_ERPпод пользователемroot, и оно работает. Но сервер 1С работает подusr1cv8, у которого нет переменных окруженияLD_LIBRARY_PATH. Настраивать переменные нужно именно для сервиса 1С. - Разрядность библиотек: Сервер 1С на Linux является 64-битным. Все компоненты (unixODBC, Oracle Client, ODBC Driver) СТРОГО должны быть 64-битной архитектуры (x86_64). Подкладывание 32-битных
.soфайлов вызовет ошибку ELF-заголовка.
Частые вопросы (FAQ)
Как протестировать подключение к Oracle на уровне Linux, до 1С?
Используйте утилиту isql, входящую в состав unixODBC. Команда: 'su - usr1cv8' (переключитесь на пользователя 1С), затем выполните 'isql -v ORA_ERP'. Если подключение успешно, появится приглашение SQL>.
Можно ли подключиться к MS SQL Server из 1С на Linux?
Да. Для этого вместо Oracle Instant Client нужно установить Microsoft ODBC Driver for SQL Server (msodbcsql17 или 18) для Linux. Настройка odbcinst.ini и odbc.ini производится аналогично.
Влияет ли версия unixODBC на работу?
Да, существуют известные баги (например, обрезание строк) при использовании старых версий unixODBC (ниже 2.3.0) в связке с драйвером MS SQL. Рекомендуется использовать актуальные версии из репозиториев разработчиков СУБД.
Как указать строку подключения в 1С без использования DSN (DSN-less)?
В строке подключения 1С укажите имя драйвера из odbcinst.ini в фигурных скобках. Пример: Driver={Oracle19c};Server=10.0.0.50:1521/ORCL;Uid=user;Pwd=pass;. Это позволяет обойтись без файла odbc.ini.