powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / виснет вызов extproc из сессии WebDB
23 сообщений из 23, страница 1 из 1
виснет вызов extproc из сессии WebDB
    #39343554
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
По какой-то причине при вызове внешней процедуры в теле процедуры веб странички, происходит залипание (по другому и не скажешь) вызова. Процесс extproc.exe запускается, но дальше ничего не происходит. Статус сеанса пользователя ANONYMOUS - "active", страничка - не загружается. Как будто идет циклический вызов процедуры.
Причем по отдельности - и страничка (если убрать вызов extproc) и внешняя процедура (если её вызвать из толстого клиента или Девелопера) отрабатывают нормально.

Подскажите, чем их ковырнуть, куда посмотреть. База - Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit , Виндавс 10.
На десятом оракле - всё работает.
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39343568
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, добавлю. Это хозяйство только что поставлено, т.е. это не тот случай, когда "всё работало и вдруг сломалось".
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39343729
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё, на этой машине, ANONYMOUS запускается через shared сервер, а на рабочей - через выделенный. А поле "Schemaname" в v$session - пусто (на рабочей - "Schemaname"=ANONYMOUS). Чего-то не так сконфигурировал. Но ведь shared - тоже полезный режим, если дело в этом, то это не выход.
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39344007
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несмотря на отсутствие явной ошибки, сама функция (dll) не запускается.
Без разницы, функция с передачей контекста или без.
В логах только следы последующего срубания сессии анонимуса.
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39344011
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vava,

В позатом году обновляли одну БД любителей extproc до 12c.
Налетели на: Bug 18169693 : EXTERNAL PROCEDURE AGENT NOT SPAWNING THROUGH LISTENER CONFIG IN 12.1.0.1
Диагностика присутствовала в $ORACLE_HOME/hs/log
Плюс у extproc, наверняка, должны быть отладочные параметры, регулирующие полноту логирования.
Типа описанных : How to Enable Oracle SQL*Net Client , Server , Listener , Kerberos and External procedure Tracing from Net Manager (Doc ID 395525.1) в разделе Tracing External Procedures (Extproc), плюс TRACE_LEVEL=ON в extproc.ora в ряде документов встречается, но у меня до этого дело не дошло.
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39344017
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeaGate,
Спасибо за инфу, изучу. Да, и на этой же машине стоит ЕМенеджер 12с в полном комплекте :)
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39344274
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё, подскажите, где выставляется режим подключения (шаред/выделенный) у WebDB ? А то в tnsnames выставлено SERVER = DEDICATED, но сессии ANONYMOUS всё равно подключаются как SHARED.

Ну и немного в сторону. Правильно ли я думаю: если подключение SHARED, то с реализацией а-ля COMET/websocket (когда сервер должен удерживать подключение и отпускать чтоб передать событие браузеру) будут проблемы.
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39345453
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выставил в SPFILE shared_servers = 0, отвалились все подключения тонких клиентов, в т.ч. EManager 12c.
Есть ли возможность как-то заставить его забыть про SHARED?
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39351010
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Снова добрый день.

Соберу всё вместе, вдруг кто сможет помочь :

База 12c EE (12.1.0.2.0), 64bit , WIN 10 :)

Всё создается под одним пользователем USER1.

Есть процедура
Код: plsql
1.
2.
3.
4.
procedure Page1 is 
begin
htp.p('<HTML><BODY> abc </BODY></HTML>');
end;


Отрабатывает успешно, страничка загружается, в браузере отображается.

ДАД настраивался подобным образом:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
begin 
dbms_xdb.setHTTPPort(8080);
dbms_epg.create_dad('dad','/dd/*');
dbms_epg.set_dad_attribute('dad','database-username','USER1');
dbms_epg.authorize_dad('dad','USER1');
...
end;


Пользователи ANONYMOUS и XDB разблокированы.

Есть функция
Код: plsql
1.
2.
3.
4.
5.
 function mySQRT(d in double precision) return double precision as
  language C
	library ora_dll_lib
	name "SquareRoot"
	parameters (d double,return double);


При подключении девелопером как USER1, отрабатывает нормально.

Проблема возникает, если выполнить вызов этой функции внутри процедуры, вызываемой через DAD:
Код: plsql
1.
2.
3.
4.
5.
6.
procedure Page1 is 
ret number;
begin
ret:=mySQRT(81);
htp.p('<HTML><BODY> My Page </BODY></HTML>');
end;



Проблема выглядит как зависание сессии ANONYMOUS, с ожиданием "virtual circuit wait", подключается как SHARED.

На старой машине с 10G (+Apache) всё работало сразу, а все подключения ANONYMOUS'a шли как DEDICATED.

