Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jdbc Блокировки, Проблема с апдейтом 
V
    Опции темы
cra6
Дата 22.7.2009, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.12.2007

Репутация: 2
Всего: 2



Есть java приложение которое работает с базой Oracle  и GSM модемом через  jdbc:oracle:thin
возник указанный ниже ексепшн.Подозреваю что это всё из-за апдейта который не может выполнится из-за блокировки записи в Оракл.Как вообще можна с таким боротся?Проверить заблокирована ли запись или в обработчике чего то написать...
Буду благодарен за любой комментарий.



22.07.2009 9:34:41 readmsg.OraSms receiveSms
SEVERE: processingSmsErrorSQL
java.sql.SQLException: Данные для считывания из сокета отсутствуют
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java)
    at oracle.jdbc.ttc7.MAREngine.unmarshalUB1(MAREngine.java)
    at oracle.jdbc.ttc7.MAREngine.unmarshalSB1(MAREngine.java)
    at oracle.jdbc.ttc7.Oopen.receive(Oopen.java)
    at oracle.jdbc.ttc7.TTC7Protocol.open(TTC7Protocol.java)
    at oracle.jdbc.driver.OracleStatement.open(OracleStatement.java)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java)
    at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java)
    at readmsg.Oracle.sqlOraUpd(Oracle.java:73)
    at readmsg.OraSms.receiveSms(OraSms.java:177)
    at readmsg.ReadAndSendMessages$InboundNotification.process(ReadAndSendMessages.java:239)
    at org.smslib.modem.AModemDriver$AsyncMessageProcessor.run(AModemDriver.java:876)
22.07.2009 9:42:59 readmsg.OraSms receiveSms
SEVERE: processingSmsErrorSQL
java.sql.SQLException: Исключение ввода/вывода: Software caused connection abort: socket write error
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java)
    at oracle.jdbc.ttc7.TTC7Protocol.handleIOException(TTC7Protocol.java)
    at oracle.jdbc.ttc7.TTC7Protocol.open(TTC7Protocol.java)
    at oracle.jdbc.driver.OracleStatement.open(OracleStatement.java)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java)
    at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java)
    at readmsg.Oracle.sqlOraUpd(Oracle.java:73)
    at readmsg.OraSms.receiveSms(OraSms.java:177)
    at readmsg.ReadAndSendMessages$InboundNotification.process(ReadAndSendMessages.java:239)
    at org.smslib.modem.AModemDriver$AsyncMessageProcessor.run(AModemDriver.java:876)


PM MAIL   Вверх
DimW
Дата 22.7.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



для понимания ситуации вопросы:
1) данный эксепшн вываливается всегда, или периодически?
2) версия jdbc и версия oracle?
3) можно увидеть исходник котрый выполняется методом executeQuery

ps. а вобще похоже на потерю соединения драйвера с ораклом, т.е. запрос ушел, а получить ответ не удалось.
нечно похожее проскакивало при работе с ораклом 9 с использованием jdbc для оракл 10. (причину не выявили).
вполне может и модем ложать... (но это личный довод, обосновать немогу)

но на вопросы всетаки ответьте.

PM MAIL ICQ   Вверх
cra6
Дата 22.7.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.12.2007

Репутация: 2
Всего: 2



1)Exception  вываливается довольно редко , как реакция на входящее сообщение + возникает утром когда отрабатывают процессы закрытия дня и т.д. Причём программа успевает вставить в базу данные о пришедшей смс ке. Проблема явно в апдейте...
2)Oracle JDBC Driver version - 9.0.2.0.0
   Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production

3)executeQuery заменил на executeUpdate
Код


public static void sqlOraUpd(String oraDoSql,Connection conn) throws SQLException{
  
    try{
               Statement st_query = conn.createStatement();
               st_query.executeUpdate(oraDoSql);
               conn.commit();
               st_query.close();
            
          
      }    catch(SQLException ex){
          ex.printStackTrace(System.out);
          OraSms.logger.log(Level.SEVERE, "SQLUpdate", ex);
          throw ex;
      }
    
    } 


PM MAIL   Вверх
DimW
Дата 22.7.2009, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(cra6 @  22.7.2009,  16:26 Найти цитируемый пост)
3)executeQuery заменил на executeUpdate

вобще то я имел ввиду SQL который выполняется, но уже не важно ошибка была точно такая же "socket write error
", я больше чем уверен что проблема не в SQL, а в его вызове и блокировки тут не причем т.к. ошибку явно не оракл вещает, а сами дрова.
немного поясню:
т.к. проблему идентифицировать неудалось в связи с отсутсвием ее описания даже на металинке, по этому буду руководствоваться своими наблюдениями.
ошибка не возникала втой части ПО где при разработке использовались объекты иметоды пакета "import oracle.jdbc.*"
ваш метод sqlOraUpd будет выглядеть примерно так:
Код

