Он сказал: "поехали!"
2009-08-17 10:02 pmОн - это пресс-релиз. На самом деле, там еще есть пару мелких углов, но вписывать прибавку к EXP и ЧСВ можно уже сейчас. Я там собирал требования, писал кучи документов, мигрировал данные и интегрировал все добро в одну кучу. Вот какой я молодец
Впрочем, не обошлось без казусов. Некие бравые ребята написали на PL/SQL пакетик процедур, и, натурально, вставили его в Oracle. Другие бравые ребята взяли программу на C#.Net и давай оттуда эти процедуры использовать.
В тестовом окружении (Oracle 8.1.7) - все шикарно. В промышленном (Oracle 9i) - не выходит каменный цветок. Лишь только пытаешься вызвать какую-то процедуру - Оракл тут же говорит ORA-03113, end-of-file on communication channel. И закрывает соединение со своей стороны.
При этом с того же самого компьютера можно подключиться к базе при помощи sqlplus, вызвать искомую процедуру и получить результат. Без всяких ошибок. Хоть раз, хоть десять.
Разработчики на PL/SQL, естественно, тут же воспряли духом - ага, баг не у нас, оказывается! Только толку от этого знания немного - надо же, чтобы в конце-концов все заработало и в приложении на C#.Net.
Разработчики на C# говорят: это все потому, что мы ходим через ODBC. Однако фиг - утилита ODBC Test, написанная (судя по виду GUI) еще во времена Windows 3.1, замечательным образом вызывает процедуры через ODBC.
Тогда разработчики на C# говорят: это все потому, что мы все переписали и теперь работаем через OleDb. Надо поставить ораклового клиента и использовать ODP.NET оттуда. Поставили. Однако фиг - как падало, так и падает. Причем, только с Oracle 9i - с 8.1.7 по-прежнему все хорошо.
Тогда разработчики на C# говорят: это у вас фиговый Оракл. Но их посылают в сад, так как "у меня нет для вас другого Оракла, товарищ Жуков".
Параллельно все участники процесса насилуют Google в поисках других товарищей по несчастью. Классик говорил: "если любишь заглядывать в бездну, помни, что бездна может заглянуть в тебя". Так и происходит: гугл приносит мешок рассказов о том, как по всему земному шару люди бьются лбом об стену с ORA-03113.
Типичные истории звучат примерно так: "Мы тут написали софтину на C#.NET, которая ходит в оракл. С версией 9i и ODP 9.0.1.3.1 все было хоршо, но потом мы обновили ODP до 9.0.1.3.3 и началось - ORA-03113 через пол-часа работы. Мы два месяца плясали с отладчиками, и поняли: у нас на клиентской стороне connection pool, а Оракл со своей стороны временами закрывает соединения по тайм-ауту. В пуле они не инвалидируются, и когда такое соединение выбирается для выполнения запроса, возникает ORA-03113. Мы не можем убрать пул (все тормозит) и не можем убрать отключение по тайм-ауту (требование безопасности). Более того - мы откатили ODP, но проблема осталась! Помогите!". Читаешь, и понимаешь, что у нас еще не все так плохо :)
Хоть у нас все и падает сразу и пул явно ни при чем - попробовали поиграться с его отключением или параметрами. А вот фиг.
В конце-концов разработчики на C# говорят: "Мы сдаемся! К вам едет "мистер Вульф, который решает пробемы" (Криминальное чтиво).". Приезжает человек, который занимается исключительно troubleshooting-ом разной неведаной фигни.
Человек целый день колдует с компилятором C# и кучей разных библиотек и в конце-концов говорит: "я не знаю, что бы это значило, но факт таков - если я до вызова процедуры сделаю хотя бы один select, то все работает хорошо". Проверяем - натурально, так оно и есть. Может, дело в каких-то миллисекундных паузах? Нет, расставленные по коду паузы не помогают.
Пляски с бубном продолжаются еще день, но без особого результата. В конце-концов принимается волевое решение о том, что код на C# должен после открытия соединения сделать "select table_name from all_tables where owner=current_user" и вычитать первый элемент рекордсета.
И все начинает работать без сучка и задоринки. Мораль придумайте сами.
Впрочем, не обошлось без казусов. Некие бравые ребята написали на PL/SQL пакетик процедур, и, натурально, вставили его в Oracle. Другие бравые ребята взяли программу на C#.Net и давай оттуда эти процедуры использовать.
В тестовом окружении (Oracle 8.1.7) - все шикарно. В промышленном (Oracle 9i) - не выходит каменный цветок. Лишь только пытаешься вызвать какую-то процедуру - Оракл тут же говорит ORA-03113, end-of-file on communication channel. И закрывает соединение со своей стороны.
При этом с того же самого компьютера можно подключиться к базе при помощи sqlplus, вызвать искомую процедуру и получить результат. Без всяких ошибок. Хоть раз, хоть десять.
Разработчики на PL/SQL, естественно, тут же воспряли духом - ага, баг не у нас, оказывается! Только толку от этого знания немного - надо же, чтобы в конце-концов все заработало и в приложении на C#.Net.
Разработчики на C# говорят: это все потому, что мы ходим через ODBC. Однако фиг - утилита ODBC Test, написанная (судя по виду GUI) еще во времена Windows 3.1, замечательным образом вызывает процедуры через ODBC.
Тогда разработчики на C# говорят: это все потому, что мы все переписали и теперь работаем через OleDb. Надо поставить ораклового клиента и использовать ODP.NET оттуда. Поставили. Однако фиг - как падало, так и падает. Причем, только с Oracle 9i - с 8.1.7 по-прежнему все хорошо.
Тогда разработчики на C# говорят: это у вас фиговый Оракл. Но их посылают в сад, так как "у меня нет для вас другого Оракла, товарищ Жуков".
Параллельно все участники процесса насилуют Google в поисках других товарищей по несчастью. Классик говорил: "если любишь заглядывать в бездну, помни, что бездна может заглянуть в тебя". Так и происходит: гугл приносит мешок рассказов о том, как по всему земному шару люди бьются лбом об стену с ORA-03113.
Типичные истории звучат примерно так: "Мы тут написали софтину на C#.NET, которая ходит в оракл. С версией 9i и ODP 9.0.1.3.1 все было хоршо, но потом мы обновили ODP до 9.0.1.3.3 и началось - ORA-03113 через пол-часа работы. Мы два месяца плясали с отладчиками, и поняли: у нас на клиентской стороне connection pool, а Оракл со своей стороны временами закрывает соединения по тайм-ауту. В пуле они не инвалидируются, и когда такое соединение выбирается для выполнения запроса, возникает ORA-03113. Мы не можем убрать пул (все тормозит) и не можем убрать отключение по тайм-ауту (требование безопасности). Более того - мы откатили ODP, но проблема осталась! Помогите!". Читаешь, и понимаешь, что у нас еще не все так плохо :)
Хоть у нас все и падает сразу и пул явно ни при чем - попробовали поиграться с его отключением или параметрами. А вот фиг.
В конце-концов разработчики на C# говорят: "Мы сдаемся! К вам едет "мистер Вульф, который решает пробемы" (Криминальное чтиво).". Приезжает человек, который занимается исключительно troubleshooting-ом разной неведаной фигни.
Человек целый день колдует с компилятором C# и кучей разных библиотек и в конце-концов говорит: "я не знаю, что бы это значило, но факт таков - если я до вызова процедуры сделаю хотя бы один select, то все работает хорошо". Проверяем - натурально, так оно и есть. Может, дело в каких-то миллисекундных паузах? Нет, расставленные по коду паузы не помогают.
Пляски с бубном продолжаются еще день, но без особого результата. В конце-концов принимается волевое решение о том, что код на C# должен после открытия соединения сделать "select table_name from all_tables where owner=current_user" и вычитать первый элемент рекордсета.
И все начинает работать без сучка и задоринки. Мораль придумайте сами.
(no subject)
Date: 2009-08-17 07:06 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
Date: 2009-08-17 07:06 pm (UTC)(no subject)
Date: 2009-08-17 07:06 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
Date: 2009-08-17 07:07 pm (UTC)(no subject)
Date: 2009-08-17 07:11 pm (UTC)(no subject)
Date: 2009-08-17 07:12 pm (UTC)Касательно центрального офиса в МТС у меня другие сведения - если у них и есть EMC, то не для этих целей.
(no subject)
From:(no subject)
From:(no subject)
Date: 2009-08-17 07:11 pm (UTC)(no subject)
Date: 2009-08-17 07:12 pm (UTC)(no subject)
Date: 2009-08-17 07:16 pm (UTC)# your code here
(no subject)
Date: 2009-08-17 07:20 pm (UTC)(no subject)
Date: 2009-08-17 07:23 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
Date: 2009-08-17 07:20 pm (UTC)(no subject)
Date: 2009-08-17 07:21 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
Date: 2009-08-17 07:23 pm (UTC)(no subject)
Date: 2009-08-17 07:40 pm (UTC)p.s. до сих пор на 9ке, ибо у государства нет денег :)
(no subject)
Date: 2009-08-17 07:41 pm (UTC)(no subject)
From:офф
From:Re: офф
From:Re: офф
From:(no subject)
From:(no subject)
Date: 2009-08-17 07:52 pm (UTC)(no subject)
Date: 2009-08-17 08:08 pm (UTC)Зато мои мучения на том проекте тут вернулись сторицей - все разложенные грабли были известны и т.п.
(no subject)
From:(no subject)
Date: 2009-08-17 08:01 pm (UTC)(no subject)
Date: 2009-08-17 08:13 pm (UTC)(no subject)
Date: 2009-08-17 08:43 pm (UTC)Это смежники делали, и выбора особого не предлагали.
(no subject)
From:(no subject)
Date: 2009-08-17 08:51 pm (UTC)а сам по себе валидировать коннект перед использованием пул не умеет?
(no subject)
Date: 2009-08-17 09:01 pm (UTC)А с простыми select-ами вроде бы тоже экспериментировали, но остановились на сложном. Подозреваю, что не просто так :)
О консерватории
Date: 2009-08-17 09:41 pm (UTC)-- cut --
2. Модернизация существующего оборудования, поставка оборудования: сканеров от ABBYY и серверов от IBM.
3. Постачання програмного забезпечення від компаній ABBYY, IBM і Galantis
4. Адаптация программного обеспечения компанией Galantis, а также миграция существующих данных.
-- end cut --
(no subject)
Date: 2009-08-17 10:01 pm (UTC)(no subject)
Date: 2009-08-18 06:39 am (UTC)(no subject)
Date: 2009-08-18 01:06 am (UTC)Просто навіть цікаво, що саме "нормалізує" цей перший селект і де саме.
(no subject)
Date: 2009-08-18 06:11 am (UTC)типичной. Рано или поздно соединение может поломаться,
для этого в connection-pool встраивают валидацию соедиения, - запросом.
http://commons.apache.org/dbcp/configuration.html
validationQuery=select 1; #наприммер такой запрос для MySQL
The SQL query that will be used to validate connections from this pool before returning them to the caller. If specified, this query MUST be an SQL SELECT statement that returns at least one row.
Соответственно если при запросе соединения из пула указанный запрос не сработает,
реальное соединение с базой будет переоткрыто.
(no subject)
Date: 2009-08-18 06:43 am (UTC)Как я уже писал, наша проблема была не в пуле - его отключение не спасало, плюс ошибка происходила сразу же после открытия соединения.
(no subject)
From:(no subject)
Date: 2009-08-18 07:01 am (UTC)(no subject)
Date: 2009-08-18 07:24 am (UTC)(no subject)
Date: 2009-10-07 08:28 am (UTC)(no subject)
Date: 2009-08-18 03:07 pm (UTC)(no subject)
Date: 2009-08-19 02:56 am (UTC)(no subject)
Date: 2009-10-05 01:24 pm (UTC)