[РЕШЕНО] Подключение к внешней БД (oracle)

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Peroman, 24 мар 2017.

  1. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.028
    Симпатии:
    28
    Баллы:
    54
    Доброго времени суток!


    Пытаюсь подключиться к БД oracle:
    Код:
        СтрокаПодключения = "Driver=OraClient11g_home1_32bit;Server=Serv;DataBase=DEMO;Uid=usr;Password=pass;";
        Connection = Новый COMОбъект("ADODB.Connection");
       
        Попытка
            Connection.Open(СтрокаПодключения);
            Сообщить("Подключился");
        Исключение
            Сообщить(ОписаниеОшибки());
            Возврат;
        КонецПопытки;
    
    Получаю ошибку:

  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.821
    Симпатии:
    1.024
    Баллы:
    204
  3. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.028
    Симпатии:
    28
    Баллы:
    54
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.821
    Симпатии:
    1.024
    Баллы:
    204
    NameBD - это у вас что?
    Нужно название в файле TNSnames.ora
  5. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.028
    Симпатии:
    28
    Баллы:
    54
    Имя моей БД. А что должно быть?

    Вот в файле как:

    Код:
    CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = NameBD)
    --- Объединение сообщений, 24 мар 2017 ---


    Правда теперь изменилась ошибка:
    Код:
    {ВнешняяОбработка.Загрузка.Форма.Форма.Форма(392)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (ADODB.Connection): Provider cannot be found. It may not be properly installed.
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.821
    Симпатии:
    1.024
    Баллы:
    204
    В файле все остальное прописано: IP адрес, порт, имя базы?

    Провайдер именно так называется в списке провайдеров: OraClient11g_home1_32bit?

    Переменные окружения настраивали?
  7. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.028
    Симпатии:
    28
    Баллы:
    54
    Дело в том, что мне всё настраивал админ.
    Но точно знаю, в файле всё прописано, я посмотрел. Более того мы, успешно, подключались через командную строку. И в списках(клиента) есть все нужные мне БД, в том числе и так к которой я пытаюсь подключиться. Про провайдера затрудняюсь ответить. После того как админ мне клиента поставил я посмотрел в некий файл:
    Но если создать текстовый файл udl.Получим

    upload_2017-3-24_16-4-57.png

    Причём, если кликнуть первый или третий, то выскакивает ошибка, поставщики более не доступны
    --- Объединение сообщений, 24 мар 2017 ---
    Но я так понимаю, если я конечно правильно понимаю. В моём первом варианте я использовал не провайдера, а драйвер:
    Код:
        СтрокаПодключения = "Driver=OraClient11g_home1_32bit;Server=Serv;DataBase=DEMO;Uid=usr;Password=pass;";
    А во втором как раз через провайдера:
    Код:
     stringConnect1 = "Provider=OraOLEDB.Oracle;Data Source=NameBD;User Id=usr;Password=123;";
  8. TrasserZero
    Offline

    TrasserZero Опытный в 1С

    Регистрация:
    26 окт 2016
    Сообщения:
    69
    Симпатии:
    4
    Баллы:
    29
    должен стоять провайдер (оракл-клиент). его можно тупо скопировать в любую папку. скачать можно на сайте оракла. Далее идем в системные переменные среды и там рисуем следующее (корректируя пути, ессно):
    LD_LIBRARY_PATH=C:\instantclient_11_2
    ORACLE_HOME=C:\instantclient_11_2
    SQL_PATH=C:\instantclient_11_2
    TNS_ADMIN=C:\instantclient_11_2\network\admin
    Path=;C:\instantclient_11_2
    NLS_LANG= american_america.cl8mswin1251

    на стороне базы должен быть настрое листенер (прослушивальщик). ннада знать айпишник сервака и порт (по дефолту 1521). Пихаем эти знания в tnsnames.ora в таком примерно виде:
    имя =
    (DESCRIPTION =
    (ADDRESS =
    (PROTOCOL = TCP)
    (HOST = хх.хх.х.ххх)
    (PORT = 1521)
    )
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = имя)
    )
    )

    как-то так..
  9. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.028
    Симпатии:
    28
    Баллы:
    54

    Вот всё выше перечисленное мне админ и делал.(
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.821
    Симпатии:
    1.024
    Баллы:
    204
    Переменных сред достаточно:

    ORACLE_HOME=C:\instantclient_11_2
    NLS_LANG= RUSSIAN_CIS.CL8MSWIN1251

    Судя по скриншоту со списком установленных ODBC драйверов, нужного нет.

    Строка соединения:
    100% рабочая при условии корректности остальных настроек.

    Список драйверов ODBC при этом:
    upload_2017-3-24_16-54-13.png
  11. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.397
    Симпатии:
    155
    Баллы:
    104
    вот такое работает у нас
    DRIVER={Oracle in OraClient11g_home1};UID=***;PWD=***;DBQ=dbserver.dns.name:1530/DATABASE.dns.name

    это прямое подключение к конкретному серверу

    Клиент оракла нужен той же разрядности что и сервер
  12. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.028
    Симпатии:
    28
    Баллы:
    54
    И снова, доброго времени суток, коллеги!

    И так. Администратор БД, мне сказал, что технология ODBC надежная, но старая и через неё подключаться не айс. Надо подключаться через Ole провайдера.
    Моя ошибка, что я настраивал провайдеров, драйвера и клиента для Оракла, на машине, где стоит клиент, а директива была &НаСервере. Т.е. всё это надо было поставить на сервер 1С-ки. Что я и сделал. И ура! У меня появился Ole провайдер Оракла:

    upload_2017-3-29_11-40-18.png

    Дальше, добавляем среду "ORACLE_HOME=путь к клиенту" делаем тест:

    upload_2017-3-29_11-44-6.png

    Видим, что тест "Ok". Значит делаем вывод, что на сервере все установлено и настроено верно.

    Строка соединения:

    Код:
        stringConnect1 = "Provider=OraOLEDB.Oracle;Data Source=DEMO;User Id=login;Password=123;";
    
    И в результате всё равно получаем ошибку:

    P.S.
    Статья которая мне помогла:
    http://info-comp.ru/sisadminst/551-linked-server-oracle-in-ms-sql-server.html
    Может кому пригодится
  13. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.028
    Симпатии:
    28
    Баллы:
    54
    Через отладчик посмотрел, что строка коннекта какая-то лажа. Делаю так:
    Код:
    Connection = Новый COMОбъект("ADODB.Connection");
        Connection.ConnectionString  = "Provider=OraOLEDB.Oracle;Data Source=DEMO;User Id=login;Password=123;";  
    
    Т.е. задаю напрямую значение ConnectionString, но в отладчике вижу что ConnectionString =
    Почему провайдер подставляется другой?
    --- Объединение сообщений, 29 мар 2017 ---
    Если явно указать:
    Код:
        Connection.Provider ="OraOLEDB.Oracle";
    
    Получаю ошибку:

    Последнее редактирование: 29 мар 2017
  14. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.821
    Симпатии:
    1.024
    Баллы:
    204
    Вам уже 2 человека написали 100% рабочие строки соединения, которые работают годами, но вы дальше можете экспериментировать.....
  15. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.028
    Симпатии:
    28
    Баллы:
    54
    Если бы эти строки работали, то я бы наверное не писал бы и не экспериментировал.
    Плюс ко всему я уже писал выше, что админ "КРАЙНЕ" не рекомендует подключаться через ODBC, т.е. как раз через драйвер никак.
  16. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.028
    Симпатии:
    28
    Баллы:
    54
    Ура заработало!!! Всё было элементарно: надо было не так:
    Код:
    Connection.Open(ConnectString);
    
    а вот так:
    Код:
    Connection.ConnectionString =  stringConnect1;
    Connection.Open();
    Чёрт. Наврал и первый вариант работает, ошибка валится если идти пошагово, в отладчике. Почему так я не знаю.
    Последнее редактирование: 29 мар 2017
  17. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.397
    Симпатии:
    155
    Баллы:
    104
    Посоветуйте админу почитать сайт микрософта :)
    Они таки решили уходить от OLEDB
    Либо odbc как универсальная технология доступа и для windows и для linux, либо native библиотеки, что для 1С никак

    На самом деле без разницы как вы будете подключаться, через OLEDB или через ODBC, вы получите одни и те же библиотеки доступа к Oracle, просто через разные прокладки.
  18. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.028
    Симпатии:
    28
    Баллы:
    54
    Я не думаю, что мне стоит что-то советовать админу. Тем более что после его прихода, в эту компанию, 1С стала хоть более менее нормально работать.
    Человек уже много лет работает админом БД, причём разных и Oracle и MSSQL и др.
    Этот человек оптимизировал работу MSSQL серверов, с БД в довольно больших объемов, а значит я ему склонен доверять.
    Потом, в работе админов, не мне им советовать что и как дело и что читать.