Сбой приложения Proc * C в Oracle 12.2 - PullRequest
0 голосов
/ 28 июня 2018

При запуске некоторых приложений на сервере 172.19.112.43 oracle вызывает сбой приложений. Oracle версии 12.2, версия Linux - Red Hat Enterprise Linux Server версии 6.0 (Сантьяго).

Пожалуйста, найдите под следом аварии:

0  0x00007f332756754b in raise () from /lib64/libpthread.so.0 

1  0x00007f33233eb212 in skgesigOSCrash () from   /home0/ora12c/app/ora12c/product/12.2.0/dbhome_1/lib/libclntsh.so.12.1 

2  0x00007f3323a0b535 in kpeDbgSignalHandler () from /home0/ora12c/app/ora12c/product/12.2.0/dbhome_1/lib/libclntsh.so.12.1 

3  0x00007f33233eb550 in skgesig_sigactionHandler () from /home0/ora12c/app/ora12c/product/12.2.0/dbhome_1/lib/libclntsh.so.12.1 

4  <signal handler called> 

5  0x00007f332144220c in kpudfni () from /home0/ora12c/app/ora12c/product/12.2.0/dbhome_1/lib/libclntsh.so.12.1 

6  0x00007f3321442f9b in kpudfn2 () from /home0/ora12c/app/ora12c/product/12.2.0/dbhome_1/lib/libclntsh.so.12.1 

7  0x00007f33213c5e8a in sqlcucDefine () from /home0/ora12c/app/ora12c/product/12.2.0/dbhome_1/lib/libclntsh.so.12.1 

8  0x00007f3323d225cb in sqlall () from /home0/ora12c/app/ora12c/product/12.2.0/dbhome_1/lib/libclntsh.so.12.1 

9  0x00007f3323d1f5bc in sqlnst () from /home0/ora12c/app/ora12c/product/12.2.0/dbhome_1/lib/libclntsh.so.12.1 

10 0x00007f3323d1b206 in sqlcxt () from /home0/ora12c/app/ora12c/product/12.2.0/dbhome_1/lib/libclntsh.so.12.1 

11 0x00007f3326a88c51 in CSTDbConnection::ProcessSelect (this=0x646900 <objDBConn>, VecColumnsobj=std::vector of length 1, capacity 1 = {...}, VecWheresobj= 
std::vector of length 1, capacity 1 = {...}, strOrderBy="") at    STDbConnException.cpp:11377 

Это происходит во многих приложениях. То же приложение работает абсолютно нормально с Oracle 12.1, но при запуске приложений в Oracle 12.2 происходит сбой . Мы также отключили функции диагностики на стороне клиента и сервера, установив следующие параметры в файле sqlnet.ora.

DIAG_ADR_ENABLED = OFF

DIAG_SIGHANDLER_ENABLED = FALSE

DIAG_DDE_ENABLED = FALSE

Но даже это не помогло. Кусок кода, который выдает эту ошибку:

    short nIndex7=0;
    int intVecIndex=0;
    int LastIndex =0;
    while(true)
    {
    memset(szDBErrorCode,'\0',DB_ERROR_LEN);
            vector<CSTColumn> objVecColumns;
            //cout<<"Inside While Loop"<<endl;
            EXEC SQL FETCH select_cursor INTO DESCRIPTOR 'out';

Оператор FETCH выдает ошибку для всех приложений. Иногда запрос на выбор выполняется несколько раз, прежде чем выдать ошибку.

Cpp часть кода, выдающая ошибку:

        short nIndex7=0;
       int intVecIndex=0;
       int LastIndex =0;
       //EXEC SQL WHENEVER NOT FOUND DO BREAK ;
    while(true)
    {
    memset(szDBErrorCode,'\0',DB_ERROR_LEN);
            vector<CSTColumn> objVecColumns;
            //cout<<"Inside While Loop"<<endl;
            /* EXEC SQL FETCH select_cursor INTO DESCRIPTOR 'out'; */

{
  struct sqlexd sqlstm;
 sqlstm.sqlvsn = 13;
 sqlstm.arrsiz = 4;
 sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int  )1;
sqlstm.offset = (unsigned int  )822;
sqlstm.selerr = (unsigned short)1;
sqlstm.sqlpfmem = (unsigned int  )0;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char  *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int  )0;
sqlstm.sqfoff = (         int )0;
sqlstm.sqfmod = (unsigned int )2;
sqlcxt(&my_context, &sqlctx, &sqlstm, &sqlfpn); // This line gave the core
  }

Может кто-нибудь, пожалуйста, пролить свет на это.

1 Ответ

0 голосов
/ 24 августа 2018

Это, похоже, настоящая ошибка Oracle. Исправлено в 18.1, но с патчем для 12.2

Ошибка 26911212: СБОЙ ПРИЛОЖЕНИЯ PROC, ЕСЛИ SQL РАСПРОСТРАНЯЕТСЯ ПО НЕСКОЛЬКИМ ФАЙЛАМ

Имеет именно те симптомы, с которыми вы - и мы - столкнулись: недопустимый вызов malloc / realloc откуда-то глубоко в нижних областях Pro * C sqlctxt, вызывающий sigabrt ()

В примечаниях к патчу это описывается как ошибка прекомпилятора, что подразумевает, что это может быть проблема в коде, сгенерированном прекомпилятором, который не будет соответствовать нашим признакам (мы фактически скомпилировали на 12.1, но работали на клиенте 12.2). Фактически, когда вы запускаете патч, патчи делятся с общими библиотеками libclntshcore.so и т. Д., Поэтому, если вы не устанавливаете статические ссылки, нарушается среда клиента во время выполнения, а не среда прекомпилятора.

...