Подумалось, что дело в режиме подключения ANONYMOUS'a. В TNS прописал DEDICATED - не помогает. Если в SPFILE поставить shared_servers=0, отваливается любой доступ через веб.

Подскажите, возможно в 11g,12с совсем иначе реализован доступ через веб? (Apache / EPG).
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39351222
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
owa_util.print_cgi_env:

Отличающиеся значения показаны двойной строкой (старая машина / новая машина):

PLSQL_GATEWAY = WebDb
GATEWAY_IVERSION =
3
2
SERVER_SOFTWARE =
Oracle Embedded PL/SQL Gateway/10.2.0.1.0
Oracle Embedded PL/SQL Gateway/12.1.0.2.0
GATEWAY_INTERFACE = CGI/1.1
SERVER_PORT = 8080
SERVER_NAME = XDB HTTP Server
REQUEST_METHOD = GET
PATH_INFO = /test_pack.test2
SCRIPT_NAME = /dd
REMOTE_HOST =
REMOTE_ADDR = xx.xx.xx.xx
SERVER_PROTOCOL = HTTP/1.1
REQUEST_PROTOCOL =
tcp
HTTP
REMOTE_USER = USER1
ORACLE_SSO_USER =
HTTP_CONTENT_LENGTH = 0
HTTP_CONTENT_TYPE =
HTTP_USER_AGENT = mozilla/4.0 (compatible; msie 7.0; windows nt 10.0; wow64; trident/7.0; touch; .net4.0c; .net4.0e; .net clr 2.0.50727; .net clr 3.0.30729; .net clr 3.5.30729; tablet pc 2.0; infopath.3)
HTTP_HOST = myhost:8080
HTTP_ACCEPT = image/gif,image/jpeg,image/pjpeg,application/x-ms-application,application/xaml+xml,application/x-ms-xbap,*/*
HTTP_ACCEPT_ENCODING = gzip,deflate
HTTP_ACCEPT_LANGUAGE = en-US,en;q=0.7,ru;q=0.3
WEB_AUTHENT_PREFIX =
DAD_NAME = dd
DOC_ACCESS_PATH = docs
DOCUMENT_TABLE = wpg_document
PATH_ALIAS =
REQUEST_CHARSET = CL8MSWIN1251
REQUEST_IANA_CHARSET = WINDOWS-1251
SCRIPT_PREFIX =
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39351861
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Определённость увеличилась:
Т.к. заставить работать XDB в режиме DEDICATED пока не получилось, то наоборот, перевёл обычные подключения в режим SHARED.
Теперь, подключаясь через PL/SQL Developer и пытаясь напрямую запустить внешнюю процедуру:
Код: plsql
1.
select ext_proc_test.m_sqrt(81) as xx from dual


получаем тот-же самый зависон сессии.
Таким образом, проблема зависит именно от режима SHARED. Неправильно сконфигурирован агент внешних процедур?
И что означает в TNS указание "(PRESENTATION = RO)" ?
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39351866
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для EXTPROC, "(PRESENTATION = RO)" - видимо единственное значение layer translate.
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39352076
user1241
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vava,

shared_servers > 1 ?
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39352116
user1241
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
ret:=mySQRT(81);


docDo not call an external procedure directly. Instead, use the CALL statement to call the PL/SQL subprogram that published the external procedure. See "CALL Statement Syntax".
Код: plsql
1.
EXECUTE IMMEDIATE 'CALL mySQRT(:1) into :2' USING in 81, out ret; 
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39352159
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user1241, спасибо за участие.

Да, shared_servers > 1 (=5). Пробовал разные.

Если сессия SHARED, то при
Код: plsql
1.
EXECUTE IMMEDIATE 'CALL mySQRT(:1) into :2' USING in 81, out ret;


получаем ORA-28575 (не удается RPC-подключение к агенту внешних процедур...)

Если сессия DEDICATED, то работает в любом виде (и явном и через CALL).

Сформировались два вопроса - разных, но приводящих к какому-то решению моей проблемы:
1. Как заставить XDB подключаться через DEDICATED?
2. Как выполнить внешнюю процедуру из SHARED-сессии?
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39352267
User1241
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vava,

1. Никак, xml db сделан под архитектуру shared servers
2. Если на 10g оно же выполняется, покажите работающую shared конфигурацию: tnsnames, listener.ora и параметр dispatchers с 10g. И те же самые неработающие конфиги с 11g.
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39352304
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User1241,

На старой машине (10g), все сессии, включая ANONYMOUS'a от браузера (через что же он работает?), всегда DEDICATED. Вот проблема и не появлялась.
Завтра уточню.
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39352753
user1241
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vava,

Может показывать DEDICATED, если сессия INACTIVE. см. чтобы статус сессии был ACTIVE (и случай без вызова dblink / внешних процедур).
Через что работает см. порты lsnrctl status и порт от браузера.
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39353497
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user1241,

Да, так и есть - на обеих машинах сессии XDB - SHARED в состоянии ACTIVE. Т.е. с позиции веб-доступа машины одинаковы, всё проявляется и при подключении Девелопером.

Я изменил настройки старой машины на SHARED и проверил Девелопером:
Код: plsql
1.
2.
3.
4.
5.
select status, server from v$session where sid=sys_context('userenv', 'sid')
:	ACTIVE	SHARED

select user1.ext_proc_test.m_sqrt(81) as xx from dual
:	9



На новой машине:
Код: plsql
1.
2.
3.
4.
5.
select status, server from v$session where sid=sys_context('userenv', 'sid')
:	ACTIVE	SHARED

select user1.ext_proc_test.m_sqrt(81) as xx from dual
:	ORA-28575: unable to open RPC connection to external procedure agent 



При подключении по DEDICATED - везде отрабатывает нормально (и быстро).

Вот TNS/Listener со старой машины:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = SHARED)
      (SERVICE_NAME = orcl)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

#LISTENER
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
      (PROGRAM = extproc)
      (ENV = "EXTPROC_DLLS=ANY")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521))
    )
  )


А это с новой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = SHARED)
      (SERVICE_NAME = ORCL)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

#LISTENER
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\app\user\product\12.1.0\dbhome_1)
      (PROGRAM = extproc)
      (ENV = "EXTPROC_DLLS=ANY")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )


Параметр dispatchers одинаков:
Код: plaintext
(PROTOCOL=TCP)
-выставлен для SHARED-подключения. Ранее (для обычных подключений DEDICATED, а для веб-SHARED) был:
Код: plaintext
(PROTOCOL=TCP) (SERVICE=ORCLXDB)
/*на старой*/
Код: plaintext
(PROTOCOL=TCP) (SERVICE=orclXDB)
/*на новой*/
shared_servers тоже: =5

