Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle APEX Новый топик    Ответить
 APEX и Global Temporary Table  [new]
Darkripple
Member

Откуда:
Сообщений: 101
добрый день. ситуация следующая:
в приложении активно используются global temporary table, с расчетом на то, что пользователи не будут видеть данные друг друга. но проверка показала, что APEX со своим apex_public_user-ом создает всего одну сессию БД на всех и, соответственно, разные пользователи работающие в приложении на разных машинах по сути пользуются одними данными.

как можно этого избежать? не хотелось бы отказываться от GTT или добавлять в них поля типа идентификатор apex-сессии.
как можно заставить апекса создавать каждый раз новую сессию к БД при коннекте очередного пользователя?
30 сен 10, 09:01    [9527044]     Ответить | Цитировать Сообщить модератору
 Re: APEX и Global Temporary Table  [new]
organiz
Member

Откуда:
Сообщений: 17
Darkripple,

Возможно Вам подойдет механизм коллекций в APEX.

Using Collections

APEX_COLLECTION

Пример реализации: Sample Applications -> Collection Showcase
30 сен 10, 10:24    [9527525]     Ответить | Цитировать Сообщить модератору
 Re: APEX и Global Temporary Table  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7797
Блог
Darkripple,

на самом деле APEX и создаёт каждый раз новую сессию. Только не при "коннекте очередного пользователя", а при каждом отображении и при каждой обработке страницы, а также при обращении к БД через AJAX. Так что проблемой для Вас будет сохранить данные во временной таблице от одного соединения к следующему.

Как уже сказали, используйте коллекции APEX.

PS: Интересно, как проводилась проверка, раз Вы увидели только одну сессию APEX_PUBLIC_USER.
30 сен 10, 10:41    [9527678]     Ответить | Цитировать Сообщить модератору
 Re: APEX и Global Temporary Table  [new]
Darkripple
Member

Откуда:
Сообщений: 101
коллекции апекса не очень подходят, так как среда работы будет не только апексовая, и хотелось создать единобезобразную схему запоминания параметров.
suPPLer
на самом деле APEX и создаёт каждый раз новую сессию
suPPLer
Интересно, как проводилась проверка, раз Вы увидели только одну сессию APEX_PUBLIC_USER
проверка проводилась так:
запускалось приложение на одной машине. делался запрос в БД
select SID,SERIAL#, CLIENT_INFO from v$session vv where username = 'APEX_PUBLIC_USER'
запоминался sid и serial. потом запускалось приложение на другой машине из под другого пользователся. повторялся запрос. sid и serial оставались теми же. поменялся только CLIENT_INFO.
потом запускалось совсем другое приложение. результат тот же.
то есть такое ощущение что он вообще держит одну сессию на всех.
suPPLer
Так что проблемой для Вас будет сохранить данные во временной таблице от одного соединения к следующему
в том то и дело, что проблема в обратном.
запускаю приложение на одной машине. вставляю в GTP пару записей. запускаю приложение на другой машине - и вывожу содержимое таблицы - те самые две записи.
30 сен 10, 12:07    [9528776]     Ответить | Цитировать Сообщить модератору
 Re: APEX и Global Temporary Table  [new]
Darkripple
Member

Откуда:
Сообщений: 101
не "GTP", а "GTT", опечатолся (:
30 сен 10, 12:15    [9528835]     Ответить | Цитировать Сообщить модератору
 Re: APEX и Global Temporary Table  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7797
Блог
Darkripple,

я упростил. :) APEX использует соединения типа shared server. Набор серверных процессов обрабатывает запросы набора клиентских процессов без постоянного соответствия 1-к-1 процесса из первого набора процессу из второго (как это работает в dedicated server connections). Серверные процессы могут создаваться/уничтожаться во время работы экземпляра, если это необходимо. Поэтому принято не заморачиваться и считать, что при обращении к БД APEX открывает каждый раз новое соединение, stateless connection. Между этими соединениями нельзя рассчитывать ни на что, связанное с конкретным соединением: глобальные переменные пакетов, не-глобальные пользовательские контексты, сегменты GTT...

PS: Интересно, сколько у Вас серверных процессов?
select name, value from v$parameter where name like '%shared_servers';
30 сен 10, 18:57    [9533049]     Ответить | Цитировать Сообщить модератору
 Re: APEX и Global Temporary Table  [new]
killed
Member

Откуда: Moscow
Сообщений: 3526
suPPLer,

по-моему АПЕКС использует тот тип сервера, который настроен.
1 окт 10, 03:03    [9534237]     Ответить | Цитировать Сообщить модератору
 Re: APEX и Global Temporary Table  [new]
Darkripple
Member

Откуда:
Сообщений: 101
suPPLer
PS: Интересно, сколько у Вас серверных процессов?
запрос выдал
shared_servers    	1
suPPLer
Между этими соединениями нельзя рассчитывать ни на что, связанное с конкретным соединением
ясно, вобщем засада-подстава. придется отказаться от GTT и юзать обычную таблицу со ссылкой на сессию..
1 окт 10, 07:26    [9534358]     Ответить | Цитировать Сообщить модератору
 Re: APEX и Global Temporary Table  [new]
Alexus12
Member

Откуда:
Сообщений: 2830
посмотрите на это:

Using Virtual Private Database (VPD) in an HTML DB Application
http://www.oracle.com/technology/products/database/application_express/html/vpd.html

возможно, вам очень подойдет
1 окт 10, 18:39    [9540541]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: APEX и Global Temporary Table  [new]
shurikt
Member

Откуда: Казахстан
Сообщений: 244
Прикольно, дословный перевод этой темы у буржуев:
http://www.progtown.com/topic610853-apex-and-global-temporary-table.html
18 сен 17, 09:22    [20802468]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle APEX Ответить