За последние 24 часа нас посетили 16636 программистов и 1651 робот. Сейчас ищет 1371 программист ...

Socket & ORA-03113

Тема в разделе "PHP и базы данных", создана пользователем Himan, 21 авг 2017.

  1. Himan

    Himan Новичок

    С нами с:
    21 авг 2017
    Сообщения:
    6
    Симпатии:
    0
    Добрый день всем.
    Столкнулся с таким случаем. С помощью socket_connect подсоединяюсь к сокету и сразу же логирую в базу. Всё работает на ура. Но стоит только сокету получить TimeOut, то последующее логирование в базу (oci_execute) выдаёт ошибку
    Warning
    : oci_execute(): ORA-03113: end-of-file on communication channel Идентификатор процесса: 518 Идентификатор сеанса: 83 Порядковый номер: 61670 in /usr/local/apache2/htdocs/ps/vendor/application.php on line
    Хотя последующее обращение к базе проходит нормально. Такое впечатление, что вываливается все соединения данного процесса. В чём может быть проблема?

    Код (Text):
    1. function getAgentBalance ($id_plat_klient=null) {
    2.         if(!$this->socket->connect()){
    3.             $errdesc = 'socket_instance->connect:' . $this->socket->get_last_error_description();
    4.             App::db_log(__FUNCTION__, App::SEND_MESSAGE, '', -1, $errdesc, $id_plat_klient);
    5.             return false;
    6.         }
    7. return true;
    8. }
    9.  
    10. ------------------------- SocketConnect --------------------------
    11. public function connect() {
    12.         $this->last_error_description = '';
    13.  
    14.         if (!($this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP))) {
    15.             $this->last_error_description = 'socket_create:' . socket_strerror(socket_last_error());
    16.             return false;
    17.         }
    18.  
    19.         if (!socket_connect($this->socket, App::$config['fp']['ip'], App::$config['fp']['port'])) {
    20.             $this->last_error_description = 'socket_connect:' . socket_strerror(socket_last_error());
    21.             return false;
    22.         }
    23.         return true;
    24.     }
    25. -------------------------- App -------------------------
    26. public static function db_log($actor, $message_type, $content, $status, $error_desc, $id_plat_klient) {
    27. if (!self::$db_connection) {
    28.             $e = oci_error();
    29.             trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    30.         }
    31.  
    32.         $query_text = "INSERT INTO PS_MESSAGE_LOG (SERVICE, ACTOR, MESSAGE_TYPE, CONTENT, STATUS, ERROR_DESC, ID_PLAT_KLIENT)"
    33.         ." values (:SERVICE, :ACTOR, :MESSAGE_TYPE, :CONTENT, :STATUS, :ERROR_DESC, :ID_PLAT_KLIENT)";
    34.         self::$log_query = oci_parse(self::$db_connection, $query_text);
    35.         if (!self::$log_query) {
    36.            $e = oci_error(self::$db_connection);
    37.            self::file_log($e['message']);
    38.         }
    39.  
    40.          oci_bind_by_name(self::$log_query, ":SERVICE", self::$service);
    41.          oci_bind_by_name(self::$log_query, ":ACTOR", $actor);
    42.          oci_bind_by_name(self::$log_query, ":MESSAGE_TYPE", $message_type);
    43.          oci_bind_by_name(self::$log_query, ":CONTENT", $content);
    44.          oci_bind_by_name(self::$log_query, ":STATUS", $status);
    45.          oci_bind_by_name(self::$log_query, ":ERROR_DESC", $error_desc);
    46.          oci_bind_by_name(self::$log_query, ":ID_PLAT_KLIENT", $id_plat_klient);
    47.  
    48.          $r = oci_execute(self::$log_query);
    49.          if (!$r) {
    50.             $e = oci_error(self::$log_query);
    51.             self::file_log($e['message'] . ': ' . $e['sqltext'] . ' at:' . $e['offset']);
    52.          }
    53.      }
    Выставить всё и "красиво" не получается, дофига классов задействовано. Но общая суть отражена. Спасибо за помощь.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.861
    Симпатии:
    751
    Адрес:
    Татарстан
    warning - не ошибка