Изначально, на новой машине EXTPROC был сконфигурирован через
Код: plaintext
CLRExtProс

Ситуация свелась к следующей:
При подключении Девелопером как DEDICATED - работает везде.
При подключении как SHARED, на старой - работает, на новой - ORA-28575.

Может есть какие-то новшества в конфигурировании EXTPROC? Например, оказалось, что "EXTPROC_DLLS=ANY" теперь нужно прописывать в некоем дополнительном файлике \dbhome_1\hs\admin\extproc.ora
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39354031
user1241
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vava,

Стоит поместить

Код: plsql
1.
2.
3.
4.
5.
6.
7.
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )



по разным DESCRIPTION как в работающей конфигурации.

+ задать в extproc.ora все параметры, как описано в документации.

Ну а дальше экспериментировать:

- попробовать добавить dispatcher на протокол IPC
- попробовать добавить (SERVER=SHARED) в tnsnames
- если не получится, настроить multithreaded external procedure agent
- смотреть трассировки
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39354059
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vava,

Можете показать ваш sqlnet.ora ?

Regards

Maxim
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39354068
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Demenko,

Еще есть такая нота Doc ID 2108742.1, там пишут удалить из tnsnames.ora EXTPROC_CONNECTION_DATA, якобы это legacy

It is not necessary to configure extproc in either the listener or the tnsnames.ora file in versions 11g and newer. The extproc agent
references the ORACLE_HOME/hs/admin/extproc.ora file for the necessary settings.

Regards

Maxim
...
Рейтинг: 0 / 0
виснет вызов extproc из сессии WebDB
    #39354071
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Проблема вылечилась рестартом экземпляра после добавления настроек PLSExtProc к уже присутствующим CLRExtProc. Упорно не хотел применять настройки, один рестарт листенера не помогал.
Проблески (ещё до рестарта) появились после
Код: plaintext
ALTER SYSTEM SET DISPATCHERS='(PROTOCOL=IPC) (SERVICE=ORCLXDB)' scope=both
Но! После рестарта это не понадобилось, вернул
Код: plaintext
'(PROTOCOL=TCP) (SERVICE=ORCLXDB)'

Maxim Demenko,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\user\product\12.1.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ANY")
    )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\app\user\product\12.1.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ANY")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

#DIAG_ADR_ENABLED_LISTENER = OFF

#TRACE_LEVEL_LISTENER = ADMIN

Спасибо за помощь, всё вылечилось.
Похоже, по сравнению с Десяткой накрутили PLSExtProc / CLRExtProc , а я от прогресса отстал, надо поизучать.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / виснет вызов extproc из сессии WebDB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]