public static void sqlOraUpd(String oraDoSql,Connection conn) throws SQLException
{
    try
    {
        OracleCallableStatement stmt;
        stmt = (OracleCallableStatement) conn.prepareCall(oraDoSql);
        stmt.execute();
        stmt.close();
    }    
    catch(SQLException ex)
    {
        ex.printStackTrace(System.out);
        OraSms.logger.log(Level.SEVERE, "SQLUpdate", ex);
        throw ex;
    }



еще одна особенность заключалась в том, что логика была реализована на уровне БД(думаю это не так важно):
Код

create procedure sql_ora_upd as
begin
  update table1
     set name = 'name'
    where 1=1; 
end;


соответственно ваш параметр oraDoSql должен содержать вызов этой процедуры:
Код

String oraDoSql = "begin sql_ora_upd; end;";


вобщем решать вам реализовывать так как я показал или нет, но попробывать стоит ибо 100%-го лекарства нет. 

PM MAIL ICQ   Вверх
DimW
Дата 22.7.2009, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



еще предположение:
возможно при использовании пакета oracle.jdbc, методы используют какие то "особые параметры" для идентфикации коннекта между ораклом и объектом который его определяет, поэтому я больше склоняюсь к потере конекта с БД, чем к магическому действию методов пакета oracle.jdbc.

Добавлено через 4 минуты и 33 секунды
еще инфа для размышления: http://www.sql.ru/forum/actualthread.aspx?tid=627245
PM MAIL ICQ   Вверх
LSD
Дата 22.7.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Ну вообще судя по
Цитата
Исключение ввода/вывода: Software caused connection abort: socket write error

проблема в том, что TCP/IP соединение рвется. Какая версия драйвера используется?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
DimW
Дата 23.7.2009, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(LSD @  22.7.2009,  19:22 Найти цитируемый пост)
Какая версия драйвера используется?


Цитата(cra6 @  22.7.2009,  16:26 Найти цитируемый пост)
Oracle JDBC Driver version - 9.0.2.0.0


PM MAIL ICQ   Вверх
cra6
Дата 23.7.2009, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.12.2007

Репутация: 2
Всего: 2



Спасибо за помощь. Действительно была потеря коннекта. 
Решил с помощью проверки conn.isValid();
PM MAIL   Вверх
LSD
Дата 23.7.2009, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(DimW @  23.7.2009,  08:47 Найти цитируемый пост)
Oracle JDBC Driver version - 9.0.2.0.0

Это версия базы, а не драйвера. Там есть драйвера под JDK 1.2, 1.3 и 1.4, так вот драйвер под 1.4 должен показывать дополнительную информацию об ошибке.

Добавлено через 1 минуту и 41 секунду
Цитата(cra6 @  23.7.2009,  09:14 Найти цитируемый пост)
Решил с помощью проверки conn.isValid(); 

В принципе можно периодически делать
Код

select * from dual


Некоторые библиотеки сами умеют периодически проверять коннект на валидность.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
DimW
Дата 23.7.2009, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(LSD @  23.7.2009,  12:16 Найти цитируемый пост)
Это версия базы

расковыриваю ojdbc14.jar? лезу в каталог META-INF, открываю файл MANIFEST.MF, внем:
Цитата

Manifest-Version: 1.0
Specification-Title:    Oracle JDBC driver classes for use with JDK14
Sealed: true
Created-By: 1.4.2_14 (Sun Microsystems Inc.)
Implementation-Title:   ojdbc14.jar
Specification-Vendor:   Oracle Corporation
Specification-Version:  Oracle JDBC Driver version - "10.2.0.4.0"
Implementation-Version: Oracle JDBC Driver version - "10.2.0.4.0"
Implementation-Vendor:  Oracle Corporation
Implementation-Time:    Sat Feb  2 11:40:29 2008

Name: oracle/sql/converter/
Sealed: false

Name: oracle/sql/
Sealed: false

Name: oracle/sql/converter_xcharset/
Sealed: false


Oracle JDBC Driver version - "10.2.0.4.0" - это не оно?
PM MAIL ICQ   Вверх
LSD
Дата 23.7.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Это версия Oracle для которой этот драйвер, если распаковать classes111.jarclasses12.jar и ojdbc14.jar то там везде будет одна и та же версия (у меня Oracle JDBC Driver version - 9.0.2.0.0). Может я не совсем корректно выразился, но меня интересовала строчка: Oracle JDBC driver classes for use with JDK14.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
DimW
Дата 24.7.2009, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(LSD @  23.7.2009,  12:29 Найти цитируемый пост)
но меня интересовала строчка: Oracle JDBC driver classes for use with JDK14

ясно, спасибо.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0865 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.