Index was outside the bounds of the array
У меня - переход с Oracle.DataAccess.dll 10G x64 => Oracle.ManagetDataAccess.Dll 12.1 x64.
Место замены - вполне хорошо слеплено - менять надо в одной точке.
Замена сделана почти все работает.
Имеются 3 сервера (реально - 6, но ставятся парами, в паре - одинаковые версии Оракла).
И 6 баз данных.
Подключение описывается как :
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=db_host)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=L.world)));USER ID=*****; PASSWORD=*****;
Меняется только HOST.
Насколько Я понимаю, при таком подключении все детали уже прописаны и тнснамес.ора не используется.
Два из трех серверов используют Оракле 10Г х64 и отвечают на подключение без проблем.
На третьем сервере пользуется - Оракле 8.1 Ент. С него получаю Индех оут оф боунд.
Это не при считывании информации, а при попытке коннекта.
Та же строка с Oracle.DataAccess.dll 10G x64 вполне нормально работала.
Рытие тырнета дает ссылки только на проблемы считывания данных датареадером.
Как конфигурить коннектион 12-го клиента к 8.1-й базе?
Index was outside the bounds of the array.
Хотя возможно, можно изменить строку подключения что бы ее понимал 8 оракле.
-----
Логи на 8-ке говорят, что она получила запрос и ответила положительно.
Подозреваю, что ошибка в обработке ответа 8-ки в Оракле.МанагетДатаАццесс.длл...
Я ее уже декомпильнул, но там довольно много просматривать...
Есть где ПДБ для нее? И, хорошо бы, дебажную версию с сорцами...
Разве настолько запутанно написал?
У меня - миграция.
Строки подключения - не менялись - используются те же что и при предыдущем клиенте.
Менятся клиентская часть, которая должна коннектится к разным серверам.
К двум (оба версии 10Г) - коннектится без проблем, к третьему (версия 8.1) - отваливается с указанной ошибкой.
Конкретная точка выпадения - вызов OracleConnection.Open().
Могу уточнить какая именно из внутренних функций выбрасывает исключение, но без знания деталей построения клиента (без сорцов) оно бессмысленно.
Так прояснилось?
интерпретатор должнен быть адаптивным . Мурку вроде давно знаю.
Проблемы весьма не простые, уровень изложения требует определенных знаний.
Как правило, немедленный ответ не ожидается. Требуется просто другой взгляд на вещи. Если проблема решена, описывается решение. Если нет, описываются попытки решения. Отсюда - как бы разговор с самим собой.
Вероятно нужен еще "резонанс", где то подобный тип мышления.
Если интересно, можно попробовать разобрать конкретный вопрос. Что же было непонятно.
Могу сразу сказать, что мой ответ был также многим непонятен, так как адресовался конкретно Мурке, который знает линейку процессоров Интел и связанные с этим проблемы Мелкософта.
Требуется просто другой взгляд на вещи.
-----
Именно.
Просто пнуть чтобы помыслил с необычной стороны...
А иногда - попинывать... просто чтобы вопрос оставался в фокусе...
Если проблема решена, описывается решение. Если нет, описываются попытки решения. Отсюда - как бы разговор с самим собой.
-----
Да, вот по этому есть вопросик ко всем читающим - моя писанина в области решений или рассмотренных вариантов хоть для кого-то была полезна?
Для меня самого - была - приходилось возвращаться к некоторым моментам - хорошо что были описаны. Жаль - мало.
Таки нашел в чем проблема.
Клиент Oracle.ManagetDataAccess.dll 12.1
поддерживает коннект к базам :
internal const string TokenOracle9iR2 = "9.2";
internal const string TokenOracle10gR1 = "10.1";
internal const string TokenOracle10gR2 = "10.2";
internal const string TokenOracle11gR1 = "11.1";
internal const string TokenOracle11gR2 = "11.2";
internal const string TokenOracle12cR1 = "12.1";
internal const string TokenOracle12cR2 = "12.2";
Мне же нужно - 8.1... Тупик...
Пошел искать 11-го клиента...
Хммм...
11-й требует две дополнительные ДЛЛки и четко отвечает - версия не поддерживается.
Но так какого хрена Я без проблем коннекчусь к 8-ке-базе из 12-го СклПлусс?
Попутный вопросик - где и как поменять ответ Оракле 8.1 на запрос коннекта?
Когда-то давно читал что есть такой ливе-хак, но деталей не помню...
Но так какого хрена Я без проблем коннекчусь к 8-ке-базе из 12-го СклПлусс?
Еще не найденная ошибка
Когда-то давно читал что есть такой ливе-хак
Не слышал, но можно просто подменить длл-ку на свою, которая вызывает функции из стандартной.
Когда то давно на плюсах подобное делал.
Еще не найденная ошибка
-----
Да-да, проблемы...
можно просто подменить длл-ку
-----
Можно откатится на клиента 10Г... как было до сих пор. Все работает.
Там правда несколько проблем.
Основная - вместо одной ДЛЛки-клиента надо иметь с 5-6 ДЛЛок и кучу дополнительных
моментов для их корректной работы.
Частичная проблема - отдельный клиент версии 10Г х64 - давно не доступен для загрузки.
Из доступного - есть ентерприсе база и ее надо ставить для возможности использования
клиента (сама база - не нужна).
12-й клиент - это одна ДЛЛка без подвязки к системе.
которая вызывает функции из стандартной.
-----
Мне нужно будет подменить функцию в стандартной.